summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-06-26 12:18:51 (GMT)
committerGitHub <noreply@github.com>2017-06-26 12:18:51 (GMT)
commitace56d583664f855d89d1219ece7c21c2fddcf30 (patch)
tree5f1748bb793b80f8d926df75cbe2e60acbd13974 /Lib
parent8c78aa70c888a370af18896a72cabd00e4120f09 (diff)
downloadcpython-ace56d583664f855d89d1219ece7c21c2fddcf30.zip
cpython-ace56d583664f855d89d1219ece7c21c2fddcf30.tar.gz
cpython-ace56d583664f855d89d1219ece7c21c2fddcf30.tar.bz2
bpo-30523: regrtest --list-cases --match (#2401)
* regrtest --list-cases now supports --match and --match-file options. Example: ./python -m test --list-cases -m FileTests test_os * --list-cases now also sets support.verbose to False to prevent messages to stdout when loading test modules. * Add support._match_test() private function.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/libregrtest/main.py6
-rw-r--r--Lib/test/support/__init__.py32
-rw-r--r--Lib/test/test_regrtest.py9
3 files changed, 32 insertions, 15 deletions
diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
index 527de17..1a77655 100644
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -256,9 +256,13 @@ class Regrtest:
if isinstance(test, unittest.TestSuite):
self._list_cases(test)
elif isinstance(test, unittest.TestCase):
- print(test.id())
+ if support._match_test(test):
+ print(test.id())
def list_cases(self):
+ support.verbose = False
+ support.match_tests = self.ns.match_tests
+
for test in self.selected:
abstest = get_abs_module(self.ns, test)
try:
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 0a3d4d9..817ba67 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -1905,6 +1905,23 @@ def _run_suite(suite):
raise TestFailed(err)
+def _match_test(test):
+ global match_tests
+
+ if match_tests is None:
+ return True
+ test_id = test.id()
+
+ for match_test in match_tests:
+ if fnmatch.fnmatchcase(test_id, match_test):
+ return True
+
+ for name in test_id.split("."):
+ if fnmatch.fnmatchcase(name, match_test):
+ return True
+ return False
+
+
def run_unittest(*classes):
"""Run tests from unittest.TestCase-derived classes."""
valid_types = (unittest.TestSuite, unittest.TestCase)
@@ -1919,20 +1936,7 @@ def run_unittest(*classes):
suite.addTest(cls)
else:
suite.addTest(unittest.makeSuite(cls))
- def case_pred(test):
- if match_tests is None:
- return True
- test_id = test.id()
-
- for match_test in match_tests:
- if fnmatch.fnmatchcase(test_id, match_test):
- return True
-
- for name in test_id.split("."):
- if fnmatch.fnmatchcase(name, match_test):
- return True
- return False
- _filter_suite(suite, case_pred)
+ _filter_suite(suite, _match_test)
_run_suite(suite)
#=======================================================================
diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
index 5c6154a..6f4fa79 100644
--- a/Lib/test/test_regrtest.py
+++ b/Lib/test/test_regrtest.py
@@ -837,11 +837,20 @@ class ArgsTestCase(BaseTestCase):
pass
""")
testname = self.create_test(code=code)
+
+ # Test --list-cases
all_methods = ['%s.Tests.test_method1' % testname,
'%s.Tests.test_method2' % testname]
output = self.run_tests('--list-cases', testname)
self.assertEqual(output.splitlines(), all_methods)
+ # Test --list-cases with --match
+ all_methods = ['%s.Tests.test_method1' % testname]
+ output = self.run_tests('--list-cases',
+ '-m', 'test_method1',
+ testname)
+ self.assertEqual(output.splitlines(), all_methods)
+
def test_crashed(self):
# Any code which causes a crash
code = 'import faulthandler; faulthandler._sigsegv()'