mirror of
https://github.com/python/cpython.git
synced 2025-07-24 19:54:21 +00:00
Issue #12626: In regrtest, allow to filter tests using a glob filter
with the `-m` (or `--match`) option. This works with all test cases using the unittest module. This is useful with long test suites such as test_io or test_subprocess.
This commit is contained in:
commit
f83e4acbae
3 changed files with 40 additions and 6 deletions
|
@ -21,6 +21,7 @@ import subprocess
|
|||
import imp
|
||||
import time
|
||||
import sysconfig
|
||||
import fnmatch
|
||||
import logging.handlers
|
||||
|
||||
try:
|
||||
|
@ -180,6 +181,7 @@ max_memuse = 0 # Disable bigmem tests (they will still be run with
|
|||
# small sizes, to make sure they work.)
|
||||
real_max_memuse = 0
|
||||
failfast = False
|
||||
match_tests = None
|
||||
|
||||
# _original_stdout is meant to hold stdout at the time regrtest began.
|
||||
# This may be "the real" stdout, or IDLE's emulation of stdout, or whatever.
|
||||
|
@ -1268,6 +1270,18 @@ def refcount_test(test):
|
|||
return no_tracing(cpython_only(test))
|
||||
|
||||
|
||||
def _filter_suite(suite, pred):
|
||||
"""Recursively filter test cases in a suite based on a predicate."""
|
||||
newtests = []
|
||||
for test in suite._tests:
|
||||
if isinstance(test, unittest.TestSuite):
|
||||
_filter_suite(test, pred)
|
||||
newtests.append(test)
|
||||
else:
|
||||
if pred(test):
|
||||
newtests.append(test)
|
||||
suite._tests = newtests
|
||||
|
||||
def _run_suite(suite):
|
||||
"""Run tests from a unittest.TestSuite-derived class."""
|
||||
if verbose:
|
||||
|
@ -1302,6 +1316,14 @@ def run_unittest(*classes):
|
|||
suite.addTest(cls)
|
||||
else:
|
||||
suite.addTest(unittest.makeSuite(cls))
|
||||
def case_pred(test):
|
||||
if match_tests is None:
|
||||
return True
|
||||
for name in test.id().split("."):
|
||||
if fnmatch.fnmatchcase(name, match_tests):
|
||||
return True
|
||||
return False
|
||||
_filter_suite(suite, case_pred)
|
||||
_run_suite(suite)
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue