]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Merged revisions 78493 via svnmerge from
authorFlorent Xicluna <florent.xicluna@gmail.com>
Sat, 27 Feb 2010 14:37:21 +0000 (14:37 +0000)
committerFlorent Xicluna <florent.xicluna@gmail.com>
Sat, 27 Feb 2010 14:37:21 +0000 (14:37 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r78493 | florent.xicluna | 2010-02-27 15:21:57 +0100 (sam, 27 fév 2010) | 11 lines

  For 3.x, the "backslashreplace" error handling is plugged on the "write" method.

  Recorded merge of revisions 78488 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r78488 | florent.xicluna | 2010-02-27 14:31:23 +0100 (sam, 27 fév 2010) | 2 lines

    Issue #1729305: Fix doctest to handle encode error with "backslashreplace".  It fixes #7667 too.
  ........
................

Lib/doctest.py
Lib/test/test_doctest.py
Misc/NEWS

index d6fb504eeaa2bf7107955f93d0c91a40ff03d357..18bdc0ae72a9764d7f190aab6feca10e5421a353 100644 (file)
@@ -218,8 +218,8 @@ def _load_testfile(filename, package, module_relative, encoding):
 
 def _indent(s, indent=4):
     """
-    Add the given number of space characters to the beginning every
-    non-blank line in `s`, and return the result.
+    Add the given number of space characters to the beginning of
+    every non-blank line in `s`, and return the result.
     """
     # This regexp matches the start of non-blank lines:
     return re.sub('(?m)^(?!$)', indent*' ', s)
@@ -1354,7 +1354,14 @@ class DocTestRunner:
 
         save_stdout = sys.stdout
         if out is None:
-            out = save_stdout.write
+            encoding = save_stdout.encoding
+            if encoding is None or encoding.lower() == 'utf-8':
+                out = save_stdout.write
+            else:
+                # Use backslashreplace error handling on write
+                def out(s):
+                    s = str(s.encode(encoding, 'backslashreplace'), encoding)
+                    save_stdout.write(s)
         sys.stdout = self._fakeout
 
         # Patch pdb.set_trace to restore sys.stdout during interactive
index 8dcc8a4f45854e2104e8cef59f8e130d54752aff..c9b1b855875920892601fab55244e56dc2179d98 100644 (file)
@@ -2147,6 +2147,13 @@ doctest examples in a given file.  In its simple invokation, it is
 called with the name of a file, which is taken to be relative to the
 calling module.  The return value is (#failures, #tests).
 
+We don't want `-v` in sys.argv for these tests.
+
+    >>> save_argv = sys.argv
+    >>> if '-v' in sys.argv:
+    ...     sys.argv = [arg for arg in save_argv if arg != '-v']
+
+
     >>> doctest.testfile('test_doctest.txt') # doctest: +ELLIPSIS
     **********************************************************************
     File "...", line 6, in test_doctest.txt
@@ -2286,6 +2293,28 @@ using the optional keyword argument `encoding`:
     >>> doctest.testfile('test_doctest4.txt', encoding='utf-8')
     TestResults(failed=0, attempted=2)
     >>> doctest.master = None  # Reset master.
+
+Test the verbose output:
+
+    >>> doctest.testfile('test_doctest4.txt', encoding='utf-8', verbose=True)
+    Trying:
+        'föö'
+    Expecting:
+        'f\xf6\xf6'
+    ok
+    Trying:
+        'bąr'
+    Expecting:
+        'b\u0105r'
+    ok
+    1 items passed all tests:
+       2 tests in test_doctest4.txt
+    2 tests in 1 items.
+    2 passed and 0 failed.
+    Test passed.
+    TestResults(failed=0, attempted=2)
+    >>> doctest.master = None  # Reset master.
+    >>> sys.argv = save_argv
 """
 
 def test_testmod(): r"""
@@ -2295,7 +2324,7 @@ fail with a UnicodeDecodeError because doctest tried to read the "source" lines
 out of the binary module.
 
     >>> import unicodedata
-    >>> doctest.testmod(unicodedata)
+    >>> doctest.testmod(unicodedata, verbose=False)
     TestResults(failed=0, attempted=0)
 """
 
index 9e0bc6ad0df2c02d7988a9c3280668f9e1702ea9..c42cef545c14e9af2876a366b8e53427ee32590e 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -92,6 +92,8 @@ Core and Builtins
 Library
 -------
 
+- Issue #1729305: Fix doctest to handle encode error with "backslashreplace".
+
 - Issue #691291: codecs.open() should not convert end of lines on reading and
   writing.