blob: b42b03b2fad9391036f70784891ab6796637f500 [file] [log] [blame]
Tarek Ziadéc27aca72009-05-10 11:45:41 +00001"""Tests for distutils.command.install_data."""
R. David Murray378c0cf2010-02-24 01:46:21 +00002import sys
Tarek Ziadé36797272010-07-22 12:50:05 +00003import os
Éric Araujo47a45212011-10-08 00:34:13 +02004import imp
Tarek Ziadéc27aca72009-05-10 11:45:41 +00005import unittest
6
7from distutils.command.install_lib import install_lib
8from distutils.extension import Extension
9from distutils.tests import support
10from distutils.errors import DistutilsOptionError
Éric Araujo70ec44a2010-11-06 02:44:43 +000011from test.support import run_unittest
Tarek Ziadéc27aca72009-05-10 11:45:41 +000012
13class InstallLibTestCase(support.TempdirManager,
14 support.LoggingSilencer,
Tarek Ziadé430fb632009-10-18 11:34:51 +000015 support.EnvironGuard,
Tarek Ziadéc27aca72009-05-10 11:45:41 +000016 unittest.TestCase):
17
Tarek Ziadéc27aca72009-05-10 11:45:41 +000018 def test_finalize_options(self):
19 pkg_dir, dist = self.create_dist()
20 cmd = install_lib(dist)
21
22 cmd.finalize_options()
Ezio Melottib3aedd42010-11-20 19:04:17 +000023 self.assertEqual(cmd.compile, 1)
24 self.assertEqual(cmd.optimize, 0)
Tarek Ziadéc27aca72009-05-10 11:45:41 +000025
26 # optimize must be 0, 1, or 2
27 cmd.optimize = 'foo'
28 self.assertRaises(DistutilsOptionError, cmd.finalize_options)
29 cmd.optimize = '4'
30 self.assertRaises(DistutilsOptionError, cmd.finalize_options)
31
32 cmd.optimize = '2'
33 cmd.finalize_options()
Ezio Melottib3aedd42010-11-20 19:04:17 +000034 self.assertEqual(cmd.optimize, 2)
Tarek Ziadéc27aca72009-05-10 11:45:41 +000035
Éric Araujo47a45212011-10-08 00:34:13 +020036 @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled')
Tarek Ziadé36797272010-07-22 12:50:05 +000037 def test_byte_compile(self):
Tarek Ziadéc27aca72009-05-10 11:45:41 +000038 pkg_dir, dist = self.create_dist()
Éric Araujo47a45212011-10-08 00:34:13 +020039 os.chdir(pkg_dir)
Tarek Ziadéc27aca72009-05-10 11:45:41 +000040 cmd = install_lib(dist)
41 cmd.compile = cmd.optimize = 1
42
43 f = os.path.join(pkg_dir, 'foo.py')
44 self.write_file(f, '# python file')
45 cmd.byte_compile([f])
Éric Araujo47a45212011-10-08 00:34:13 +020046 pyc_file = imp.cache_from_source('foo.py')
47 pyo_file = imp.cache_from_source('foo.py', debug_override=False)
48 self.assertTrue(os.path.exists(pyc_file))
49 self.assertTrue(os.path.exists(pyo_file))
Tarek Ziadéc27aca72009-05-10 11:45:41 +000050
51 def test_get_outputs(self):
52 pkg_dir, dist = self.create_dist()
53 cmd = install_lib(dist)
54
55 # setting up a dist environment
56 cmd.compile = cmd.optimize = 1
57 cmd.install_dir = pkg_dir
58 f = os.path.join(pkg_dir, 'foo.py')
59 self.write_file(f, '# python file')
60 cmd.distribution.py_modules = [pkg_dir]
61 cmd.distribution.ext_modules = [Extension('foo', ['xxx'])]
62 cmd.distribution.packages = [pkg_dir]
63 cmd.distribution.script_name = 'setup.py'
64
65 # get_output should return 4 elements
Benjamin Petersonc9c0f202009-06-30 23:06:06 +000066 self.assertTrue(len(cmd.get_outputs()) >= 2)
Tarek Ziadéc27aca72009-05-10 11:45:41 +000067
68 def test_get_inputs(self):
69 pkg_dir, dist = self.create_dist()
70 cmd = install_lib(dist)
71
72 # setting up a dist environment
73 cmd.compile = cmd.optimize = 1
74 cmd.install_dir = pkg_dir
75 f = os.path.join(pkg_dir, 'foo.py')
76 self.write_file(f, '# python file')
77 cmd.distribution.py_modules = [pkg_dir]
78 cmd.distribution.ext_modules = [Extension('foo', ['xxx'])]
79 cmd.distribution.packages = [pkg_dir]
80 cmd.distribution.script_name = 'setup.py'
81
82 # get_input should return 2 elements
Ezio Melottib3aedd42010-11-20 19:04:17 +000083 self.assertEqual(len(cmd.get_inputs()), 2)
Tarek Ziadéc27aca72009-05-10 11:45:41 +000084
Tarek Ziadé04fe7c02009-10-25 23:08:47 +000085 def test_dont_write_bytecode(self):
86 # makes sure byte_compile is not used
87 pkg_dir, dist = self.create_dist()
88 cmd = install_lib(dist)
89 cmd.compile = 1
90 cmd.optimize = 1
91
92 old_dont_write_bytecode = sys.dont_write_bytecode
93 sys.dont_write_bytecode = True
94 try:
95 cmd.byte_compile([])
96 finally:
97 sys.dont_write_bytecode = old_dont_write_bytecode
98
99 self.assertTrue('byte-compiling is disabled' in self.logs[0][1])
Tarek Ziadéc27aca72009-05-10 11:45:41 +0000100
101def test_suite():
102 return unittest.makeSuite(InstallLibTestCase)
103
104if __name__ == "__main__":
Éric Araujo70ec44a2010-11-06 02:44:43 +0000105 run_unittest(test_suite())