[2.7] bpo-30283: regrtest: backport test_slow_interrupted() and test_… · python/cpython@a5bb624
@@ -316,7 +316,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
316316'use=', 'threshold=', 'trace', 'coverdir=', 'nocoverdir',
317317'runleaks', 'huntrleaks=', 'memlimit=', 'randseed=',
318318'multiprocess=', 'slaveargs=', 'forever', 'header', 'pgo',
319-'failfast', 'match=', 'testdir=', 'list-tests'])
319+'failfast', 'match=', 'testdir=', 'list-tests', 'coverage'])
320320except getopt.error, msg:
321321usage(2, msg)
322322@@ -531,8 +531,7 @@ def main(tests=None, testdir=None, verbose=0, quiet=False,
531531532532if trace:
533533import trace
534-tracer = trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix],
535-trace=False, count=True)
534+tracer = trace.Trace(trace=False, count=True)
536535537536test_times = []
538537test_support.use_resources = use_resources
@@ -544,7 +543,7 @@ def accumulate_result(test, result):
544543test_times.append((test_time, test))
545544if ok == PASSED:
546545good.append(test)
547-elif ok == FAILED:
546+elif ok in (FAILED, CHILD_ERROR):
548547bad.append(test)
549548elif ok == ENV_CHANGED:
550549environment_changed.append(test)
@@ -553,9 +552,8 @@ def accumulate_result(test, result):
553552elif ok == RESOURCE_DENIED:
554553skipped.append(test)
555554resource_denieds.append(test)
556-else:
557-# CHILD_ERROR
558-bad.append(test)
555+elif ok != INTERRUPTED:
556+raise ValueError("invalid test result: %r" % ok)
559557560558if forever:
561559def test_forever(tests=list(selected)):
@@ -740,19 +738,26 @@ def get_running(workers):
740738if previous_test:
741739text = '%s -- %s' % (text, previous_test)
742740display_progress(test_index, text)
741+742+def local_runtest():
743+result = runtest(test, verbose, quiet, huntrleaks, None, pgo,
744+failfast=failfast,
745+match_tests=match_tests,
746+testdir=testdir)
747+accumulate_result(test, result)
748+return result
749+750+start_time = time.time()
743751if trace:
744752# If we're tracing code coverage, then we don't exit with status
745753# if on a false return value from main.
746-tracer.runctx('runtest(test, verbose, quiet, testdir=testdir)',
747-globals=globals(), locals=vars())
754+ns = dict(locals())
755+tracer.runctx('result = local_runtest()',
756+globals=globals(), locals=ns)
757+result = ns['result']
748758else:
749-start_time = time.time()
750759try:
751-result = runtest(test, verbose, quiet, huntrleaks, None, pgo,
752-failfast=failfast,
753-match_tests=match_tests,
754-testdir=testdir)
755-accumulate_result(test, result)
760+result = local_runtest()
756761if verbose3 and result[0] == FAILED:
757762if not pgo:
758763print "Re-running test %r in verbose mode" % test
@@ -764,14 +769,14 @@ def get_running(workers):
764769except:
765770raise
766771767- previous_test = format_test_result(test, result[0])
768- test_time = time.time() - start_time
769- if test_time >= PROGRESS_MIN_TIME:
770- previous_test = "%s in %s" % (previous_test,
771- format_duration(test_time))
772- elif result[0] == PASSED:
773- # be quiet: say nothing if the test passed shortly
774- previous_test = None
772+test_time = time.time() - start_time
773+previous_test = format_test_result(test, result[0])
774+if test_time >= PROGRESS_MIN_TIME:
775+previous_test = "%s in %s" % (previous_test,
776+format_duration(test_time))
777+elif result[0] == PASSED:
778+# be quiet: say nothing if the test passed shortly
779+previous_test = None
775780776781if findleaks:
777782gc.collect()