From ca0cc9c433830e14714a5cc93fb4e7254da3dd76 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 16 May 2022 13:54:45 +0200 Subject: gh-92820: Skip test_cppext if _ctypes is missing (#92844) Add @test.support.requires_venv_with_pip decorator. --- Lib/test/support/__init__.py | 17 +++++++++++++++++ Lib/test/test_cppext.py | 2 ++ 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) -- cgit v0.12