Skip to content

Commit 4a93a00

Browse files
committed
regrtest: fix --fromfile feature
* Update code for the name regrtest output format. * Enhance also test_regrtest test on --fromfile
1 parent d2fc805 commit 4a93a00

File tree

2 files changed

+41
-6
lines changed

2 files changed

+41
-6
lines changed

Lib/test/libregrtest/main.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,13 +168,21 @@ def find_tests(self, tests):
168168

169169
if self.ns.fromfile:
170170
self.tests = []
171+
# regex to match 'test_builtin' in line:
172+
# '0:00:00 [ 4/400] test_builtin -- test_dict took 1 sec'
173+
regex = (r'^(?:[0-9]+:[0-9]+:[0-9]+ *)?'
174+
r'(?:\[[0-9/ ]+\] *)?'
175+
r'(test_[a-zA-Z0-9_]+)')
176+
regex = re.compile(regex)
171177
with open(os.path.join(support.SAVEDCWD, self.ns.fromfile)) as fp:
172-
count_pat = re.compile(r'\[\s*\d+/\s*\d+\]')
173178
for line in fp:
174-
line = count_pat.sub('', line)
175-
guts = line.split() # assuming no test has whitespace in its name
176-
if guts and not guts[0].startswith('#'):
177-
self.tests.extend(guts)
179+
line = line.strip()
180+
if line.startswith('#'):
181+
continue
182+
match = regex.match(line)
183+
if match is None:
184+
continue
185+
self.tests.append(match.group(1))
178186

179187
removepy(self.tests)
180188

@@ -194,7 +202,10 @@ def find_tests(self, tests):
194202
else:
195203
alltests = findtests(self.ns.testdir, stdtests, nottests)
196204

197-
self.selected = self.tests or self.ns.args or alltests
205+
if not self.ns.fromfile:
206+
self.selected = self.tests or self.ns.args or alltests
207+
else:
208+
self.selected = self.tests
198209
if self.ns.single:
199210
self.selected = self.selected[:1]
200211
try:

Lib/test/test_regrtest.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,13 +628,37 @@ def test_fromfile(self):
628628
# [2/2] test_2
629629
filename = support.TESTFN
630630
self.addCleanup(support.unlink, filename)
631+
632+
# test format '0:00:00 [2/7] test_opcodes -- test_grammar took 0 sec'
633+
with open(filename, "w") as fp:
634+
previous = None
635+
for index, name in enumerate(tests, 1):
636+
line = ("00:00:%02i [%s/%s] %s"
637+
% (index, index, len(tests), name))
638+
if previous:
639+
line += " -- %s took 0 sec" % previous
640+
print(line, file=fp)
641+
previous = name
642+
643+
output = self.run_tests('--fromfile', filename)
644+
self.check_executed_tests(output, tests)
645+
646+
# test format '[2/7] test_opcodes'
631647
with open(filename, "w") as fp:
632648
for index, name in enumerate(tests, 1):
633649
print("[%s/%s] %s" % (index, len(tests), name), file=fp)
634650

635651
output = self.run_tests('--fromfile', filename)
636652
self.check_executed_tests(output, tests)
637653

654+
# test format 'test_opcodes'
655+
with open(filename, "w") as fp:
656+
for name in tests:
657+
print(name, file=fp)
658+
659+
output = self.run_tests('--fromfile', filename)
660+
self.check_executed_tests(output, tests)
661+
638662
def test_interrupted(self):
639663
code = TEST_INTERRUPTED
640664
test = self.create_test("sigint", code=code)

0 commit comments

Comments
 (0)