[Python-checkins] cpython (merge 3.2 -> default): (merge 3.2) Issue #12400: regrtest -W doesn't rerun the tests twice anymore,

victor.stinner python-checkins at python.org
Wed Jun 29 13:04:23 CEST 2011


http://hg.python.org/cpython/rev/0172d40fdcd4
changeset:   71061:0172d40fdcd4
parent:      71059:00ca0c2c7bc0
parent:      71060:949e0c0f5a38
user:        Victor Stinner <victor.stinner at haypocalc.com>
date:        Wed Jun 29 13:04:35 2011 +0200
summary:
  (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.

files:
  Lib/test/regrtest.py |  36 ++++++++++++++++++++++---------
  Lib/test/test_os.py  |   1 +
  Misc/NEWS            |   4 +++
  3 files changed, 30 insertions(+), 11 deletions(-)


diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -30,7 +30,7 @@
 
 -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
@@ -831,20 +831,30 @@
         PASSED           test passed
     """
 
-    support.verbose = verbose  # 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 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:
         if use_timeout:
@@ -1020,7 +1030,8 @@
         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)
 
     test_time = 0.0
@@ -1058,7 +1069,10 @@
     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:
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -40,6 +40,7 @@
     tearDown = setUp
 
     def test_access(self):
+        self.assertEqual(1,2)
         f = os.open(support.TESTFN, os.O_CREAT|os.O_RDWR)
         os.close(f)
         self.assertTrue(os.access(support.TESTFN, os.W_OK))
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -924,6 +924,10 @@
 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
   test_build_ext of test_distutils and test_command_build_ext of
   test_packaging are no longer silently skipped when

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list