mirror of
https://github.com/python/cpython.git
synced 2025-11-03 03:22:27 +00:00
(merge 3.2) 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.
This commit is contained in:
commit
e2185d714b
3 changed files with 30 additions and 11 deletions
|
|
@ -30,7 +30,7 @@ Verbosity
|
||||||
|
|
||||||
-v/--verbose -- run tests in verbose mode with output to stdout
|
-v/--verbose -- run tests in verbose mode with output to stdout
|
||||||
-w/--verbose2 -- re-run failed tests in verbose mode
|
-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
|
-d/--debug -- print traceback for failed tests
|
||||||
-q/--quiet -- no output unless one or more tests fail
|
-q/--quiet -- no output unless one or more tests fail
|
||||||
-S/--slow -- print the slowest 10 tests
|
-S/--slow -- print the slowest 10 tests
|
||||||
|
|
@ -831,20 +831,30 @@ def runtest(test, verbose, quiet,
|
||||||
PASSED test passed
|
PASSED test passed
|
||||||
"""
|
"""
|
||||||
|
|
||||||
support.verbose = verbose # Tell tests to be moderately quiet
|
|
||||||
if use_resources is not None:
|
if use_resources is not None:
|
||||||
support.use_resources = use_resources
|
support.use_resources = use_resources
|
||||||
use_timeout = (timeout is not None)
|
use_timeout = (timeout is not None)
|
||||||
if use_timeout:
|
if use_timeout:
|
||||||
faulthandler.dump_tracebacks_later(timeout, exit=True)
|
faulthandler.dump_tracebacks_later(timeout, exit=True)
|
||||||
try:
|
try:
|
||||||
result = runtest_inner(test, verbose, quiet, huntrleaks, debug)
|
if rerun_failed:
|
||||||
if result[0] == FAILED and rerun_failed:
|
support.verbose = True
|
||||||
cleanup_test_droppings(test, verbose)
|
orig_stderr = sys.stderr
|
||||||
sys.stdout.flush()
|
with support.captured_stdout() as stream:
|
||||||
sys.stderr.flush()
|
try:
|
||||||
print("Re-running test {} in verbose mode".format(test))
|
sys.stderr = stream
|
||||||
runtest(test, True, quiet, huntrleaks, debug, timeout=timeout)
|
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
|
return result
|
||||||
finally:
|
finally:
|
||||||
if use_timeout:
|
if use_timeout:
|
||||||
|
|
@ -1020,7 +1030,8 @@ class saved_test_environment:
|
||||||
return False
|
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)
|
support.unload(test)
|
||||||
|
|
||||||
test_time = 0.0
|
test_time = 0.0
|
||||||
|
|
@ -1058,7 +1069,10 @@ def runtest_inner(test, verbose, quiet, huntrleaks=False, debug=False):
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
raise
|
raise
|
||||||
except support.TestFailed as msg:
|
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()
|
sys.stderr.flush()
|
||||||
return FAILED, test_time
|
return FAILED, test_time
|
||||||
except:
|
except:
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ class FileTests(unittest.TestCase):
|
||||||
tearDown = setUp
|
tearDown = setUp
|
||||||
|
|
||||||
def test_access(self):
|
def test_access(self):
|
||||||
|
self.assertEqual(1,2)
|
||||||
f = os.open(support.TESTFN, os.O_CREAT|os.O_RDWR)
|
f = os.open(support.TESTFN, os.O_CREAT|os.O_RDWR)
|
||||||
os.close(f)
|
os.close(f)
|
||||||
self.assertTrue(os.access(support.TESTFN, os.W_OK))
|
self.assertTrue(os.access(support.TESTFN, os.W_OK))
|
||||||
|
|
|
||||||
|
|
@ -924,6 +924,10 @@ Extension Modules
|
||||||
Tests
|
Tests
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
|
||||||
- Issue #12141: Install copies of template C module file so that
|
- Issue #12141: Install copies of template C module file so that
|
||||||
test_build_ext of test_distutils and test_command_build_ext of
|
test_build_ext of test_distutils and test_command_build_ext of
|
||||||
test_packaging are no longer silently skipped when
|
test_packaging are no longer silently skipped when
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue