Commit ab983677 authored by Victor Stinner's avatar Victor Stinner

Cleanup libregrtest

* main.py: remove unused import
* runtest: simplify runtest_inner() parameters, reuse ns parameter
parent b820d7f6
import datetime import datetime
import faulthandler import faulthandler
import math
import os import os
import platform import platform
import random import random
......
...@@ -74,18 +74,12 @@ def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS): ...@@ -74,18 +74,12 @@ def findtests(testdir=None, stdtests=STDTESTS, nottests=NOTTESTS):
def runtest(ns, test): def runtest(ns, test):
"""Run a single test. """Run a single test.
ns -- regrtest namespace of options
test -- the name of the test test -- the name of the test
verbose -- if true, print more messages
quiet -- if true, don't print 'skipped' messages (probably redundant)
huntrleaks -- run multiple times to test for leaks; requires a debug
build; a triple corresponding to -R's three arguments
output_on_failure -- if true, display test output on failure
timeout -- dump the traceback and exit if a test takes more than
timeout seconds
failfast, match_tests -- See regrtest command-line flags for these.
pgo -- if true, suppress any info irrelevant to a generating a PGO build
Returns the tuple result, test_time, where result is one of the constants: Returns the tuple (result, test_time), where result is one of the
constants:
INTERRUPTED KeyboardInterrupt when run under -j INTERRUPTED KeyboardInterrupt when run under -j
RESOURCE_DENIED test skipped because resource denied RESOURCE_DENIED test skipped because resource denied
SKIPPED test skipped for some other reason SKIPPED test skipped for some other reason
...@@ -94,21 +88,14 @@ def runtest(ns, test): ...@@ -94,21 +88,14 @@ def runtest(ns, test):
PASSED test passed PASSED test passed
""" """
verbose = ns.verbose
quiet = ns.quiet
huntrleaks = ns.huntrleaks
output_on_failure = ns.verbose3 output_on_failure = ns.verbose3
failfast = ns.failfast
match_tests = ns.match_tests
timeout = ns.timeout
pgo = ns.pgo
use_timeout = (timeout is not None) use_timeout = (ns.timeout is not None)
if use_timeout: if use_timeout:
faulthandler.dump_traceback_later(timeout, exit=True) faulthandler.dump_traceback_later(ns.timeout, exit=True)
try: try:
support.match_tests = match_tests support.match_tests = ns.match_tests
if failfast: if ns.failfast:
support.failfast = True support.failfast = True
if output_on_failure: if output_on_failure:
support.verbose = True support.verbose = True
...@@ -129,8 +116,7 @@ def runtest(ns, test): ...@@ -129,8 +116,7 @@ def runtest(ns, test):
try: try:
sys.stdout = stream sys.stdout = stream
sys.stderr = stream sys.stderr = stream
result = runtest_inner(ns, test, verbose, quiet, huntrleaks, result = runtest_inner(ns, test, display_failure=False)
display_failure=False, pgo=pgo)
if result[0] == FAILED: if result[0] == FAILED:
output = stream.getvalue() output = stream.getvalue()
orig_stderr.write(output) orig_stderr.write(output)
...@@ -139,19 +125,17 @@ def runtest(ns, test): ...@@ -139,19 +125,17 @@ def runtest(ns, test):
sys.stdout = orig_stdout sys.stdout = orig_stdout
sys.stderr = orig_stderr sys.stderr = orig_stderr
else: else:
support.verbose = verbose # Tell tests to be moderately quiet support.verbose = ns.verbose # Tell tests to be moderately quiet
result = runtest_inner(ns, test, verbose, quiet, huntrleaks, result = runtest_inner(ns, test, display_failure=not ns.verbose)
display_failure=not verbose, pgo=pgo)
return result return result
finally: finally:
if use_timeout: if use_timeout:
faulthandler.cancel_dump_traceback_later() faulthandler.cancel_dump_traceback_later()
cleanup_test_droppings(test, verbose) cleanup_test_droppings(test, ns.verbose)
runtest.stringio = None runtest.stringio = None
def runtest_inner(ns, test, verbose, quiet, def runtest_inner(ns, test, display_failure=True):
huntrleaks=False, display_failure=True, *, pgo=False):
support.unload(test) support.unload(test)
test_time = 0.0 test_time = 0.0
...@@ -162,7 +146,7 @@ def runtest_inner(ns, test, verbose, quiet, ...@@ -162,7 +146,7 @@ def runtest_inner(ns, test, verbose, quiet,
else: else:
# Always import it from the test package # Always import it from the test package
abstest = 'test.' + test abstest = 'test.' + test
with saved_test_environment(test, verbose, quiet, pgo=pgo) as environment: with saved_test_environment(test, ns.verbose, ns.quiet, pgo=ns.pgo) as environment:
start_time = time.time() start_time = time.time()
the_module = importlib.import_module(abstest) the_module = importlib.import_module(abstest)
# If the test has a test_main, that will run the appropriate # If the test has a test_main, that will run the appropriate
...@@ -178,21 +162,21 @@ def runtest_inner(ns, test, verbose, quiet, ...@@ -178,21 +162,21 @@ def runtest_inner(ns, test, verbose, quiet,
raise Exception("errors while loading tests") raise Exception("errors while loading tests")
support.run_unittest(tests) support.run_unittest(tests)
test_runner() test_runner()
if huntrleaks: if ns.huntrleaks:
refleak = dash_R(the_module, test, test_runner, huntrleaks) refleak = dash_R(the_module, test, test_runner, ns.huntrleaks)
test_time = time.time() - start_time test_time = time.time() - start_time
except support.ResourceDenied as msg: except support.ResourceDenied as msg:
if not quiet and not pgo: if not ns.quiet and not ns.pgo:
print(test, "skipped --", msg, flush=True) print(test, "skipped --", msg, flush=True)
return RESOURCE_DENIED, test_time return RESOURCE_DENIED, test_time
except unittest.SkipTest as msg: except unittest.SkipTest as msg:
if not quiet and not pgo: if not ns.quiet and not ns.pgo:
print(test, "skipped --", msg, flush=True) print(test, "skipped --", msg, flush=True)
return SKIPPED, test_time return SKIPPED, test_time
except KeyboardInterrupt: except KeyboardInterrupt:
raise raise
except support.TestFailed as msg: except support.TestFailed as msg:
if not pgo: if not ns.pgo:
if display_failure: if display_failure:
print("test", test, "failed --", msg, file=sys.stderr, print("test", test, "failed --", msg, file=sys.stderr,
flush=True) flush=True)
...@@ -201,7 +185,7 @@ def runtest_inner(ns, test, verbose, quiet, ...@@ -201,7 +185,7 @@ def runtest_inner(ns, test, verbose, quiet,
return FAILED, test_time return FAILED, test_time
except: except:
msg = traceback.format_exc() msg = traceback.format_exc()
if not pgo: if not ns.pgo:
print("test", test, "crashed --", msg, file=sys.stderr, print("test", test, "crashed --", msg, file=sys.stderr,
flush=True) flush=True)
return FAILED, test_time return FAILED, test_time
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment