[Python-checkins] cpython (3.2): Issue #12400: runtest() reuses the same io.StringIO instance for all calls

victor.stinner python-checkins at python.org
Wed Jun 29 15:26:01 CEST 2011


http://hg.python.org/cpython/rev/6c54c334ea7a
changeset: 71068:6c54c334ea7a
branch: 3.2
parent: 71066:74c6afbb524a
user: Victor Stinner <victor.stinner at haypocalc.com>
date: Wed Jun 29 15:22:26 2011 +0200
summary:
 Issue #12400: runtest() reuses the same io.StringIO instance for all calls
 * Don't force verbose to True with option -W
 * Rename rerun_failed variable to output_on_failure
files:
 Lib/test/regrtest.py | 57 ++++++++++++++++++-------------
 1 files changed, 33 insertions(+), 24 deletions(-)
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -154,22 +154,23 @@
 """
 
 import builtins
+import errno
 import getopt
+import io
 import json
+import logging
 import os
+import platform
 import random
 import re
 import sys
+import sysconfig
+import tempfile
 import time
-import errno
 import traceback
+import unittest
 import warnings
-import unittest
 from inspect import isabstract
-import tempfile
-import platform
-import sysconfig
-import logging
 
 
 # Some times __path__ and __file__ are not absolute (e.g. while running from
@@ -535,7 +536,7 @@
 args_tuple = (
 (test, verbose, quiet),
 dict(huntrleaks=huntrleaks, use_resources=use_resources,
- debug=debug, rerun_failed=verbose3)
+ debug=debug, output_on_failure=verbose3)
 )
 yield (test, args_tuple)
 pending = tests_and_args()
@@ -613,7 +614,7 @@
 else:
 try:
 result = runtest(test, verbose, quiet, huntrleaks, debug,
- rerun_failed=verbose3)
+ output_on_failure=verbose3)
 accumulate_result(test, result)
 except KeyboardInterrupt:
 interrupted = True
@@ -760,7 +761,7 @@
 
 def runtest(test, verbose, quiet,
 huntrleaks=False, debug=False, use_resources=None,
- rerun_failed=False):
+ output_on_failure=False):
 """Run a single test.
 
 test -- the name of the test
@@ -769,7 +770,7 @@
 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
+ output_on_failure -- if true, display test output on failure
 
 Returns one of the test result constants:
 INTERRUPTED KeyboardInterrupt when run under -j
@@ -783,27 +784,35 @@
 if use_resources is not None:
 support.use_resources = use_resources
 try:
- if rerun_failed:
- support.verbose = True
+ support.verbose = verbose # Tell tests to be moderately quiet
+ if output_on_failure:
+ if runtest.stringio is None:
+ # Reuse the same instance to all calls to runtest(). Some
+ # tests keep a reference to sys.stdout or sys.stderr
+ # (eg. test_argparse).
+ runtest.stringio = io.StringIO()
+
+ orig_stdout = sys.stdout
 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
+ try:
+ sys.stdout = runtest.stringio
+ sys.stderr = runtest.stringio
+ result = runtest_inner(test, verbose, quiet, huntrleaks,
+ debug, display_failure=False)
+ if result[0] == FAILED:
+ output = stringio.getvalue()
+ orig_stderr.write(output)
+ orig_stderr.flush()
+ finally:
+ sys.stdout = orig_stdout
+ 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)
+runtest.stringio = None
 
 # Unit tests are supposed to leave the execution environment unchanged
 # once they complete. But sometimes tests have bugs, especially when
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /