From 6c542b731cfe3e17991643bfc41bb785331e7e5c Mon Sep 17 00:00:00 2001 From: Tim Peters Date: Mon, 9 Aug 2004 16:43:36 +0000 Subject: Edward's latest checkins somehow managed to wipe out my previous latest checkins. Reapplying the latter changes. --- Lib/doctest.py | 31 +++++++++++++++++-------------- Lib/test/test_doctest.py | 1 - 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/Lib/doctest.py b/Lib/doctest.py index 34db93a..80a61c5 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -1259,27 +1259,30 @@ class DocTestRunner: if compileflags is None: compileflags = _extract_future_flags(test.globs) + save_stdout = sys.stdout if out is None: - out = sys.stdout.write - saveout = sys.stdout - - # Note that don't save away the previous pdb.set_trace. Rather, - # we safe pdb.set_trace on import (see import section above). - # We then call and restore that original cersion. We do it this - # way to make this feature testable. If we kept and called the - # previous version, we'd end up restoring the original stdout, - # which is not what we want. + out = save_stdout.write + sys.stdout = self._fakeout + + # Patch pdb.set_trace to restore sys.stdout, so that interactive + # debugging output is visible (not still redirected to self._fakeout). + # Note that we run "the real" pdb.set_trace (captured at doctest + # import time) in our replacement. Because the current run() may + # run another doctest (and so on), the current pdb.set_trace may be + # 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(): - sys.stdout = saveout + sys.stdout = save_stdout real_pdb_set_trace() + save_set_trace = pdb.set_trace + pdb.set_trace = set_trace try: - sys.stdout = self._fakeout - pdb.set_trace = set_trace return self.__run(test, compileflags, out) finally: - sys.stdout = saveout - pdb.set_trace = real_pdb_set_trace + sys.stdout = save_stdout + pdb.set_trace = save_set_trace if clear_globs: test.globs.clear() diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py index 50da872..7e583c5 100644 --- a/Lib/test/test_doctest.py +++ b/Lib/test/test_doctest.py @@ -1044,7 +1044,6 @@ def test_pdb_set_trace(): ... >>> calls_set_trace() ... ''' >>> test = parser.get_doctest(doc, globals(), "foo", "foo.py", 0) - >>> fake_stdin = tempfile.TemporaryFile(mode='w+') >>> fake_stdin.write('\n'.join([ ... 'up', # up out of pdb.set_trace -- cgit v0.12