[Python-checkins] r83268 - in python/branches/py3k: Lib/doctest.py Lib/test/test_doctest.py Misc/NEWS

georg.brandl python-checkins at python.org
Fri Jul 30 11:23:23 CEST 2010


Author: georg.brandl
Date: Fri Jul 30 11:23:23 2010
New Revision: 83268

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

Modified:
   python/branches/py3k/Lib/doctest.py
   python/branches/py3k/Lib/test/test_doctest.py
   python/branches/py3k/Misc/NEWS

Modified: python/branches/py3k/Lib/doctest.py
==============================================================================
--- python/branches/py3k/Lib/doctest.py	(original)
+++ python/branches/py3k/Lib/doctest.py	Fri Jul 30 11:23:23 2010
@@ -1379,12 +1379,17 @@
         self.save_linecache_getlines = 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:
             return self.__run(test, compileflags, out)
         finally:
             sys.stdout = save_stdout
             pdb.set_trace = save_set_trace
             linecache.getlines = self.save_linecache_getlines
+            sys.displayhook = save_displayhook
             if clear_globs:
                 test.globs.clear()
                 import builtins

Modified: python/branches/py3k/Lib/test/test_doctest.py
==============================================================================
--- python/branches/py3k/Lib/test/test_doctest.py	(original)
+++ python/branches/py3k/Lib/test/test_doctest.py	Fri Jul 30 11:23:23 2010
@@ -980,6 +980,35 @@
         ZeroDivisionError: integer division or modulo by zero
     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"""
 Tests of `DocTestRunner`'s option flag handling.
 

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Fri Jul 30 11:23:23 2010
@@ -475,6 +475,9 @@
 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
   a breakpoint command.
 


More information about the Python-checkins mailing list