Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 6f20a2e

Browse files
committed
Issue #25220, libregrtest: Pass directly ns to runtest()
* Remove runtest_ns(): pass directly ns to runtest(). * Create also Regrtest.rerun_failed_tests() method. * Inline again Regrtest.run_test(): it's no more justified to have a method
1 parent a204502 commit 6f20a2e

3 files changed

Lines changed: 44 additions & 45 deletions

File tree

Lib/test/libregrtest/main.py

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import tempfile
88
import textwrap
99
from test.libregrtest.runtest import (
10-
findtests, runtest_ns,
10+
findtests, runtest,
1111
STDTESTS, NOTTESTS, PASSED, FAILED, ENV_CHANGED, SKIPPED, RESOURCE_DENIED)
1212
from test.libregrtest.cmdline import _parse_args
1313
from test.libregrtest.setup import setup_tests
@@ -208,6 +208,30 @@ def find_tests(self, tests):
208208
print("Using random seed", self.ns.random_seed)
209209
random.shuffle(self.selected)
210210

211+
def rerun_failed_tests(self):
212+
self.ns.verbose = True
213+
self.ns.failfast = False
214+
self.ns.verbose3 = False
215+
self.ns.match_tests = None
216+
217+
print("Re-running failed tests in verbose mode")
218+
for test in self.bad[:]:
219+
print("Re-running test %r in verbose mode" % test, flush=True)
220+
try:
221+
self.ns.verbose = True
222+
ok = runtest(self.ns, test)
223+
except KeyboardInterrupt:
224+
# print a newline separate from the ^C
225+
print()
226+
break
227+
else:
228+
if ok[0] in {PASSED, ENV_CHANGED, SKIPPED, RESOURCE_DENIED}:
229+
self.bad.remove(test)
230+
else:
231+
if self.bad:
232+
print(count(len(self.bad), 'test'), "failed again:")
233+
printlist(self.bad)
234+
211235
def display_result(self):
212236
if self.interrupted:
213237
# print a newline after ^C
@@ -245,32 +269,6 @@ def display_result(self):
245269
print(count(len(self.skipped), "test"), "skipped:")
246270
printlist(self.skipped)
247271

248-
if self.ns.verbose2 and self.bad:
249-
print("Re-running failed tests in verbose mode")
250-
for test in self.bad[:]:
251-
print("Re-running test %r in verbose mode" % test, flush=True)
252-
try:
253-
self.ns.verbose = True
254-
ok = runtest_ns(test, True, self.ns)
255-
except KeyboardInterrupt:
256-
# print a newline separate from the ^C
257-
print()
258-
break
259-
else:
260-
if ok[0] in {PASSED, ENV_CHANGED, SKIPPED, RESOURCE_DENIED}:
261-
self.bad.remove(test)
262-
else:
263-
if self.bad:
264-
print(count(len(self.bad), 'test'), "failed again:")
265-
printlist(self.bad)
266-
267-
def run_test(self, test):
268-
result = runtest_ns(test, self.ns.verbose, self.ns,
269-
output_on_failure=self.ns.verbose3,
270-
failfast=self.ns.failfast,
271-
match_tests=self.ns.match_tests)
272-
self.accumulate_result(test, result)
273-
274272
def run_tests_sequential(self):
275273
if self.ns.trace:
276274
import trace
@@ -286,11 +284,13 @@ def run_tests_sequential(self):
286284
if self.tracer:
287285
# If we're tracing code coverage, then we don't exit with status
288286
# if on a false return value from main.
289-
cmd = 'self.run_test(test)'
287+
cmd = ('result = runtest(self.ns, test); '
288+
'self.accumulate_result(test, result)')
290289
self.tracer.runctx(cmd, globals=globals(), locals=vars())
291290
else:
292291
try:
293-
self.run_test(test)
292+
result = runtest(self.ns, test)
293+
self.accumulate_result(test, result)
294294
except KeyboardInterrupt:
295295
self.interrupted = True
296296
break
@@ -366,6 +366,10 @@ def main(self, tests=None, **kwargs):
366366
self.run_tests()
367367

368368
self.display_result()
369+
370+
if self.ns.verbose2 and self.bad:
371+
self.rerun_failed_tests()
372+
369373
self.finalize()
370374
sys.exit(len(self.bad) > 0 or self.interrupted)
371375

Lib/test/libregrtest/runtest.py

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,7 @@ def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS):
5353
return stdtests + sorted(tests)
5454

5555

56-
def runtest_ns(test, verbose, ns, **kw):
57-
return runtest(test, verbose, ns.quiet,
58-
huntrleaks=ns.huntrleaks,
59-
timeout=ns.timeout,
60-
**kw)
61-
62-
63-
def runtest(test, verbose, quiet,
64-
huntrleaks=False,
65-
output_on_failure=False, failfast=False, match_tests=None,
66-
timeout=None):
56+
def runtest(ns, test):
6757
"""Run a single test.
6858
6959
test -- the name of the test
@@ -85,6 +75,14 @@ def runtest(test, verbose, quiet,
8575
PASSED test passed
8676
"""
8777

78+
verbose = ns.verbose
79+
quiet = ns.quiet
80+
huntrleaks = ns.huntrleaks
81+
output_on_failure = ns.verbose3
82+
failfast = ns.failfast
83+
match_tests = ns.match_tests
84+
timeout = ns.timeout
85+
8886
use_timeout = (timeout is not None)
8987
if use_timeout:
9088
faulthandler.dump_traceback_later(timeout, exit=True)

Lib/test/libregrtest/runtest_mp.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
print("Multiprocess option requires thread support")
1414
sys.exit(2)
1515

16-
from test.libregrtest.runtest import runtest_ns, INTERRUPTED, CHILD_ERROR
16+
from test.libregrtest.runtest import runtest, INTERRUPTED, CHILD_ERROR
1717
from test.libregrtest.setup import setup_tests
1818

1919

@@ -62,10 +62,7 @@ def run_tests_slave(slaveargs):
6262
setup_tests(ns)
6363

6464
try:
65-
result = runtest_ns(testname, ns.verbose, ns,
66-
output_on_failure=ns.verbose3,
67-
failfast=ns.failfast,
68-
match_tests=ns.match_tests)
65+
result = runtest(ns, testname)
6966
except KeyboardInterrupt:
7067
result = INTERRUPTED, ''
7168
except BaseException as e:

0 commit comments

Comments
 (0)