Aluode/PerceptionLabPortable
0
1"""Tests for distutils.command.install_data."""2 3import importlib.util4import os5import sys6from distutils.command.install_lib import install_lib7from distutils.errors import DistutilsOptionError8from distutils.extension import Extension9from distutils.tests import support10 11import pytest12 13 14@support.combine_markers15@pytest.mark.usefixtures('save_env')16class TestInstallLib(17 support.TempdirManager,18):19 def test_finalize_options(self):20 dist = self.create_dist()[1]21 cmd = install_lib(dist)22 23 cmd.finalize_options()24 assert cmd.compile == 125 assert cmd.optimize == 026 27 # optimize must be 0, 1, or 228 cmd.optimize = 'foo'29 with pytest.raises(DistutilsOptionError):30 cmd.finalize_options()31 cmd.optimize = '4'32 with pytest.raises(DistutilsOptionError):33 cmd.finalize_options()34 35 cmd.optimize = '2'36 cmd.finalize_options()37 assert cmd.optimize == 238 39 @pytest.mark.skipif('sys.dont_write_bytecode')40 def test_byte_compile(self):41 project_dir, dist = self.create_dist()42 os.chdir(project_dir)43 cmd = install_lib(dist)44 cmd.compile = cmd.optimize = 145 46 f = os.path.join(project_dir, 'foo.py')47 self.write_file(f, '# python file')48 cmd.byte_compile([f])49 pyc_file = importlib.util.cache_from_source('foo.py', optimization='')50 pyc_opt_file = importlib.util.cache_from_source(51 'foo.py', optimization=cmd.optimize52 )53 assert os.path.exists(pyc_file)54 assert os.path.exists(pyc_opt_file)55 56 def test_get_outputs(self):57 project_dir, dist = self.create_dist()58 os.chdir(project_dir)59 os.mkdir('spam')60 cmd = install_lib(dist)61 62 # setting up a dist environment63 cmd.compile = cmd.optimize = 164 cmd.install_dir = self.mkdtemp()65 f = os.path.join(project_dir, 'spam', '__init__.py')66 self.write_file(f, '# python package')67 cmd.distribution.ext_modules = [Extension('foo', ['xxx'])]68 cmd.distribution.packages = ['spam']69 cmd.distribution.script_name = 'setup.py'70 71 # get_outputs should return 4 elements: spam/__init__.py and .pyc,72 # foo.import-tag-abiflags.so / foo.pyd73 outputs = cmd.get_outputs()74 assert len(outputs) == 4, outputs75 76 def test_get_inputs(self):77 project_dir, dist = self.create_dist()78 os.chdir(project_dir)79 os.mkdir('spam')80 cmd = install_lib(dist)81 82 # setting up a dist environment83 cmd.compile = cmd.optimize = 184 cmd.install_dir = self.mkdtemp()85 f = os.path.join(project_dir, 'spam', '__init__.py')86 self.write_file(f, '# python package')87 cmd.distribution.ext_modules = [Extension('foo', ['xxx'])]88 cmd.distribution.packages = ['spam']89 cmd.distribution.script_name = 'setup.py'90 91 # get_inputs should return 2 elements: spam/__init__.py and92 # foo.import-tag-abiflags.so / foo.pyd93 inputs = cmd.get_inputs()94 assert len(inputs) == 2, inputs95 96 def test_dont_write_bytecode(self, caplog):97 # makes sure byte_compile is not used98 dist = self.create_dist()[1]99 cmd = install_lib(dist)100 cmd.compile = True101 cmd.optimize = 1102 103 old_dont_write_bytecode = sys.dont_write_bytecode104 sys.dont_write_bytecode = True105 try:106 cmd.byte_compile([])107 finally:108 sys.dont_write_bytecode = old_dont_write_bytecode109 110 assert 'byte-compiling is disabled' in caplog.messages[0]111 