• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"""Tests for distutils.command.install_data."""
2import os
3import sys
4import unittest
5
6from distutils.command.install_lib import install_lib
7from distutils.extension import Extension
8from distutils.tests import support
9from distutils.errors import DistutilsOptionError
10from test.test_support import run_unittest
11
12class InstallLibTestCase(support.TempdirManager,
13                         support.LoggingSilencer,
14                         support.EnvironGuard,
15                         unittest.TestCase):
16
17    def test_finalize_options(self):
18        pkg_dir, dist = self.create_dist()
19        cmd = install_lib(dist)
20
21        cmd.finalize_options()
22        self.assertEqual(cmd.compile, 1)
23        self.assertEqual(cmd.optimize, 0)
24
25        # optimize must be 0, 1, or 2
26        cmd.optimize = 'foo'
27        self.assertRaises(DistutilsOptionError, cmd.finalize_options)
28        cmd.optimize = '4'
29        self.assertRaises(DistutilsOptionError, cmd.finalize_options)
30
31        cmd.optimize = '2'
32        cmd.finalize_options()
33        self.assertEqual(cmd.optimize, 2)
34
35    def _setup_byte_compile(self):
36        pkg_dir, dist = self.create_dist()
37        cmd = install_lib(dist)
38        cmd.compile = cmd.optimize = 1
39
40        f = os.path.join(pkg_dir, 'foo.py')
41        self.write_file(f, '# python file')
42        cmd.byte_compile([f])
43        return pkg_dir
44
45    @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile not enabled')
46    def test_byte_compile(self):
47        pkg_dir = self._setup_byte_compile()
48        if sys.flags.optimize < 1:
49            self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'foo.pyc')))
50        else:
51            self.assertTrue(os.path.exists(os.path.join(pkg_dir, 'foo.pyo')))
52
53    def test_get_outputs(self):
54        pkg_dir, dist = self.create_dist()
55        cmd = install_lib(dist)
56
57        # setting up a dist environment
58        cmd.compile = cmd.optimize = 1
59        cmd.install_dir = pkg_dir
60        f = os.path.join(pkg_dir, 'foo.py')
61        self.write_file(f, '# python file')
62        cmd.distribution.py_modules = [pkg_dir]
63        cmd.distribution.ext_modules = [Extension('foo', ['xxx'])]
64        cmd.distribution.packages = [pkg_dir]
65        cmd.distribution.script_name = 'setup.py'
66
67        # get_output should return 4 elements
68        self.assertGreaterEqual(len(cmd.get_outputs()), 2)
69
70    def test_get_inputs(self):
71        pkg_dir, dist = self.create_dist()
72        cmd = install_lib(dist)
73
74        # setting up a dist environment
75        cmd.compile = cmd.optimize = 1
76        cmd.install_dir = pkg_dir
77        f = os.path.join(pkg_dir, 'foo.py')
78        self.write_file(f, '# python file')
79        cmd.distribution.py_modules = [pkg_dir]
80        cmd.distribution.ext_modules = [Extension('foo', ['xxx'])]
81        cmd.distribution.packages = [pkg_dir]
82        cmd.distribution.script_name = 'setup.py'
83
84        # get_input should return 2 elements
85        self.assertEqual(len(cmd.get_inputs()), 2)
86
87    def test_dont_write_bytecode(self):
88        # makes sure byte_compile is not used
89        pkg_dir, dist = self.create_dist()
90        cmd = install_lib(dist)
91        cmd.compile = 1
92        cmd.optimize = 1
93
94        old_dont_write_bytecode = sys.dont_write_bytecode
95        sys.dont_write_bytecode = True
96        try:
97            cmd.byte_compile([])
98        finally:
99            sys.dont_write_bytecode = old_dont_write_bytecode
100
101        self.assertIn('byte-compiling is disabled', self.logs[0][1])
102
103def test_suite():
104    return unittest.makeSuite(InstallLibTestCase)
105
106if __name__ == "__main__":
107    run_unittest(test_suite())
108