1 new commit in pytest: https://bitbucket.org/pytest-dev/pytest/commits/219483189eb7/ Changeset: 219483189eb7 Branch: pytest-2.7 User: flub Date: 2015-04-30 01:31:12+00:00 Summary: Fix collapse false to look at unescaped braces only
Sometimes the repr of an object can contain the "\n{" sequence which is used as a formatting language, so they are escaped to "\\n{". But the collapse-false code needs to look for the real "\n{" token instead of simply "{" as otherwise it may get unbalanced braces from the object's repr (sometimes caused by the collapsing of long reprs by saferepr). Fixes issue #731. Affected #: 3 files diff -r 1fa7f14142010fb83f00dd46dd4dbc5daaeb4910 -r 219483189eb71cca40376c15fb6ffebd492a3d12 CHANGELOG --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,10 @@ 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 FixtureLookupError which would lead to to an internal error, obfuscating the original problem. Thanks talljosh for initial diff -r 1fa7f14142010fb83f00dd46dd4dbc5daaeb4910 -r 219483189eb71cca40376c15fb6ffebd492a3d12 _pytest/assertion/util.py --- a/_pytest/assertion/util.py +++ b/_pytest/assertion/util.py @@ -45,13 +45,15 @@ if where == -1: break level = 0 + prev_c = explanation[start] for i, c in enumerate(explanation[start:]): - if c == "{": + if prev_c + c == "\n{": level += 1 - elif c == "}": + elif prev_c + c == "\n}": level -= 1 if not level: break + prev_c = c else: raise AssertionError("unbalanced braces: %r" % (explanation,)) end = start + i diff -r 1fa7f14142010fb83f00dd46dd4dbc5daaeb4910 -r 219483189eb71cca40376c15fb6ffebd492a3d12 testing/test_assertrewrite.py --- a/testing/test_assertrewrite.py +++ b/testing/test_assertrewrite.py @@ -665,3 +665,24 @@ result.stdout.fnmatch_lines([ "* 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}') Repository URL: https://bitbucket.org/pytest-dev/pytest/ -- This is a commit notification from bitbucket.org. You are receiving this because you have the service enabled, addressing the recipient of this email. _______________________________________________ pytest-commit mailing list pytest-commit@python.org https://mail.python.org/mailman/listinfo/pytest-commit