Merge fix for issue 731 from pytest-2.7

This commit is contained in:
Floris Bruynooghe 2015-04-30 21:13:03 +01:00
commit aa2ffb9805
3 changed files with 29 additions and 2 deletions

View File

@ -55,6 +55,10 @@
2.7.1.dev (compared to 2.7.0) 2.7.1.dev (compared to 2.7.0)
----------------------------- -----------------------------
- fix issue731: do not get confused by the braces which may be present
and unbalanced in an object's repr while collapsing False
explanations. Thanks Carl Meyer for the report and test case.
- fix issue553: properly handling inspect.getsourcelines failures in - fix issue553: properly handling inspect.getsourcelines failures in
FixtureLookupError which would lead to to an internal error, FixtureLookupError which would lead to to an internal error,
obfuscating the original problem. Thanks talljosh for initial obfuscating the original problem. Thanks talljosh for initial

View File

@ -45,13 +45,15 @@ def _collapse_false(explanation):
if where == -1: if where == -1:
break break
level = 0 level = 0
prev_c = explanation[start]
for i, c in enumerate(explanation[start:]): for i, c in enumerate(explanation[start:]):
if c == "{": if prev_c + c == "\n{":
level += 1 level += 1
elif c == "}": elif prev_c + c == "\n}":
level -= 1 level -= 1
if not level: if not level:
break break
prev_c = c
else: else:
raise AssertionError("unbalanced braces: %r" % (explanation,)) raise AssertionError("unbalanced braces: %r" % (explanation,))
end = start + i end = start + i

View File

@ -663,3 +663,24 @@ class TestAssertionRewriteHookDetails(object):
result.stdout.fnmatch_lines([ result.stdout.fnmatch_lines([
"* 1 passed*", "* 1 passed*",
]) ])
def test_issue731(testdir):
testdir.makepyfile("""
class LongReprWithBraces(object):
def __repr__(self):
return 'LongReprWithBraces({' + ('a' * 80) + '}' + ('a' * 120) + ')'
def some_method(self):
return False
def test_long_repr():
obj = LongReprWithBraces()
assert obj.some_method()
""")
result = testdir.runpytest()
assert 'unbalanced braces' not in result.stdout.str()
def test_collapse_false_unbalanced_braces():
util._collapse_false('some text{ False\n{False = some more text\n}')