diff options
author | Victor Stinner <vstinner@python.org> | 2022-05-16 11:54:45 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-16 11:54:45 (GMT) |
commit | ca0cc9c433830e14714a5cc93fb4e7254da3dd76 (patch) | |
tree | fcb86034dc525577123df52c589e7a9d15a52cb8 | |
parent | a487623c6b784847a8a1e47b4597b0ae2b8def87 (diff) | |
download | cpython-ca0cc9c433830e14714a5cc93fb4e7254da3dd76.zip cpython-ca0cc9c433830e14714a5cc93fb4e7254da3dd76.tar.gz cpython-ca0cc9c433830e14714a5cc93fb4e7254da3dd76.tar.bz2 |
gh-92820: Skip test_cppext if _ctypes is missing (#92844)
Add @test.support.requires_venv_with_pip decorator.
-rw-r--r-- | Lib/test/support/__init__.py | 17 | ||||
-rw-r--r-- | Lib/test/test_cppext.py | 2 | ||||
-rw-r--r-- | Lib/test/test_venv.py | 7 |
3 files changed, 22 insertions, 4 deletions
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index 41502cf..bddfe11 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -2183,3 +2183,20 @@ def clear_ignored_deprecations(*tokens: object) -> None: if warnings.filters != new_filters: warnings.filters[:] = new_filters warnings._filters_mutated() + + +# Skip a test if venv with pip is known to not work. +def requires_venv_with_pip(): + # ensurepip requires zlib to open ZIP archives (.whl binary wheel packages) + try: + import zlib + except ImportError: + return unittest.skipIf(True, "venv: ensurepip requires zlib") + + # bpo-26610: pip/pep425tags.py requires ctypes. + # gh-92820: setuptools/windows_support.py uses ctypes (setuptools 58.1). + try: + import ctypes + except ImportError: + ctypes = None + return unittest.skipUnless(ctypes, 'venv: pip requires ctypes') diff --git a/Lib/test/test_cppext.py b/Lib/test/test_cppext.py index 8acf0f1..9ed9061 100644 --- a/Lib/test/test_cppext.py +++ b/Lib/test/test_cppext.py @@ -19,6 +19,8 @@ class TestCPPExt(unittest.TestCase): # With MSVC, the linker fails with: cannot open file 'python311.lib' # https://github.com/python/cpython/pull/32175#issuecomment-1111175897 @unittest.skipIf(MS_WINDOWS, 'test fails on Windows') + # the test uses venv+pip: skip if it's not available + @support.requires_venv_with_pip() def test_build(self): # Build in a temporary directory with os_helper.temp_cwd(): diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py index d96cf1e..4f89752 100644 --- a/Lib/test/test_venv.py +++ b/Lib/test/test_venv.py @@ -16,7 +16,8 @@ import sys import tempfile from test.support import (captured_stdout, captured_stderr, requires_zlib, skip_if_broken_multiprocessing_synchronize, verbose, - requires_subprocess, is_emscripten) + requires_subprocess, is_emscripten, + requires_venv_with_pip) from test.support.os_helper import (can_symlink, EnvironmentVarGuard, rmtree) import unittest import venv @@ -605,9 +606,7 @@ class EnsurePipTest(BaseTest): if not system_site_packages: self.assert_pip_not_installed() - # Issue #26610: pip/pep425tags.py requires ctypes - @unittest.skipUnless(ctypes, 'pip requires ctypes') - @requires_zlib() + @requires_venv_with_pip() def test_with_pip(self): self.do_test_with_pip(False) self.do_test_with_pip(True) |