diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-06-26 12:18:51 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-26 12:18:51 (GMT) |
commit | ace56d583664f855d89d1219ece7c21c2fddcf30 (patch) | |
tree | 5f1748bb793b80f8d926df75cbe2e60acbd13974 /Lib | |
parent | 8c78aa70c888a370af18896a72cabd00e4120f09 (diff) | |
download | cpython-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.py | 6 | ||||
-rw-r--r-- | Lib/test/support/__init__.py | 32 | ||||
-rw-r--r-- | Lib/test/test_regrtest.py | 9 |
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()' |