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

Reply via email to