From 5de16e80c14c7698992da8b08ae169e4be1d2ca3 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 24 Mar 2016 09:43:00 +0100 Subject: [PATCH] regrtest: fix --fromfile feature * Update code for the name regrtest output format. * Enhance also test_regrtest test on --fromfile --- Lib/test/libregrtest/main.py | 23 +++++++++++++++++------ Lib/test/test_regrtest.py | 24 ++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py index b954db5c9d..de08f32d27 100644 --- a/Lib/test/libregrtest/main.py +++ b/Lib/test/libregrtest/main.py @@ -168,13 +168,21 @@ class Regrtest: if self.ns.fromfile: self.tests = [] + # regex to match 'test_builtin' in line: + # '0:00:00 [ 4/400] test_builtin -- test_dict took 1 sec' + regex = (r'^(?:[0-9]+:[0-9]+:[0-9]+ *)?' + r'(?:\[[0-9/ ]+\] *)?' + r'(test_[a-zA-Z0-9_]+)') + regex = re.compile(regex) with open(os.path.join(support.SAVEDCWD, self.ns.fromfile)) as fp: - count_pat = re.compile(r'\[\s*\d+/\s*\d+\]') for line in fp: - line = count_pat.sub('', line) - guts = line.split() # assuming no test has whitespace in its name - if guts and not guts[0].startswith('#'): - self.tests.extend(guts) + line = line.strip() + if line.startswith('#'): + continue + match = regex.match(line) + if match is None: + continue + self.tests.append(match.group(1)) removepy(self.tests) @@ -194,7 +202,10 @@ class Regrtest: else: alltests = findtests(self.ns.testdir, stdtests, nottests) - self.selected = self.tests or self.ns.args or alltests + if not self.ns.fromfile: + self.selected = self.tests or self.ns.args or alltests + else: + self.selected = self.tests if self.ns.single: self.selected = self.selected[:1] try: diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py index 03e7e1d8a1..df8447cade 100644 --- a/Lib/test/test_regrtest.py +++ b/Lib/test/test_regrtest.py @@ -628,6 +628,22 @@ class ArgsTestCase(BaseTestCase): # [2/2] test_2 filename = support.TESTFN self.addCleanup(support.unlink, filename) + + # test format '0:00:00 [2/7] test_opcodes -- test_grammar took 0 sec' + with open(filename, "w") as fp: + previous = None + for index, name in enumerate(tests, 1): + line = ("00:00:%02i [%s/%s] %s" + % (index, index, len(tests), name)) + if previous: + line += " -- %s took 0 sec" % previous + print(line, file=fp) + previous = name + + output = self.run_tests('--fromfile', filename) + self.check_executed_tests(output, tests) + + # test format '[2/7] test_opcodes' with open(filename, "w") as fp: for index, name in enumerate(tests, 1): print("[%s/%s] %s" % (index, len(tests), name), file=fp) @@ -635,6 +651,14 @@ class ArgsTestCase(BaseTestCase): output = self.run_tests('--fromfile', filename) self.check_executed_tests(output, tests) + # test format 'test_opcodes' + with open(filename, "w") as fp: + for name in tests: + print(name, file=fp) + + output = self.run_tests('--fromfile', filename) + self.check_executed_tests(output, tests) + def test_interrupted(self): code = TEST_INTERRUPTED test = self.create_test("sigint", code=code) -- 2.40.0