17db96d56Sopenharmony_ci"""Tests for distutils.command.install_data.""" 27db96d56Sopenharmony_ciimport sys 37db96d56Sopenharmony_ciimport os 47db96d56Sopenharmony_ciimport importlib.util 57db96d56Sopenharmony_ciimport unittest 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_cifrom distutils.command.install_lib import install_lib 87db96d56Sopenharmony_cifrom distutils.extension import Extension 97db96d56Sopenharmony_cifrom distutils.tests import support 107db96d56Sopenharmony_cifrom distutils.errors import DistutilsOptionError 117db96d56Sopenharmony_cifrom test.support import run_unittest, requires_subprocess 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciclass InstallLibTestCase(support.TempdirManager, 157db96d56Sopenharmony_ci support.LoggingSilencer, 167db96d56Sopenharmony_ci support.EnvironGuard, 177db96d56Sopenharmony_ci unittest.TestCase): 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ci def test_finalize_options(self): 207db96d56Sopenharmony_ci dist = self.create_dist()[1] 217db96d56Sopenharmony_ci cmd = install_lib(dist) 227db96d56Sopenharmony_ci 237db96d56Sopenharmony_ci cmd.finalize_options() 247db96d56Sopenharmony_ci self.assertEqual(cmd.compile, 1) 257db96d56Sopenharmony_ci self.assertEqual(cmd.optimize, 0) 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ci # optimize must be 0, 1, or 2 287db96d56Sopenharmony_ci cmd.optimize = 'foo' 297db96d56Sopenharmony_ci self.assertRaises(DistutilsOptionError, cmd.finalize_options) 307db96d56Sopenharmony_ci cmd.optimize = '4' 317db96d56Sopenharmony_ci self.assertRaises(DistutilsOptionError, cmd.finalize_options) 327db96d56Sopenharmony_ci 337db96d56Sopenharmony_ci cmd.optimize = '2' 347db96d56Sopenharmony_ci cmd.finalize_options() 357db96d56Sopenharmony_ci self.assertEqual(cmd.optimize, 2) 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_ci @unittest.skipIf(sys.dont_write_bytecode, 'byte-compile disabled') 387db96d56Sopenharmony_ci @requires_subprocess() 397db96d56Sopenharmony_ci def test_byte_compile(self): 407db96d56Sopenharmony_ci project_dir, dist = self.create_dist() 417db96d56Sopenharmony_ci os.chdir(project_dir) 427db96d56Sopenharmony_ci cmd = install_lib(dist) 437db96d56Sopenharmony_ci cmd.compile = cmd.optimize = 1 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ci f = os.path.join(project_dir, 'foo.py') 467db96d56Sopenharmony_ci self.write_file(f, '# python file') 477db96d56Sopenharmony_ci cmd.byte_compile([f]) 487db96d56Sopenharmony_ci pyc_file = importlib.util.cache_from_source('foo.py', optimization='') 497db96d56Sopenharmony_ci pyc_opt_file = importlib.util.cache_from_source('foo.py', 507db96d56Sopenharmony_ci optimization=cmd.optimize) 517db96d56Sopenharmony_ci self.assertTrue(os.path.exists(pyc_file)) 527db96d56Sopenharmony_ci self.assertTrue(os.path.exists(pyc_opt_file)) 537db96d56Sopenharmony_ci 547db96d56Sopenharmony_ci def test_get_outputs(self): 557db96d56Sopenharmony_ci project_dir, dist = self.create_dist() 567db96d56Sopenharmony_ci os.chdir(project_dir) 577db96d56Sopenharmony_ci os.mkdir('spam') 587db96d56Sopenharmony_ci cmd = install_lib(dist) 597db96d56Sopenharmony_ci 607db96d56Sopenharmony_ci # setting up a dist environment 617db96d56Sopenharmony_ci cmd.compile = cmd.optimize = 1 627db96d56Sopenharmony_ci cmd.install_dir = self.mkdtemp() 637db96d56Sopenharmony_ci f = os.path.join(project_dir, 'spam', '__init__.py') 647db96d56Sopenharmony_ci self.write_file(f, '# python package') 657db96d56Sopenharmony_ci cmd.distribution.ext_modules = [Extension('foo', ['xxx'])] 667db96d56Sopenharmony_ci cmd.distribution.packages = ['spam'] 677db96d56Sopenharmony_ci cmd.distribution.script_name = 'setup.py' 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci # get_outputs should return 4 elements: spam/__init__.py and .pyc, 707db96d56Sopenharmony_ci # foo.import-tag-abiflags.so / foo.pyd 717db96d56Sopenharmony_ci outputs = cmd.get_outputs() 727db96d56Sopenharmony_ci self.assertEqual(len(outputs), 4, outputs) 737db96d56Sopenharmony_ci 747db96d56Sopenharmony_ci def test_get_inputs(self): 757db96d56Sopenharmony_ci project_dir, dist = self.create_dist() 767db96d56Sopenharmony_ci os.chdir(project_dir) 777db96d56Sopenharmony_ci os.mkdir('spam') 787db96d56Sopenharmony_ci cmd = install_lib(dist) 797db96d56Sopenharmony_ci 807db96d56Sopenharmony_ci # setting up a dist environment 817db96d56Sopenharmony_ci cmd.compile = cmd.optimize = 1 827db96d56Sopenharmony_ci cmd.install_dir = self.mkdtemp() 837db96d56Sopenharmony_ci f = os.path.join(project_dir, 'spam', '__init__.py') 847db96d56Sopenharmony_ci self.write_file(f, '# python package') 857db96d56Sopenharmony_ci cmd.distribution.ext_modules = [Extension('foo', ['xxx'])] 867db96d56Sopenharmony_ci cmd.distribution.packages = ['spam'] 877db96d56Sopenharmony_ci cmd.distribution.script_name = 'setup.py' 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci # get_inputs should return 2 elements: spam/__init__.py and 907db96d56Sopenharmony_ci # foo.import-tag-abiflags.so / foo.pyd 917db96d56Sopenharmony_ci inputs = cmd.get_inputs() 927db96d56Sopenharmony_ci self.assertEqual(len(inputs), 2, inputs) 937db96d56Sopenharmony_ci 947db96d56Sopenharmony_ci @requires_subprocess() 957db96d56Sopenharmony_ci def test_dont_write_bytecode(self): 967db96d56Sopenharmony_ci # makes sure byte_compile is not used 977db96d56Sopenharmony_ci dist = self.create_dist()[1] 987db96d56Sopenharmony_ci cmd = install_lib(dist) 997db96d56Sopenharmony_ci cmd.compile = 1 1007db96d56Sopenharmony_ci cmd.optimize = 1 1017db96d56Sopenharmony_ci 1027db96d56Sopenharmony_ci old_dont_write_bytecode = sys.dont_write_bytecode 1037db96d56Sopenharmony_ci sys.dont_write_bytecode = True 1047db96d56Sopenharmony_ci try: 1057db96d56Sopenharmony_ci cmd.byte_compile([]) 1067db96d56Sopenharmony_ci finally: 1077db96d56Sopenharmony_ci sys.dont_write_bytecode = old_dont_write_bytecode 1087db96d56Sopenharmony_ci 1097db96d56Sopenharmony_ci self.assertIn('byte-compiling is disabled', 1107db96d56Sopenharmony_ci self.logs[0][1] % self.logs[0][2]) 1117db96d56Sopenharmony_ci 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_cidef test_suite(): 1147db96d56Sopenharmony_ci return unittest.TestLoader().loadTestsFromTestCase(InstallLibTestCase) 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ciif __name__ == "__main__": 1177db96d56Sopenharmony_ci run_unittest(test_suite()) 118