aboutsummaryrefslogtreecommitdiffstats
path: root/distutils/tests
diff options
context:
space:
mode:
Diffstat (limited to 'distutils/tests')
-rw-r--r--distutils/tests/py35compat.py77
-rw-r--r--distutils/tests/test_build_clib.py4
-rw-r--r--distutils/tests/test_build_ext.py4
-rw-r--r--distutils/tests/test_config_cmd.py4
-rw-r--r--distutils/tests/test_dist.py4
-rw-r--r--distutils/tests/test_filelist.py5
-rw-r--r--distutils/tests/test_install.py3
-rw-r--r--distutils/tests/test_spawn.py4
-rw-r--r--distutils/tests/test_sysconfig.py1
-rw-r--r--distutils/tests/test_unixccompiler.py14
10 files changed, 113 insertions, 7 deletions
diff --git a/distutils/tests/py35compat.py b/distutils/tests/py35compat.py
new file mode 100644
index 00000000..0c755261
--- /dev/null
+++ b/distutils/tests/py35compat.py
@@ -0,0 +1,77 @@
+"""
+Backward compatibility support for Python 3.5
+"""
+
+import sys
+import test.support
+import subprocess
+
+
+# copied from Python 3.9 test.support module
+def _missing_compiler_executable(cmd_names=[]):
+ """Check if the compiler components used to build the interpreter exist.
+
+ Check for the existence of the compiler executables whose names are listed
+ in 'cmd_names' or all the compiler executables when 'cmd_names' is empty
+ and return the first missing executable or None when none is found
+ missing.
+
+ """
+ from distutils import ccompiler, sysconfig, spawn
+ compiler = ccompiler.new_compiler()
+ sysconfig.customize_compiler(compiler)
+ for name in compiler.executables:
+ if cmd_names and name not in cmd_names:
+ continue
+ cmd = getattr(compiler, name)
+ if cmd_names:
+ assert cmd is not None, \
+ "the '%s' executable is not configured" % name
+ elif not cmd:
+ continue
+ if spawn.find_executable(cmd[0]) is None:
+ return cmd[0]
+
+
+missing_compiler_executable = vars(test.support).setdefault(
+ 'missing_compiler_executable',
+ _missing_compiler_executable,
+)
+
+
+try:
+ from test.support import unix_shell
+except ImportError:
+ # Adapted from Python 3.9 test.support module
+ is_android = hasattr(sys, 'getandroidapilevel')
+ unix_shell = (
+ None if sys.platform == 'win32' else
+ '/system/bin/sh' if is_android else
+ '/bin/sh'
+ )
+
+
+# copied from Python 3.9 subprocess module
+def _optim_args_from_interpreter_flags():
+ """Return a list of command-line arguments reproducing the current
+ optimization settings in sys.flags."""
+ args = []
+ value = sys.flags.optimize
+ if value > 0:
+ args.append('-' + 'O' * value)
+ return args
+
+
+vars(subprocess).setdefault(
+ '_optim_args_from_interpreter_flags',
+ _optim_args_from_interpreter_flags,
+)
+
+
+def adapt_glob(regex):
+ """
+ Supply legacy expectation on Python 3.5
+ """
+ if sys.version_info > (3, 6):
+ return regex
+ return regex.replace('(?s:', '').replace(r')\Z', r'\Z(?ms)')
diff --git a/distutils/tests/test_build_clib.py b/distutils/tests/test_build_clib.py
index abd83137..259c4352 100644
--- a/distutils/tests/test_build_clib.py
+++ b/distutils/tests/test_build_clib.py
@@ -3,7 +3,9 @@ import unittest
import os
import sys
-from test.support import run_unittest, missing_compiler_executable
+from test.support import run_unittest
+
+from .py35compat import missing_compiler_executable
from distutils.command.build_clib import build_clib
from distutils.errors import DistutilsSetupError
diff --git a/distutils/tests/test_build_ext.py b/distutils/tests/test_build_ext.py
index 5e47e077..1aec1537 100644
--- a/distutils/tests/test_build_ext.py
+++ b/distutils/tests/test_build_ext.py
@@ -82,7 +82,7 @@ class BuildExtTestCase(TempdirManager,
else:
ALREADY_TESTED = type(self).__name__
- code = textwrap.dedent(f"""
+ code = textwrap.dedent("""
tmp_dir = {self.tmp_dir!r}
import sys
@@ -108,7 +108,7 @@ class BuildExtTestCase(TempdirManager,
unittest.main()
- """)
+ """.format(**locals()))
assert_python_ok('-c', code)
def test_solaris_enable_shared(self):
diff --git a/distutils/tests/test_config_cmd.py b/distutils/tests/test_config_cmd.py
index 9aeab07b..4cd9a6b9 100644
--- a/distutils/tests/test_config_cmd.py
+++ b/distutils/tests/test_config_cmd.py
@@ -2,7 +2,9 @@
import unittest
import os
import sys
-from test.support import run_unittest, missing_compiler_executable
+from test.support import run_unittest
+
+from .py35compat import missing_compiler_executable
from distutils.command.config import dump_file, config
from distutils.tests import support
diff --git a/distutils/tests/test_dist.py b/distutils/tests/test_dist.py
index 60956dad..d431085b 100644
--- a/distutils/tests/test_dist.py
+++ b/distutils/tests/test_dist.py
@@ -83,6 +83,10 @@ class DistributionTestCase(support.LoggingSilencer,
self.assertIsInstance(cmd, test_dist)
self.assertEqual(cmd.sample_option, "sometext")
+ @unittest.skipIf(
+ 'distutils' not in Distribution.parse_config_files.__module__,
+ 'Cannot test when virtualenv has monkey-patched Distribution.',
+ )
def test_venv_install_options(self):
sys.argv.append("install")
self.addCleanup(os.unlink, TESTFN)
diff --git a/distutils/tests/test_filelist.py b/distutils/tests/test_filelist.py
index c71342d0..71fde2b7 100644
--- a/distutils/tests/test_filelist.py
+++ b/distutils/tests/test_filelist.py
@@ -12,6 +12,9 @@ import test.support
from test.support import captured_stdout, run_unittest
from distutils.tests import support
+from .py35compat import adapt_glob
+
+
MANIFEST_IN = """\
include ok
include xo
@@ -60,7 +63,7 @@ class FileListTestCase(support.LoggingSilencer,
('foo????', r'(?s:foo[^%(sep)s][^%(sep)s][^%(sep)s][^%(sep)s])\Z'),
(r'foo\\??', r'(?s:foo\\\\[^%(sep)s][^%(sep)s])\Z')):
regex = regex % {'sep': sep}
- self.assertEqual(glob_to_re(glob), regex)
+ self.assertEqual(glob_to_re(glob), adapt_glob(regex))
def test_process_template_line(self):
# testing all MANIFEST.in template patterns
diff --git a/distutils/tests/test_install.py b/distutils/tests/test_install.py
index 51c80e04..eb684a09 100644
--- a/distutils/tests/test_install.py
+++ b/distutils/tests/test_install.py
@@ -58,7 +58,8 @@ class InstallTestCase(support.TempdirManager,
libdir = os.path.join(destination, "lib", "python")
check_path(cmd.install_lib, libdir)
- platlibdir = os.path.join(destination, sys.platlibdir, "python")
+ _platlibdir = getattr(sys, "platlibdir", "lib")
+ platlibdir = os.path.join(destination, _platlibdir, "python")
check_path(cmd.install_platlib, platlibdir)
check_path(cmd.install_purelib, libdir)
check_path(cmd.install_headers,
diff --git a/distutils/tests/test_spawn.py b/distutils/tests/test_spawn.py
index cf1faad5..919d0ad9 100644
--- a/distutils/tests/test_spawn.py
+++ b/distutils/tests/test_spawn.py
@@ -3,9 +3,11 @@ import os
import stat
import sys
import unittest.mock
-from test.support import run_unittest, unix_shell
+from test.support import run_unittest
from test import support as test_support
+from .py35compat import unix_shell
+
from distutils.spawn import find_executable
from distutils.spawn import spawn
from distutils.errors import DistutilsExecError
diff --git a/distutils/tests/test_sysconfig.py b/distutils/tests/test_sysconfig.py
index 236755d0..d5076391 100644
--- a/distutils/tests/test_sysconfig.py
+++ b/distutils/tests/test_sysconfig.py
@@ -45,6 +45,7 @@ class SysconfigTestCase(support.EnvironGuard, unittest.TestCase):
self.assertIsInstance(cvars, dict)
self.assertTrue(cvars)
+ @unittest.skip('sysconfig.IS_PYPY')
def test_srcdir(self):
# See Issues #15322, #15364.
srcdir = sysconfig.get_config_var('srcdir')
diff --git a/distutils/tests/test_unixccompiler.py b/distutils/tests/test_unixccompiler.py
index eef702cf..f2159662 100644
--- a/distutils/tests/test_unixccompiler.py
+++ b/distutils/tests/test_unixccompiler.py
@@ -11,6 +11,7 @@ class UnixCCompilerTestCase(unittest.TestCase):
def setUp(self):
self._backup_platform = sys.platform
self._backup_get_config_var = sysconfig.get_config_var
+ self._backup_get_config_vars = sysconfig.get_config_vars
class CompilerWrapper(UnixCCompiler):
def rpath_foo(self):
return self.runtime_library_dir_option('/foo')
@@ -19,6 +20,7 @@ class UnixCCompilerTestCase(unittest.TestCase):
def tearDown(self):
sys.platform = self._backup_platform
sysconfig.get_config_var = self._backup_get_config_var
+ sysconfig.get_config_vars = self._backup_get_config_vars
@unittest.skipIf(sys.platform == 'win32', "can't test on Windows")
def test_runtime_libdir_option(self):
@@ -110,7 +112,13 @@ class UnixCCompilerTestCase(unittest.TestCase):
if v == 'LDSHARED':
return 'gcc-4.2 -bundle -undefined dynamic_lookup '
return 'gcc-4.2'
+
+ def gcvs(*args, _orig=sysconfig.get_config_vars):
+ if args:
+ return list(map(sysconfig.get_config_var, args))
+ return _orig()
sysconfig.get_config_var = gcv
+ sysconfig.get_config_vars = gcvs
with EnvironmentVarGuard() as env:
env['CC'] = 'my_cc'
del env['LDSHARED']
@@ -126,7 +134,13 @@ class UnixCCompilerTestCase(unittest.TestCase):
if v == 'LDSHARED':
return 'gcc-4.2 -bundle -undefined dynamic_lookup '
return 'gcc-4.2'
+
+ def gcvs(*args, _orig=sysconfig.get_config_vars):
+ if args:
+ return list(map(sysconfig.get_config_var, args))
+ return _orig()
sysconfig.get_config_var = gcv
+ sysconfig.get_config_vars = gcvs
with EnvironmentVarGuard() as env:
env['CC'] = 'my_cc'
env['LDSHARED'] = 'my_ld -bundle -dynamic'