diff options
author | Tim Peters <tim.peters@gmail.com> | 2004-08-09 15:43:47 (GMT) |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2004-08-09 15:43:47 (GMT) |
commit | 413ced6c226b5a89c45cf2f4da79126f75cb200b (patch) | |
tree | fa16fdd9798163303b639e008cef6b84766248e1 /Lib/doctest.py | |
parent | 0d2a75c7b867fca895ac420db3585297c51864c7 (diff) | |
download | cpython-413ced6c226b5a89c45cf2f4da79126f75cb200b.zip cpython-413ced6c226b5a89c45cf2f4da79126f75cb200b.tar.gz cpython-413ced6c226b5a89c45cf2f4da79126f75cb200b.tar.bz2 |
This started as a spelling and whitespace cleanup. The comment for
the set_trace fiddling didn't make sense to me, and I ended up reworking
that part of the code. We really do want to save and restore
pdb.set_trace, so that each dynamically nested level of doctest gets
sys.stdout fiddled to what's appropriate for *it*. The only "trick"
really needed is that these layers of set_trace wrappers each call the
original pdb.set_trace (instead of the current pdb.set_trace).
Diffstat (limited to 'Lib/doctest.py')
-rw-r--r-- | Lib/doctest.py | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/Lib/doctest.py b/Lib/doctest.py index 5dd0bae..724a3ad 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -1254,27 +1254,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() |