| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  | """Tests for packaging.command.install_data.""" | 
					
						
							|  |  |  | import os | 
					
						
							| 
									
										
										
										
											2011-10-08 04:09:15 +02:00
										 |  |  | import sys | 
					
						
							|  |  |  | import imp | 
					
						
							| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | from packaging.tests import unittest, support | 
					
						
							|  |  |  | from packaging.command.install_lib import install_lib | 
					
						
							|  |  |  | from packaging.compiler.extension import Extension | 
					
						
							|  |  |  | from packaging.errors import PackagingOptionError | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class InstallLibTestCase(support.TempdirManager, | 
					
						
							|  |  |  |                          support.LoggingCatcher, | 
					
						
							|  |  |  |                          support.EnvironRestorer, | 
					
						
							|  |  |  |                          unittest.TestCase): | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     restore_environ = ['PYTHONPATH'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_finalize_options(self): | 
					
						
							| 
									
										
										
										
											2011-11-03 05:08:28 +01:00
										 |  |  |         dist = self.create_dist()[1] | 
					
						
							| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  |         cmd = install_lib(dist) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         cmd.finalize_options() | 
					
						
							|  |  |  |         self.assertTrue(cmd.compile) | 
					
						
							|  |  |  |         self.assertEqual(cmd.optimize, 0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # optimize must be 0, 1, or 2 | 
					
						
							|  |  |  |         cmd.optimize = 'foo' | 
					
						
							|  |  |  |         self.assertRaises(PackagingOptionError, cmd.finalize_options) | 
					
						
							|  |  |  |         cmd.optimize = '4' | 
					
						
							|  |  |  |         self.assertRaises(PackagingOptionError, cmd.finalize_options) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         cmd.optimize = '2' | 
					
						
							|  |  |  |         cmd.finalize_options() | 
					
						
							|  |  |  |         self.assertEqual(cmd.optimize, 2) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_byte_compile(self): | 
					
						
							| 
									
										
										
										
											2011-11-03 05:08:28 +01:00
										 |  |  |         project_dir, dist = self.create_dist() | 
					
						
							|  |  |  |         os.chdir(project_dir) | 
					
						
							| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  |         cmd = install_lib(dist) | 
					
						
							|  |  |  |         cmd.compile = True | 
					
						
							|  |  |  |         cmd.optimize = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-03 05:08:28 +01:00
										 |  |  |         f = os.path.join(project_dir, 'foo.py') | 
					
						
							| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  |         self.write_file(f, '# python file') | 
					
						
							|  |  |  |         cmd.byte_compile([f]) | 
					
						
							| 
									
										
										
										
											2011-11-03 05:08:28 +01:00
										 |  |  |         pyc_file = imp.cache_from_source('foo.py', debug_override=True) | 
					
						
							| 
									
										
										
										
											2011-10-08 04:09:15 +02:00
										 |  |  |         pyo_file = imp.cache_from_source('foo.py', debug_override=False) | 
					
						
							|  |  |  |         self.assertTrue(os.path.exists(pyc_file)) | 
					
						
							|  |  |  |         self.assertTrue(os.path.exists(pyo_file)) | 
					
						
							| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-03 05:08:28 +01:00
										 |  |  |     def test_byte_compile_under_B(self): | 
					
						
							|  |  |  |         # make sure byte compilation works under -B (dont_write_bytecode) | 
					
						
							|  |  |  |         self.addCleanup(setattr, sys, 'dont_write_bytecode', | 
					
						
							|  |  |  |                         sys.dont_write_bytecode) | 
					
						
							|  |  |  |         sys.dont_write_bytecode = True | 
					
						
							|  |  |  |         self.test_byte_compile() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  |     def test_get_outputs(self): | 
					
						
							| 
									
										
										
										
											2011-11-03 05:08:28 +01:00
										 |  |  |         project_dir, dist = self.create_dist() | 
					
						
							|  |  |  |         os.chdir(project_dir) | 
					
						
							|  |  |  |         os.mkdir('spam') | 
					
						
							| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  |         cmd = install_lib(dist) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # setting up a dist environment | 
					
						
							|  |  |  |         cmd.compile = True | 
					
						
							|  |  |  |         cmd.optimize = 1 | 
					
						
							| 
									
										
										
										
											2011-11-03 05:08:28 +01:00
										 |  |  |         cmd.install_dir = self.mkdtemp() | 
					
						
							|  |  |  |         f = os.path.join(project_dir, 'spam', '__init__.py') | 
					
						
							| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  |         self.write_file(f, '# python package') | 
					
						
							|  |  |  |         cmd.distribution.ext_modules = [Extension('foo', ['xxx'])] | 
					
						
							| 
									
										
										
										
											2011-11-03 05:08:28 +01:00
										 |  |  |         cmd.distribution.packages = ['spam'] | 
					
						
							| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-03 05:08:28 +01:00
										 |  |  |         # make sure the build_lib is set the temp dir  # XXX what?  this is not | 
					
						
							|  |  |  |         # needed in the same distutils test and should work without manual | 
					
						
							|  |  |  |         # intervention | 
					
						
							|  |  |  |         build_dir = os.path.split(project_dir)[0] | 
					
						
							| 
									
										
										
										
											2011-05-23 17:35:20 +02:00
										 |  |  |         cmd.get_finalized_command('build_py').build_lib = build_dir | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-03 05:08:28 +01:00
										 |  |  |         # get_outputs should return 4 elements: spam/__init__.py, .pyc and | 
					
						
							|  |  |  |         # .pyo, foo.import-tag-abiflags.so / foo.pyd | 
					
						
							|  |  |  |         outputs = cmd.get_outputs() | 
					
						
							|  |  |  |         self.assertEqual(len(outputs), 4, outputs) | 
					
						
							| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_get_inputs(self): | 
					
						
							| 
									
										
										
										
											2011-11-03 05:08:28 +01:00
										 |  |  |         project_dir, dist = self.create_dist() | 
					
						
							|  |  |  |         os.chdir(project_dir) | 
					
						
							|  |  |  |         os.mkdir('spam') | 
					
						
							| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  |         cmd = install_lib(dist) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # setting up a dist environment | 
					
						
							|  |  |  |         cmd.compile = True | 
					
						
							|  |  |  |         cmd.optimize = 1 | 
					
						
							| 
									
										
										
										
											2011-11-03 05:08:28 +01:00
										 |  |  |         cmd.install_dir = self.mkdtemp() | 
					
						
							|  |  |  |         f = os.path.join(project_dir, 'spam', '__init__.py') | 
					
						
							| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  |         self.write_file(f, '# python package') | 
					
						
							|  |  |  |         cmd.distribution.ext_modules = [Extension('foo', ['xxx'])] | 
					
						
							| 
									
										
										
										
											2011-11-03 05:08:28 +01:00
										 |  |  |         cmd.distribution.packages = ['spam'] | 
					
						
							| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-11-03 05:08:28 +01:00
										 |  |  |         # get_inputs should return 2 elements: spam/__init__.py and | 
					
						
							|  |  |  |         # foo.import-tag-abiflags.so / foo.pyd | 
					
						
							|  |  |  |         inputs = cmd.get_inputs() | 
					
						
							|  |  |  |         self.assertEqual(len(inputs), 2, inputs) | 
					
						
							| 
									
										
										
										
											2011-05-19 13:07:25 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test_suite(): | 
					
						
							|  |  |  |     return unittest.makeSuite(InstallLibTestCase) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if __name__ == "__main__": | 
					
						
							|  |  |  |     unittest.main(defaultTest="test_suite") |