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. ........
This commit is contained in:
parent
e33721e1b5
commit
5925085653
|
@ -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:
|
||||||
|
|
||||||
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
|
||||||
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`:
|
||||||
>>> 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
|
||||||
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
|
||||||
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.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue