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