diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -29,8 +29,6 @@ Options: Verbosity -v/--verbose -- run tests in verbose mode with output to stdout --w/--verbose2 -- re-run failed tests in verbose mode --W/--verbose3 -- re-run failed tests in verbose mode immediately -d/--debug -- print traceback for failed tests -q/--quiet -- no output unless one or more tests fail -S/--slow -- print the slowest 10 tests @@ -240,8 +238,8 @@ def usage(msg): def main(tests=None, testdir=None, verbose=0, quiet=False, exclude=False, single=False, randomize=False, fromfile=None, findleaks=False, use_resources=None, trace=False, coverdir='coverage', - runleaks=False, huntrleaks=False, verbose2=False, print_slow=False, - random_seed=None, use_mp=None, verbose3=False, forever=False, + runleaks=False, huntrleaks=False, print_slow=False, + random_seed=None, use_mp=None, forever=False, header=False): """Execute a test suite. @@ -274,7 +272,7 @@ def main(tests=None, testdir=None, verbo support.record_original_stdout(sys.stdout) try: opts, args = getopt.getopt(sys.argv[1:], 'hvqxsSrf:lu:t:TD:NLR:FwWM:nj:', - ['help', 'verbose', 'verbose2', 'verbose3', 'quiet', + ['help', 'verbose', 'quiet', 'exclude', 'single', 'slow', 'random', 'fromfile', 'findleaks', 'use=', 'threshold=', 'trace', 'coverdir=', 'nocoverdir', 'runleaks', 'huntrleaks=', 'memlimit=', 'randseed=', @@ -297,12 +295,8 @@ def main(tests=None, testdir=None, verbo return elif o in ('-v', '--verbose'): verbose += 1 - elif o in ('-w', '--verbose2'): - verbose2 = True elif o in ('-d', '--debug'): debug = True - elif o in ('-W', '--verbose3'): - verbose3 = True elif o in ('-q', '--quiet'): quiet = True; verbose = 0 @@ -580,7 +574,7 @@ def main(tests=None, testdir=None, verbo args_tuple = ( (test, verbose, quiet), dict(huntrleaks=huntrleaks, use_resources=use_resources, - debug=debug, rerun_failed=verbose3, timeout=timeout) + debug=debug, timeout=timeout) ) yield (test, args_tuple) pending = tests_and_args() @@ -665,7 +659,7 @@ def main(tests=None, testdir=None, verbo else: try: result = runtest(test, verbose, quiet, huntrleaks, debug, - rerun_failed=verbose3, timeout=timeout) + timeout=timeout) accumulate_result(test, result) except KeyboardInterrupt: interrupted = True @@ -729,21 +723,6 @@ def main(tests=None, testdir=None, verbo print("Ask someone to teach regrtest.py about which tests are") print("expected to get skipped on", plat + ".") - if verbose2 and bad: - print("Re-running failed tests in verbose mode") - for test in bad: - print("Re-running test %r in verbose mode" % test) - sys.stdout.flush() - try: - verbose = True - ok = runtest(test, True, quiet, huntrleaks, debug, timeout=timeout) - except KeyboardInterrupt: - # print a newline separate from the ^C - print() - break - except: - raise - if single: if next_single_test: with open(filename, 'w') as fp: @@ -809,7 +788,7 @@ def replace_stdout(): def runtest(test, verbose, quiet, huntrleaks=False, debug=False, use_resources=None, - rerun_failed=False, timeout=None): + timeout=None): """Run a single test. test -- the name of the test @@ -818,7 +797,6 @@ def runtest(test, verbose, quiet, test_times -- a list of (time, test_name) pairs huntrleaks -- run multiple times to test for leaks; requires a debug build; a triple corresponding to -R's three arguments - rerun_failed -- if true, re-run in verbose mode when failed timeout -- dump the traceback and exit if a test takes more than timeout seconds @@ -831,20 +809,28 @@ def runtest(test, verbose, quiet, PASSED test passed """ - support.verbose = verbose # Tell tests to be moderately quiet + quiet = False + support.verbose = True # Tell tests to be moderately quiet if use_resources is not None: support.use_resources = use_resources use_timeout = (timeout is not None) if use_timeout: faulthandler.dump_tracebacks_later(timeout, exit=True) try: - result = runtest_inner(test, verbose, quiet, huntrleaks, debug) - if result[0] == FAILED and rerun_failed: - cleanup_test_droppings(test, verbose) - sys.stdout.flush() - sys.stderr.flush() - print("Re-running test {} in verbose mode".format(test)) - runtest(test, True, quiet, huntrleaks, debug, timeout=timeout) + if verbose: + result = runtest_inner(test, True, quiet, huntrleaks, debug) + else: + orig_stderr = sys.stderr + with support.captured_stdout() as stream: + try: + sys.stderr = stream + result = runtest_inner(test, verbose, quiet, huntrleaks, debug) + if result[0] == FAILED: + output = stream.getvalue() + orig_stderr.write(output) + orig_stderr.flush() + finally: + sys.stderr = orig_stderr return result finally: if use_timeout: @@ -1058,8 +1044,12 @@ def runtest_inner(test, verbose, quiet, except KeyboardInterrupt: raise except support.TestFailed as msg: - print("test", test, "failed --", msg, file=sys.stderr) - sys.stderr.flush() + if verbose: + print("test", test, "failed", file=sys.stderr) + sys.stderr.flush() + else: + print("test", test, "failed --", msg, file=sys.stderr) + sys.stderr.flush() return FAILED, test_time except: msg = traceback.format_exc() diff --git a/Makefile.pre.in b/Makefile.pre.in --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -790,7 +790,7 @@ buildbottest: all platform -@if which pybuildbot.identify >/dev/null 2>&1; then \ pybuildbot.identify "CC='$(CC)'" "CXX='$(CXX)'"; \ fi - $(TESTPYTHON) $(TESTPROG) -uall -rwW --timeout=$(TESTTIMEOUT) $(TESTOPTS) + $(TESTPYTHON) $(TESTPROG) -uall -r --timeout=$(TESTTIMEOUT) $(TESTOPTS) QUICKTESTOPTS= $(TESTOPTS) -x test_subprocess test_io test_lib2to3 \ test_multibytecodec test_urllib2_localnet test_itertools \