Get rid of the increasingly convoluted global tricks w/ sys.stdout, in
favor of local save/modify/restore. The test suite should run fine again.
This commit is contained in:
parent
5055545fc0
commit
342ca75d95
|
@ -287,7 +287,7 @@ def runtest(test, generate, verbose, quiet, testdir = None):
|
||||||
else:
|
else:
|
||||||
cfp = StringIO.StringIO()
|
cfp = StringIO.StringIO()
|
||||||
try:
|
try:
|
||||||
sys.save_stdout = sys.stdout
|
save_stdout = sys.stdout
|
||||||
try:
|
try:
|
||||||
if cfp:
|
if cfp:
|
||||||
sys.stdout = cfp
|
sys.stdout = cfp
|
||||||
|
@ -301,7 +301,7 @@ def runtest(test, generate, verbose, quiet, testdir = None):
|
||||||
if indirect_test is not None:
|
if indirect_test is not None:
|
||||||
indirect_test()
|
indirect_test()
|
||||||
finally:
|
finally:
|
||||||
sys.stdout = sys.save_stdout
|
sys.stdout = save_stdout
|
||||||
except (ImportError, test_support.TestSkipped), msg:
|
except (ImportError, test_support.TestSkipped), msg:
|
||||||
if not quiet:
|
if not quiet:
|
||||||
print "test", test, "skipped --", msg
|
print "test", test, "skipped --", msg
|
||||||
|
|
|
@ -2,8 +2,6 @@
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
sys.save_stdout = sys.stdout
|
|
||||||
|
|
||||||
class Error(Exception):
|
class Error(Exception):
|
||||||
"""Base class for regression test exceptions."""
|
"""Base class for regression test exceptions."""
|
||||||
|
|
||||||
|
@ -23,26 +21,6 @@ class TestSkipped(Error):
|
||||||
verbose = 1 # Flag set to 0 by regrtest.py
|
verbose = 1 # Flag set to 0 by regrtest.py
|
||||||
use_resources = None # Flag set to [] by regrtest.py
|
use_resources = None # Flag set to [] by regrtest.py
|
||||||
|
|
||||||
# _output_comparison controls whether regrtest will try to compare stdout
|
|
||||||
# with an expected-output file. For straight regrtests, it should.
|
|
||||||
# The doctest driver resets this flag by calling deny_output_comparison().
|
|
||||||
# Note that this control is in addition to verbose mode: output will be
|
|
||||||
# compared if and only if _output_comparison is true and verbose mode is
|
|
||||||
# not in effect.
|
|
||||||
_output_comparison = 1
|
|
||||||
|
|
||||||
def deny_output_comparison():
|
|
||||||
global _output_comparison
|
|
||||||
_output_comparison = 0
|
|
||||||
sys.stdout = sys.save_stdout
|
|
||||||
|
|
||||||
# regrtest's interface to _output_comparison.
|
|
||||||
def output_comparison_denied():
|
|
||||||
global _output_comparison
|
|
||||||
denied = not _output_comparison
|
|
||||||
_output_comparison = 1
|
|
||||||
return denied
|
|
||||||
|
|
||||||
def unload(name):
|
def unload(name):
|
||||||
try:
|
try:
|
||||||
del sys.modules[name]
|
del sys.modules[name]
|
||||||
|
@ -201,7 +179,13 @@ def run_doctest(module, verbosity=None):
|
||||||
else:
|
else:
|
||||||
verbosity = None
|
verbosity = None
|
||||||
|
|
||||||
deny_output_comparison()
|
# Direct doctest output (normally just errors) to real stdout; doctest
|
||||||
f, t = doctest.testmod(module, verbose=verbosity)
|
# output shouldn't be compared by regrtest.
|
||||||
if f:
|
save_stdout = sys.stdout
|
||||||
raise TestFailed("%d of %d doctests failed" % (f, t))
|
sys.stdout = sys.__stdout__
|
||||||
|
try:
|
||||||
|
f, t = doctest.testmod(module, verbose=verbosity)
|
||||||
|
if f:
|
||||||
|
raise TestFailed("%d of %d doctests failed" % (f, t))
|
||||||
|
finally:
|
||||||
|
sys.stdout = save_stdout
|
||||||
|
|
Loading…
Reference in New Issue