reencode non-ascii python2 assertion reprs, fixes #877
i decided against using a warning since the problem goes away with python3 the support code can be removed once we drop python2 in 10 years or so
This commit is contained in:
parent
f02d9425f9
commit
49c99a41ea
|
@ -193,6 +193,9 @@
|
||||||
2.7.3 (compared to 2.7.2)
|
2.7.3 (compared to 2.7.2)
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
|
- fix issue 877: propperly handle assertion explanations with non-ascii repr
|
||||||
|
Thanks Mathieu Agopian for the report
|
||||||
|
|
||||||
- Allow 'dev', 'rc', or other non-integer version strings in `importorskip`.
|
- Allow 'dev', 'rc', or other non-integer version strings in `importorskip`.
|
||||||
Thanks to Eric Hunsberger for the PR.
|
Thanks to Eric Hunsberger for the PR.
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,14 @@ def assertrepr_compare(config, op, left, right):
|
||||||
width = 80 - 15 - len(op) - 2 # 15 chars indentation, 1 space around op
|
width = 80 - 15 - len(op) - 2 # 15 chars indentation, 1 space around op
|
||||||
left_repr = py.io.saferepr(left, maxsize=int(width/2))
|
left_repr = py.io.saferepr(left, maxsize=int(width/2))
|
||||||
right_repr = py.io.saferepr(right, maxsize=width-len(left_repr))
|
right_repr = py.io.saferepr(right, maxsize=width-len(left_repr))
|
||||||
summary = u('%s %s %s') % (left_repr, op, right_repr)
|
|
||||||
|
# the reencoding is needed for python2 repr
|
||||||
|
# with non-ascii characters (see isssue 877)
|
||||||
|
summary = u('%s %s %s') % (
|
||||||
|
u(left_repr, 'utf-8', 'replace'),
|
||||||
|
op,
|
||||||
|
u(right_repr, 'utf-8', 'replace'),
|
||||||
|
)
|
||||||
|
|
||||||
issequence = lambda x: (isinstance(x, (list, tuple, Sequence))
|
issequence = lambda x: (isinstance(x, (list, tuple, Sequence))
|
||||||
and not isinstance(x, basestring))
|
and not isinstance(x, basestring))
|
||||||
|
|
|
@ -231,6 +231,17 @@ class TestAssert_reprcompare:
|
||||||
assert expl[1] == py.builtin._totext('- £€', 'utf-8')
|
assert expl[1] == py.builtin._totext('- £€', 'utf-8')
|
||||||
assert expl[2] == py.builtin._totext('+ £', 'utf-8')
|
assert expl[2] == py.builtin._totext('+ £', 'utf-8')
|
||||||
|
|
||||||
|
def test_nonascii_text(self):
|
||||||
|
"""
|
||||||
|
:issue: 877
|
||||||
|
non ascii python2 str caused a UnicodeDecodeError
|
||||||
|
"""
|
||||||
|
class A(str):
|
||||||
|
def __repr__(self):
|
||||||
|
return '\xff'
|
||||||
|
expl = callequal(A(), '1')
|
||||||
|
assert expl
|
||||||
|
|
||||||
def test_mojibake(self):
|
def test_mojibake(self):
|
||||||
# issue 429
|
# issue 429
|
||||||
left = 'e'
|
left = 'e'
|
||||||
|
|
Loading…
Reference in New Issue