Kaydet (Commit) 59250856 authored tarafından Florent Xicluna's avatar Florent Xicluna

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.
........
üst e33721e1
...@@ -218,8 +218,8 @@ def _load_testfile(filename, package, module_relative, encoding): ...@@ -218,8 +218,8 @@ def _load_testfile(filename, package, module_relative, encoding):
def _indent(s, indent=4): def _indent(s, indent=4):
""" """
Add the given number of space characters to the beginning every Add the given number of space characters to the beginning of
non-blank line in `s`, and return the result. every non-blank line in `s`, and return the result.
""" """
# This regexp matches the start of non-blank lines: # This regexp matches the start of non-blank lines:
return re.sub('(?m)^(?!$)', indent*' ', s) return re.sub('(?m)^(?!$)', indent*' ', s)
...@@ -1354,7 +1354,14 @@ class DocTestRunner: ...@@ -1354,7 +1354,14 @@ class DocTestRunner:
save_stdout = sys.stdout save_stdout = sys.stdout
if out is None: 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 sys.stdout = self._fakeout
# Patch pdb.set_trace to restore sys.stdout during interactive # Patch pdb.set_trace to restore sys.stdout during interactive
......
...@@ -2149,6 +2149,13 @@ doctest examples in a given file. In its simple invokation, it is ...@@ -2149,6 +2149,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 called with the name of a file, which is taken to be relative to the
calling module. The return value is (#failures, #tests). 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 >>> doctest.testfile('test_doctest.txt') # doctest: +ELLIPSIS
********************************************************************** **********************************************************************
File "...", line 6, in test_doctest.txt File "...", line 6, in test_doctest.txt
...@@ -2288,6 +2295,28 @@ using the optional keyword argument `encoding`: ...@@ -2288,6 +2295,28 @@ using the optional keyword argument `encoding`:
>>> doctest.testfile('test_doctest4.txt', encoding='utf-8') >>> doctest.testfile('test_doctest4.txt', encoding='utf-8')
TestResults(failed=0, attempted=2) TestResults(failed=0, attempted=2)
>>> doctest.master = None # Reset master. >>> 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""" def test_testmod(): r"""
...@@ -2297,7 +2326,7 @@ fail with a UnicodeDecodeError because doctest tried to read the "source" lines ...@@ -2297,7 +2326,7 @@ fail with a UnicodeDecodeError because doctest tried to read the "source" lines
out of the binary module. out of the binary module.
>>> import unicodedata >>> import unicodedata
>>> doctest.testmod(unicodedata) >>> doctest.testmod(unicodedata, verbose=False)
TestResults(failed=0, attempted=0) TestResults(failed=0, attempted=0)
""" """
......
...@@ -260,6 +260,8 @@ C-API ...@@ -260,6 +260,8 @@ C-API
Library Library
------- -------
- Issue #1729305: Fix doctest to handle encode error with "backslashreplace".
- Issue #691291: codecs.open() should not convert end of lines on reading and - Issue #691291: codecs.open() should not convert end of lines on reading and
writing. writing.
......
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