From 61c87dc56663cdb7d31b24c202ea54ecf3e28522 Mon Sep 17 00:00:00 2001 From: Tom Viner Date: Fri, 24 Jun 2016 12:44:06 +0200 Subject: [PATCH] Fixes #1503 no longer collapse false explanations --- _pytest/assertion/util.py | 33 --------------------------------- testing/test_assertrewrite.py | 34 ++++++++++++++++++++-------------- 2 files changed, 20 insertions(+), 47 deletions(-) diff --git a/_pytest/assertion/util.py b/_pytest/assertion/util.py index 8bf425caf48..2481cf34ccd 100644 --- a/_pytest/assertion/util.py +++ b/_pytest/assertion/util.py @@ -38,44 +38,11 @@ def format_explanation(explanation): displaying diffs. """ explanation = ecu(explanation) - explanation = _collapse_false(explanation) lines = _split_explanation(explanation) result = _format_lines(lines) return u('\n').join(result) -def _collapse_false(explanation): - """Collapse expansions of False - - So this strips out any "assert False\n{where False = ...\n}" - blocks. - """ - where = 0 - while True: - start = where = explanation.find("False\n{False = ", where) - if where == -1: - break - level = 0 - prev_c = explanation[start] - for i, c in enumerate(explanation[start:]): - if prev_c + c == "\n{": - level += 1 - elif prev_c + c == "\n}": - level -= 1 - if not level: - break - prev_c = c - else: - raise AssertionError("unbalanced braces: %r" % (explanation,)) - end = start + i - where = end - if explanation[end - 1] == '\n': - explanation = (explanation[:start] + explanation[start+15:end-1] + - explanation[end+1:]) - where -= 17 - return explanation - - def _split_explanation(explanation): """Return a list of individual lines in the explanation diff --git a/testing/test_assertrewrite.py b/testing/test_assertrewrite.py index f43c424ca94..a47d8a75f96 100644 --- a/testing/test_assertrewrite.py +++ b/testing/test_assertrewrite.py @@ -213,10 +213,12 @@ def x(): return False def f(): assert x() and x() - assert getmsg(f, {"x" : x}) == "assert (x())" + assert getmsg(f, {"x" : x}) == """assert (False) + + where False = x()""" def f(): assert False or x() - assert getmsg(f, {"x" : x}) == "assert (False or x())" + assert getmsg(f, {"x" : x}) == """assert (False or False) + + where False = x()""" def f(): assert 1 in {} and 2 in {} assert getmsg(f) == "assert (1 in {})" @@ -299,27 +301,34 @@ def g(a=42, *args, **kwargs): ns = {"g" : g} def f(): assert g() - assert getmsg(f, ns) == """assert g()""" + assert getmsg(f, ns) == """assert False + + where False = g()""" def f(): assert g(1) - assert getmsg(f, ns) == """assert g(1)""" + assert getmsg(f, ns) == """assert False + + where False = g(1)""" def f(): assert g(1, 2) - assert getmsg(f, ns) == """assert g(1, 2)""" + assert getmsg(f, ns) == """assert False + + where False = g(1, 2)""" def f(): assert g(1, g=42) - assert getmsg(f, ns) == """assert g(1, g=42)""" + assert getmsg(f, ns) == """assert False + + where False = g(1, g=42)""" def f(): assert g(1, 3, g=23) - assert getmsg(f, ns) == """assert g(1, 3, g=23)""" + assert getmsg(f, ns) == """assert False + + where False = g(1, 3, g=23)""" def f(): seq = [1, 2, 3] assert g(*seq) - assert getmsg(f, ns) == """assert g(*[1, 2, 3])""" + assert getmsg(f, ns) == """assert False + + where False = g(*[1, 2, 3])""" def f(): x = "a" assert g(**{x : 2}) - assert getmsg(f, ns) == """assert g(**{'a': 2})""" + assert getmsg(f, ns) == """assert False + + where False = g(**{'a': 2})""" def test_attribute(self): class X(object): @@ -332,7 +341,8 @@ def f(): def f(): x.a = False # noqa assert x.a # noqa - assert getmsg(f, ns) == """assert x.a""" + assert getmsg(f, ns) == """assert False + + where False = x.a""" def test_comparisons(self): def f(): @@ -710,7 +720,3 @@ def test_long_repr(): """) 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}')