Commit 2e0c83c8 authored by Tim Peters's avatar Tim Peters

Edward's latest checkins somehow managed to wipe out my previous latest

checkins.  Reapplying the latter changes.
parent 954e266a
...@@ -1259,27 +1259,30 @@ class DocTestRunner: ...@@ -1259,27 +1259,30 @@ class DocTestRunner:
if compileflags is None: if compileflags is None:
compileflags = _extract_future_flags(test.globs) compileflags = _extract_future_flags(test.globs)
save_stdout = sys.stdout
if out is None: if out is None:
out = sys.stdout.write out = save_stdout.write
saveout = sys.stdout sys.stdout = self._fakeout
# Note that don't save away the previous pdb.set_trace. Rather, # Patch pdb.set_trace to restore sys.stdout, so that interactive
# we safe pdb.set_trace on import (see import section above). # debugging output is visible (not still redirected to self._fakeout).
# We then call and restore that original cersion. We do it this # Note that we run "the real" pdb.set_trace (captured at doctest
# way to make this feature testable. If we kept and called the # import time) in our replacement. Because the current run() may
# previous version, we'd end up restoring the original stdout, # run another doctest (and so on), the current pdb.set_trace may be
# which is not what we want. # our set_trace function, which changes sys.stdout. If we called
# a chain of those, we wouldn't be left with the save_stdout
# *this* run() invocation wants.
def set_trace(): def set_trace():
sys.stdout = saveout sys.stdout = save_stdout
real_pdb_set_trace() real_pdb_set_trace()
try: save_set_trace = pdb.set_trace
sys.stdout = self._fakeout
pdb.set_trace = set_trace pdb.set_trace = set_trace
try:
return self.__run(test, compileflags, out) return self.__run(test, compileflags, out)
finally: finally:
sys.stdout = saveout sys.stdout = save_stdout
pdb.set_trace = real_pdb_set_trace pdb.set_trace = save_set_trace
if clear_globs: if clear_globs:
test.globs.clear() test.globs.clear()
......
...@@ -1044,7 +1044,6 @@ def test_pdb_set_trace(): ...@@ -1044,7 +1044,6 @@ def test_pdb_set_trace():
... >>> calls_set_trace() ... >>> calls_set_trace()
... ''' ... '''
>>> test = parser.get_doctest(doc, globals(), "foo", "foo.py", 0) >>> test = parser.get_doctest(doc, globals(), "foo", "foo.py", 0)
>>> fake_stdin = tempfile.TemporaryFile(mode='w+') >>> fake_stdin = tempfile.TemporaryFile(mode='w+')
>>> fake_stdin.write('\n'.join([ >>> fake_stdin.write('\n'.join([
... 'up', # up out of pdb.set_trace ... 'up', # up out of pdb.set_trace
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment