]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.12] gh-102251: Disable non-rerunnable test in test_import (GH-106013) (#109540)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 18 Sep 2023 14:31:01 +0000 (07:31 -0700)
committerGitHub <noreply@github.com>
Mon, 18 Sep 2023 14:31:01 +0000 (14:31 +0000)
gh-102251: Disable non-rerunnable test in test_import (GH-106013)
(cherry picked from commit 4849a80dd1cbbc5010e8749ba60eb91a541ae4e7)

Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>
Lib/test/test_import/__init__.py

index f7df6d7e42319f45dc8cc6888cdb1fa905a9ac5b..62585b23a7398f3ee9e58d38e7b238f2cacfa32b 100644 (file)
@@ -106,6 +106,25 @@ def remove_files(name):
     rmtree('__pycache__')
 
 
+def no_rerun(reason):
+    """Skip rerunning for a particular test.
+
+    WARNING: Use this decorator with care; skipping rerunning makes it
+    impossible to find reference leaks. Provide a clear reason for skipping the
+    test using the 'reason' parameter.
+    """
+    def deco(func):
+        _has_run = False
+        def wrapper(self):
+            nonlocal _has_run
+            if _has_run:
+                self.skipTest(reason)
+            func(self)
+            _has_run = True
+        return wrapper
+    return deco
+
+
 @contextlib.contextmanager
 def _ready_to_import(name=None, source=""):
     # sets up a temporary directory and removes it
@@ -2018,10 +2037,6 @@ class SinglephaseInitTests(unittest.TestCase):
 
     @classmethod
     def setUpClass(cls):
-        if '-R' in sys.argv or '--huntrleaks' in sys.argv:
-            # https://github.com/python/cpython/issues/102251
-            raise unittest.SkipTest('unresolved refleaks (see gh-102251)')
-
         spec = importlib.util.find_spec(cls.NAME)
         from importlib.machinery import ExtensionFileLoader
         cls.FILE = spec.origin
@@ -2535,6 +2550,7 @@ class SinglephaseInitTests(unittest.TestCase):
         #  * m_copy was copied from interp2 (was from interp1)
         #  * module's global state was updated, not reset
 
+    @no_rerun(reason="rerun not possible; module state is never cleared (see gh-102251)")
     @requires_subinterpreters
     def test_basic_multiple_interpreters_deleted_no_reset(self):
         # without resetting; already loaded in a deleted interpreter