diff options
author | Florent Xicluna <florent.xicluna@gmail.com> | 2010-02-27 14:21:57 (GMT) |
---|---|---|
committer | Florent Xicluna <florent.xicluna@gmail.com> | 2010-02-27 14:21:57 (GMT) |
commit | 5925085653cc9ef28dbf36859b9f208ef80b57b4 (patch) | |
tree | ad6c11492804ff3b4090122c4feb6cce3159c4ac /Lib | |
parent | e33721e1b54a2af5b4547e56d9349930260b7235 (diff) | |
download | cpython-5925085653cc9ef28dbf36859b9f208ef80b57b4.zip cpython-5925085653cc9ef28dbf36859b9f208ef80b57b4.tar.gz cpython-5925085653cc9ef28dbf36859b9f208ef80b57b4.tar.bz2 |
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.
........
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/doctest.py | 13 | ||||
-rw-r--r-- | Lib/test/test_doctest.py | 31 |
2 files changed, 40 insertions, 4 deletions
diff --git a/Lib/doctest.py b/Lib/doctest.py index eac4378..3b32004 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -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 diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py index e4ac830..17842c9 100644 --- a/Lib/test/test_doctest.py +++ b/Lib/test/test_doctest.py @@ -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 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 @@ -2288,6 +2295,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""" @@ -2297,7 +2326,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) """ |