diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2011-06-29 11:00:54 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2011-06-29 11:00:54 (GMT) |
commit | a7c33e5168a6dbc1f97bf3287cfd86bebf80f4ed (patch) | |
tree | a8237aa7d5e78b167a482ce4a6dd9c3c7d42de90 /Lib/test/regrtest.py | |
parent | eb5af22080f0acb8c58abec7c90bfa9ad5f75eec (diff) | |
download | cpython-a7c33e5168a6dbc1f97bf3287cfd86bebf80f4ed.zip cpython-a7c33e5168a6dbc1f97bf3287cfd86bebf80f4ed.tar.gz cpython-a7c33e5168a6dbc1f97bf3287cfd86bebf80f4ed.tar.bz2 |
Issue #12400: regrtest -W doesn't rerun the tests twice anymore, but captures
the output and displays it on failure instead. regrtest -v doesn't print the
error twice anymore if there is only one error.
Diffstat (limited to 'Lib/test/regrtest.py')
-rwxr-xr-x | Lib/test/regrtest.py | 36 |
1 files changed, 25 insertions, 11 deletions
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py index 08c9916..2929001 100755 --- a/Lib/test/regrtest.py +++ b/Lib/test/regrtest.py @@ -25,7 +25,7 @@ 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 +-W/--verbose3 -- display test output on failure -d/--debug -- print traceback for failed tests -q/--quiet -- no output unless one or more tests fail -S/--slow -- print the slowest 10 tests @@ -781,17 +781,27 @@ def runtest(test, verbose, quiet, PASSED test passed """ - support.verbose = verbose # Tell tests to be moderately quiet if use_resources is not None: support.use_resources = use_resources 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) + if rerun_failed: + support.verbose = True + orig_stderr = sys.stderr + with support.captured_stdout() as stream: + try: + sys.stderr = stream + result = runtest_inner(test, verbose, quiet, huntrleaks, + debug, display_failure=False) + if result[0] == FAILED: + output = stream.getvalue() + orig_stderr.write(output) + orig_stderr.flush() + finally: + sys.stderr = orig_stderr + else: + support.verbose = verbose # Tell tests to be moderately quiet + result = runtest_inner(test, verbose, quiet, huntrleaks, debug, + display_failure=not verbose) return result finally: cleanup_test_droppings(test, verbose) @@ -960,7 +970,8 @@ class saved_test_environment: return False -def runtest_inner(test, verbose, quiet, huntrleaks=False, debug=False): +def runtest_inner(test, verbose, quiet, + huntrleaks=False, debug=False, display_failure=True): support.unload(test) if verbose: capture_stdout = None @@ -1002,7 +1013,10 @@ def runtest_inner(test, verbose, quiet, huntrleaks=False, debug=False): except KeyboardInterrupt: raise except support.TestFailed as msg: - print("test", test, "failed --", msg, file=sys.stderr) + if display_failure: + print("test", test, "failed --", msg, file=sys.stderr) + else: + print("test", test, "failed", file=sys.stderr) sys.stderr.flush() return FAILED, test_time except: |