Kaydet (Commit) 1f05e2e9 authored tarafından Georg Brandl's avatar Georg Brandl

#8471: reset _SpoofOut.buf to an empty string when truncating; if Unicode had…

#8471: reset _SpoofOut.buf to an empty string when truncating; if Unicode had been output previously, it had been coerced to a Unicode string, potentially making subsequent prints behave differently or raise UnicodeErrors.
üst 58f15b66
......@@ -263,6 +263,9 @@ class _SpoofOut(StringIO):
StringIO.truncate(self, size)
if hasattr(self, "softspace"):
del self.softspace
if not self.buf:
# Reset it to an empty string, to make sure it's not unicode.
self.buf = ''
# Worst-case linear-time ellipsis matching.
def _ellipsis_match(want, got):
......
......@@ -1581,7 +1581,33 @@ source:
>>> test = doctest.DocTestParser().get_doctest(s, {}, 's', 's.py', 0)
Traceback (most recent call last):
ValueError: line 0 of the doctest for s has an option directive on a line with no example: '# doctest: +ELLIPSIS'
"""
"""
def test_unicode_output(self): r"""
Check that unicode output works:
>>> u'\xe9'
u'\xe9'
If we return unicode, SpoofOut's buf variable becomes automagically
converted to unicode. This means all subsequent output becomes converted
to unicode, and if the output contains non-ascii characters that failed.
It used to be that this state change carried on between tests, meaning
tests would fail if unicode has been output previously in the testrun.
This test tests that this is no longer so:
>>> print u'abc'
abc
And then return a string with non-ascii characters:
>>> print u'\xe9'.encode('utf-8')
é
"""
def test_testsource(): r"""
Unit tests for `testsource()`.
......
......@@ -18,6 +18,9 @@ Core and Builtins
Library
-------
- Issue #8471: In doctest, properly reset the output stream to an empty
string when Unicode was previously output.
- Issue #8620: when a Cmd is fed input that reaches EOF without a final
newline, it no longer truncates the last character of the last command line.
......
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