[py-svn] py-trunk commit 6fa2ed846f69: fixes issue113 - assertion represenation issue

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Thu Jul 29 12:57:28 CEST 2010


# HG changeset patch -- Bitbucket.org
# Project py-trunk
# URL http://bitbucket.org/hpk42/py-trunk/overview
# User holger krekel <holger at merlinux.eu>
# Date 1280400939 -7200
# Node ID 6fa2ed846f692ecceb8ef5b5b4292f65ba4bd0e0
# Parent  fa64ba4988bfdb0cf57f0332d1ff66cab04b374d
fixes issue113 - assertion represenation issue

--- a/testing/code/test_source.py
+++ b/testing/code/test_source.py
@@ -176,6 +176,13 @@ class TestSourceParsingAndCompiling:
             #x = s.deindent()
             assert str(s) == ass
 
+    def test_getstatementrange_triple_quoted(self):
+        #print str(self.source)
+        source = Source("""'''
+        '''""")
+        s = source.getstatement(1)
+        assert eval(str(s))
+
     def test_getstatementrange_within_constructs(self):
         source = Source("""\
             try:

--- a/testing/plugin/test_pytest_assertion.py
+++ b/testing/plugin/test_pytest_assertion.py
@@ -9,6 +9,17 @@ def test_functional(testdir):
     result = testdir.runpytest("--no-assert")
     assert "3 == 4" not in result.stdout.str()
 
+def test_triple_quoted_string_issue113(testdir):
+    testdir.makepyfile("""
+        def test_hello():
+            assert "" == '''
+    '''""")
+    result = testdir.runpytest("--fulltrace")
+    result.stdout.fnmatch_lines([
+        "*1 failed*",
+    ])
+    assert 'SyntaxError' not in result.stdout.str()
+
 def test_traceback_failure(testdir):
     p1 = testdir.makepyfile("""
         def g():

--- a/py/_code/source.py
+++ b/py/_code/source.py
@@ -125,16 +125,13 @@ class Source(object):
             try:
                 compile_command(trysource)
             except (SyntaxError, OverflowError, ValueError):
-                pass
-            else:
-                break   # got a valid or incomplete statement
+                continue
 
-        # 2. find the end of the statement
-        for end in range(lineno+1, len(self)+1):
-            trysource = self[start:end]
-            if trysource.isparseable():
-                break
-
+            # 2. find the end of the statement
+            for end in range(lineno+1, len(self)+1):
+                trysource = self[start:end]
+                if trysource.isparseable():
+                    return start, end
         return start, end
 
     def getblockend(self, lineno):

--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,8 @@
 Changes between 1.3.2 and 1.3.3a1
 ==================================================
 
+- fix issue113: assertion representation problem with triple-quoted strings 
+  (and possibly other cases)
 - make conftest loading detect that a conftest file with the same 
   content was already loaded, avoids surprises in nested directory structures
   that can be produced e.g. by Hudson. It alleviates the need to use



More information about the pytest-commit mailing list