summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2023-08-24 08:20:40 (GMT)
committerGitHub <noreply@github.com>2023-08-24 08:20:40 (GMT)
commit9903fe1c2af17e16ceac3b2a30dac37cc2fa7463 (patch)
tree75b860d64fb21be8c4c8c0b74da33d396bfc6c3c
parentb312d4fd7e40f891f7f1ab8664c9a8472a986856 (diff)
downloadcpython-9903fe1c2af17e16ceac3b2a30dac37cc2fa7463.zip
cpython-9903fe1c2af17e16ceac3b2a30dac37cc2fa7463.tar.gz
cpython-9903fe1c2af17e16ceac3b2a30dac37cc2fa7463.tar.bz2
[3.12] gh-108388: regrtest splits test_asyncio package (GH-108393) (#108397)
gh-108388: regrtest splits test_asyncio package (GH-108393) Currently, test_asyncio package is only splitted into sub-tests when using command "./python -m test". With this change, it's also splitted when passing it on the command line: "./python -m test test_asyncio". Remove the concept of "STDTESTS". Python is now mature enough to not have to bother with that anymore. Removing STDTESTS simplify the code. (cherry picked from commit 174e9da0836844a2138cc8915dd305cb2cd7a583) Co-authored-by: Victor Stinner <vstinner@python.org>
-rw-r--r--Lib/test/libregrtest/main.py25
-rw-r--r--Lib/test/libregrtest/runtest.py58
2 files changed, 39 insertions, 44 deletions
diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
index 9001ca3..3df95db 100644
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -11,8 +11,8 @@ import time
import unittest
from test.libregrtest.cmdline import _parse_args
from test.libregrtest.runtest import (
- findtests, runtest, get_abs_module, is_failed,
- STDTESTS, NOTTESTS, PROGRESS_MIN_TIME,
+ findtests, split_test_packages, runtest, get_abs_module, is_failed,
+ PROGRESS_MIN_TIME,
Passed, Failed, EnvChanged, Skipped, ResourceDenied, Interrupted,
ChildError, DidNotRun)
from test.libregrtest.setup import setup_tests
@@ -246,26 +246,23 @@ class Regrtest:
# add default PGO tests if no tests are specified
setup_pgo_tests(self.ns)
- stdtests = STDTESTS[:]
- nottests = NOTTESTS.copy()
+ exclude = set()
if self.ns.exclude:
for arg in self.ns.args:
- if arg in stdtests:
- stdtests.remove(arg)
- nottests.add(arg)
+ exclude.add(arg)
self.ns.args = []
- # if testdir is set, then we are not running the python tests suite, so
- # don't add default tests to be executed or skipped (pass empty values)
- if self.ns.testdir:
- alltests = findtests(self.ns.testdir, list(), set())
- else:
- alltests = findtests(self.ns.testdir, stdtests, nottests)
+ alltests = findtests(testdir=self.ns.testdir, exclude=exclude)
if not self.ns.fromfile:
- self.selected = self.tests or self.ns.args or alltests
+ self.selected = self.tests or self.ns.args
+ if self.selected:
+ self.selected = split_test_packages(self.selected)
+ else:
+ self.selected = alltests
else:
self.selected = self.tests
+
if self.ns.single:
self.selected = self.selected[:1]
try:
diff --git a/Lib/test/libregrtest/runtest.py b/Lib/test/libregrtest/runtest.py
index 6159527..e927079 100644
--- a/Lib/test/libregrtest/runtest.py
+++ b/Lib/test/libregrtest/runtest.py
@@ -125,24 +125,6 @@ class Timeout(Failed):
# the test is running in background
PROGRESS_MIN_TIME = 30.0 # seconds
-# small set of tests to determine if we have a basically functioning interpreter
-# (i.e. if any of these fail, then anything else is likely to follow)
-STDTESTS = [
- 'test_grammar',
- 'test_opcodes',
- 'test_dict',
- 'test_builtin',
- 'test_exceptions',
- 'test_types',
- 'test_unittest',
- 'test_doctest',
- 'test_doctest2',
- 'test_support'
-]
-
-# set of tests that we don't want to be executed when using regrtest
-NOTTESTS = set()
-
#If these test directories are encountered recurse into them and treat each
# test_ .py or dir as a separate test module. This can increase parallelism.
# Beware this can't generally be done for any directory with sub-tests as the
@@ -166,22 +148,38 @@ def findtestdir(path=None):
return path or os.path.dirname(os.path.dirname(__file__)) or os.curdir
-def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS, *, split_test_dirs=SPLITTESTDIRS, base_mod=""):
+def findtests(*, testdir=None, exclude=(),
+ split_test_dirs=SPLITTESTDIRS, base_mod=""):
"""Return a list of all applicable test modules."""
testdir = findtestdir(testdir)
- names = os.listdir(testdir)
tests = []
- others = set(stdtests) | nottests
- for name in names:
+ for name in os.listdir(testdir):
mod, ext = os.path.splitext(name)
- if mod[:5] == "test_" and mod not in others:
- if mod in split_test_dirs:
- subdir = os.path.join(testdir, mod)
- mod = f"{base_mod or 'test'}.{mod}"
- tests.extend(findtests(subdir, [], nottests, split_test_dirs=split_test_dirs, base_mod=mod))
- elif ext in (".py", ""):
- tests.append(f"{base_mod}.{mod}" if base_mod else mod)
- return stdtests + sorted(tests)
+ if (not mod.startswith("test_")) or (mod in exclude):
+ continue
+ if mod in split_test_dirs:
+ subdir = os.path.join(testdir, mod)
+ mod = f"{base_mod or 'test'}.{mod}"
+ tests.extend(findtests(testdir=subdir, exclude=exclude,
+ split_test_dirs=split_test_dirs, base_mod=mod))
+ elif ext in (".py", ""):
+ tests.append(f"{base_mod}.{mod}" if base_mod else mod)
+ return sorted(tests)
+
+
+def split_test_packages(tests, *, testdir=None, exclude=(),
+ split_test_dirs=SPLITTESTDIRS):
+ testdir = findtestdir(testdir)
+ splitted = []
+ for name in tests:
+ if name in split_test_dirs:
+ subdir = os.path.join(testdir, name)
+ splitted.extend(findtests(testdir=subdir, exclude=exclude,
+ split_test_dirs=split_test_dirs,
+ base_mod=name))
+ else:
+ splitted.append(name)
+ return splitted
def get_abs_module(ns: Namespace, test_name: str) -> str: