Merged 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:
Florent Xicluna 2010-02-27 14:34:41 +00:00
parent 04eef97a8a
commit b6d80cc893
3 changed files with 55 additions and 3 deletions

View File

@ -218,11 +218,18 @@ def _load_testfile(filename, package, module_relative):
return file_contents.replace(os.linesep, '\n'), filename
return open(filename).read(), filename
# Use sys.stdout encoding for ouput.
_encoding = getattr(sys.__stdout__, 'encoding', None) or 'utf-8'
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.
If the string `s` is Unicode, it is encoded using the stdout
encoding and the `backslashreplace` error handler.
"""
if isinstance(s, unicode):
s = s.encode(_encoding, 'backslashreplace')
# This regexp matches the start of non-blank lines:
return re.sub('(?m)^(?!$)', indent*' ', s)

View File

@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
"""
Test script for doctest.
"""
@ -372,7 +373,7 @@ We'll simulate a __file__ attr that ends in pyc:
>>> tests = finder.find(sample_func)
>>> print tests # doctest: +ELLIPSIS
[<DocTest sample_func from ...:16 (1 example)>]
[<DocTest sample_func from ...:17 (1 example)>]
The exact name depends on how test_doctest was invoked, so allow for
leading path components.
@ -2143,6 +2144,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
@ -2282,6 +2290,41 @@ using the optional keyword argument `encoding`:
>>> doctest.testfile('test_doctest4.txt', encoding='utf-8')
TestResults(failed=0, attempted=4)
>>> doctest.master = None # Reset master.
Switch the module encoding to 'utf-8' to test the verbose output without
bothering with the current sys.stdout encoding.
>>> doctest._encoding, saved_encoding = 'utf-8', doctest._encoding
>>> doctest.testfile('test_doctest4.txt', encoding='utf-8', verbose=True)
Trying:
u'föö'
Expecting:
u'f\xf6\xf6'
ok
Trying:
u'bąr'
Expecting:
u'b\u0105r'
ok
Trying:
'föö'
Expecting:
'f\xc3\xb6\xc3\xb6'
ok
Trying:
'bąr'
Expecting:
'b\xc4\x85r'
ok
1 items passed all tests:
4 tests in test_doctest4.txt
4 tests in 1 items.
4 passed and 0 failed.
Test passed.
TestResults(failed=0, attempted=4)
>>> doctest._encoding = saved_encoding
>>> doctest.master = None # Reset master.
>>> sys.argv = save_argv
"""
# old_test1, ... used to live in doctest.py, but cluttered it. Note

View File

@ -74,6 +74,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.