Skip to content

Commit 34ee8c7

Browse files
committed
gh-108388: regrtest splits test_asyncio package
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".
1 parent 7a6cc3e commit 34ee8c7

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

Lib/test/libregrtest/main.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import unittest
1212
from test.libregrtest.cmdline import _parse_args
1313
from test.libregrtest.runtest import (
14-
findtests, runtest, get_abs_module, is_failed,
14+
findtests, split_test_packages, runtest, get_abs_module, is_failed,
1515
STDTESTS, NOTTESTS, PROGRESS_MIN_TIME,
1616
Passed, Failed, EnvChanged, Skipped, ResourceDenied, Interrupted,
1717
ChildError, DidNotRun)
@@ -258,12 +258,16 @@ def find_tests(self, tests):
258258
# if testdir is set, then we are not running the python tests suite, so
259259
# don't add default tests to be executed or skipped (pass empty values)
260260
if self.ns.testdir:
261-
alltests = findtests(self.ns.testdir, list(), set())
261+
alltests = findtests(self.ns.testdir, stdtests=list(), nottests=set())
262262
else:
263-
alltests = findtests(self.ns.testdir, stdtests, nottests)
263+
alltests = findtests(self.ns.testdir, stdtests=stdtests, nottests=nottests)
264264

265265
if not self.ns.fromfile:
266-
self.selected = self.tests or self.ns.args or alltests
266+
self.selected = self.tests or self.ns.args
267+
if self.selected:
268+
self.selected = split_test_packages(self.selected)
269+
else:
270+
self.selected = alltests
267271
else:
268272
self.selected = self.tests
269273
if self.ns.single:

Lib/test/libregrtest/runtest.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,9 @@ def findtestdir(path=None):
166166
return path or os.path.dirname(os.path.dirname(__file__)) or os.curdir
167167

168168

169-
def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS, *, split_test_dirs=SPLITTESTDIRS, base_mod=""):
169+
def findtests(testdir=None, *,
170+
stdtests=STDTESTS, nottests=NOTTESTS,
171+
split_test_dirs=SPLITTESTDIRS, base_mod=""):
170172
"""Return a list of all applicable test modules."""
171173
testdir = findtestdir(testdir)
172174
names = os.listdir(testdir)
@@ -178,12 +180,26 @@ def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS, *, split_test_
178180
if mod in split_test_dirs:
179181
subdir = os.path.join(testdir, mod)
180182
mod = f"{base_mod or 'test'}.{mod}"
181-
tests.extend(findtests(subdir, [], nottests, split_test_dirs=split_test_dirs, base_mod=mod))
183+
tests.extend(findtests(subdir, stdtests=[], nottests=nottests,
184+
split_test_dirs=split_test_dirs, base_mod=mod))
182185
elif ext in (".py", ""):
183186
tests.append(f"{base_mod}.{mod}" if base_mod else mod)
184187
return stdtests + sorted(tests)
185188

186189

190+
def split_test_packages(tests, *, testdir=None, nottests=NOTTESTS, split_test_dirs=SPLITTESTDIRS):
191+
testdir = findtestdir(testdir)
192+
splitted = []
193+
for name in tests:
194+
if name in split_test_dirs:
195+
subdir = os.path.join(testdir, name)
196+
splitted.extend(findtests(subdir, stdtests=[], nottests=nottests,
197+
split_test_dirs=split_test_dirs, base_mod=name))
198+
else:
199+
splitted.append(name)
200+
return splitted
201+
202+
187203
def get_abs_module(ns: Namespace, test_name: str) -> str:
188204
if test_name.startswith('test.') or ns.testdir:
189205
return test_name

0 commit comments

Comments
 (0)