[Python-checkins] cpython (merge 3.2 -> default): (merge 3.2) Issue #12400: runtest() reuses the same io.StringIO instance for
victor.stinner
python-checkins at python.org
Wed Jun 29 15:26:02 CEST 2011
http://hg.python.org/cpython/rev/8897c755633b
changeset: 71069:8897c755633b
parent: 71067:c0afc8d00c0a
parent: 71068:6c54c334ea7a
user: Victor Stinner <victor.stinner at haypocalc.com>
date: Wed Jun 29 15:25:40 2011 +0200
summary:
(merge 3.2) 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 | 58 ++++++++++++++++++-------------
1 files changed, 34 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
@@ -162,23 +162,24 @@
"""
import builtins
+import errno
import faulthandler
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
@@ -579,7 +580,8 @@
args_tuple = (
(test, verbose, quiet),
dict(huntrleaks=huntrleaks, use_resources=use_resources,
- debug=debug, rerun_failed=verbose3, timeout=timeout)
+ debug=debug, output_on_failure=verbose3,
+ timeout=timeout)
)
yield (test, args_tuple)
pending = tests_and_args()
@@ -664,7 +666,7 @@
else:
try:
result = runtest(test, verbose, quiet, huntrleaks, debug,
- rerun_failed=verbose3, timeout=timeout)
+ output_on_failure=verbose3, timeout=timeout)
accumulate_result(test, result)
except KeyboardInterrupt:
interrupted = True
@@ -808,7 +810,7 @@
def runtest(test, verbose, quiet,
huntrleaks=False, debug=False, use_resources=None,
- rerun_failed=False, timeout=None):
+ output_on_failure=False, timeout=None):
"""Run a single test.
test -- the name of the test
@@ -817,7 +819,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
timeout -- dump the traceback and exit if a test takes more than
timeout seconds
@@ -836,22 +838,29 @@
if use_timeout:
faulthandler.dump_tracebacks_later(timeout, exit=True)
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
@@ -859,6 +868,7 @@
if use_timeout:
faulthandler.cancel_dump_tracebacks_later()
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