From 2da0dc094fa855ed4df251aab58b6f8a2b6969a1 Mon Sep 17 00:00:00 2001 From: Nikita Sobolev Date: Tue, 28 May 2024 18:50:50 +0300 Subject: [PATCH] gh-119659: Move `@no_rerun` to `test.support` (#119660) --- Lib/test/datetimetester.py | 22 +--------------------- Lib/test/support/__init__.py | 19 +++++++++++++++++++ Lib/test/test_import/__init__.py | 21 +-------------------- 3 files changed, 21 insertions(+), 41 deletions(-) diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py index ba7f185a092..535b17d0727 100644 --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -22,7 +22,7 @@ from operator import lt, le, gt, ge, eq, ne, truediv, floordiv, mod from test import support from test.support import is_resource_enabled, ALWAYS_EQ, LARGEST, SMALLEST -from test.support import warnings_helper +from test.support import warnings_helper, no_rerun import datetime as datetime_module from datetime import MINYEAR, MAXYEAR @@ -47,26 +47,6 @@ except ImportError: pass # -# This is copied from test_import/__init__.py. -# XXX Move it to support/__init__.py. -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 - pickle_loads = {pickle.loads, pickle._loads} pickle_choices = [(pickle, pickle, proto) diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index e2a854663dd..5825efadffc 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -1189,6 +1189,25 @@ def no_tracing(func): return coverage_wrapper +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 + + def refcount_test(test): """Decorator for tests which involve reference counting. diff --git a/Lib/test/test_import/__init__.py b/Lib/test/test_import/__init__.py index b09065f812c..97e262cfdb9 100644 --- a/Lib/test/test_import/__init__.py +++ b/Lib/test/test_import/__init__.py @@ -31,7 +31,7 @@ from test.support import os_helper from test.support import ( STDLIB_DIR, swap_attr, swap_item, cpython_only, is_apple_mobile, is_emscripten, is_wasi, run_in_subinterp, run_in_subinterp_with_config, Py_TRACE_REFS, - requires_gil_enabled, Py_GIL_DISABLED) + requires_gil_enabled, Py_GIL_DISABLED, no_rerun) from test.support.import_helper import ( forget, make_legacy_pyc, unlink, unload, ready_to_import, DirsOnSysPath, CleanImport, import_module) @@ -120,25 +120,6 @@ 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 - - if _testsinglephase is not None: def restore__testsinglephase(*, _orig=_testsinglephase): # We started with the module imported and want to restore