Commit 25fbb891 authored by Georg Brandl's avatar Georg Brandl

Issue #8048: Prevent doctests from failing when sys.displayhook has

been reassigned.
parent 46b9afc8
...@@ -1379,12 +1379,17 @@ class DocTestRunner: ...@@ -1379,12 +1379,17 @@ class DocTestRunner:
self.save_linecache_getlines = linecache.getlines self.save_linecache_getlines = linecache.getlines
linecache.getlines = self.__patched_linecache_getlines linecache.getlines = self.__patched_linecache_getlines
# Make sure sys.displayhook just prints the value to stdout
save_displayhook = sys.displayhook
sys.displayhook = sys.__displayhook__
try: try:
return self.__run(test, compileflags, out) return self.__run(test, compileflags, out)
finally: finally:
sys.stdout = save_stdout sys.stdout = save_stdout
pdb.set_trace = save_set_trace pdb.set_trace = save_set_trace
linecache.getlines = self.save_linecache_getlines linecache.getlines = self.save_linecache_getlines
sys.displayhook = save_displayhook
if clear_globs: if clear_globs:
test.globs.clear() test.globs.clear()
import builtins import builtins
......
...@@ -979,6 +979,35 @@ unexpected exception: ...@@ -979,6 +979,35 @@ unexpected exception:
... ...
ZeroDivisionError: integer division or modulo by zero ZeroDivisionError: integer division or modulo by zero
TestResults(failed=1, attempted=1) TestResults(failed=1, attempted=1)
"""
def displayhook(): r"""
Test that changing sys.displayhook doesn't matter for doctest.
>>> import sys
>>> orig_displayhook = sys.displayhook
>>> def my_displayhook(x):
... print('hi!')
>>> sys.displayhook = my_displayhook
>>> def f():
... '''
... >>> 3
... 3
... '''
>>> test = doctest.DocTestFinder().find(f)[0]
>>> r = doctest.DocTestRunner(verbose=False).run(test)
>>> post_displayhook = sys.displayhook
We need to restore sys.displayhook now, so that we'll be able to test
results.
>>> sys.displayhook = orig_displayhook
Ok, now we can check that everything is ok.
>>> r
TestResults(failed=0, attempted=1)
>>> post_displayhook is my_displayhook
True
""" """
def optionflags(): r""" def optionflags(): r"""
Tests of `DocTestRunner`'s option flag handling. Tests of `DocTestRunner`'s option flag handling.
......
...@@ -475,6 +475,9 @@ C-API ...@@ -475,6 +475,9 @@ C-API
Library Library
------- -------
- Issue #8048: Prevent doctests from failing when sys.displayhook has
been reassigned.
- Issue #8015: In pdb, do not crash when an empty line is entered as - Issue #8015: In pdb, do not crash when an empty line is entered as
a breakpoint command. a breakpoint command.
......
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