summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.rst4
-rw-r--r--coverage/phystokens.py3
-rw-r--r--coverage/python.py2
-rw-r--r--tests/test_coverage.py16
4 files changed, 23 insertions, 2 deletions
diff --git a/CHANGES.rst b/CHANGES.rst
index 20391dd9..a7fbf430 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -22,9 +22,13 @@ Unreleased
- Non-ascii characters in regexes in the configuration file worked in 3.7, but
stopped working in 4.0. Now they work again, closing `issue 455`_.
+- Form-feed characters would prevent accurate determination of the beginning of
+ statements in the rest of the file. This is now fixed, closing `issue 461`_.
+
.. _issue 131: https://bitbucket.org/ned/coveragepy/issues/131/pragma-on-a-decorator-line-should-affect
.. _issue 453: https://bitbucket.org/ned/coveragepy/issues/453/source-code-encoding-can-only-be-specified
.. _issue 455: https://bitbucket.org/ned/coveragepy/issues/455/unusual-exclusions-stopped-working-in
+.. _issue 461: https://bitbucket.org/ned/coveragepy/issues/461/multiline-asserts-need-too-many-pragma
Version 4.0.3 --- 2015-11-24
diff --git a/coverage/phystokens.py b/coverage/phystokens.py
index 5aa3402c..5e80ed54 100644
--- a/coverage/phystokens.py
+++ b/coverage/phystokens.py
@@ -92,8 +92,7 @@ def source_token_lines(source):
line = []
col = 0
- # The \f is because of http://bugs.python.org/issue19035
- source = source.expandtabs(8).replace('\r\n', '\n').replace('\f', ' ')
+ source = source.expandtabs(8).replace('\r\n', '\n')
tokgen = generate_tokens(source)
for ttype, ttext, (_, scol), (_, ecol), _ in phys_tokens(tokgen):
diff --git a/coverage/python.py b/coverage/python.py
index 5e563828..07d23472 100644
--- a/coverage/python.py
+++ b/coverage/python.py
@@ -50,6 +50,8 @@ def get_python_source(filename):
# Couldn't find source.
raise NoSource("No source for code: '%s'." % filename)
+ # Replace \f because of http://bugs.python.org/issue19035
+ source = source.replace(b'\f', b' ')
source = source.decode(source_encoding(source), "replace")
# Python code should always end with a line with a newline.
diff --git a/tests/test_coverage.py b/tests/test_coverage.py
index ab4faf55..081fe11b 100644
--- a/tests/test_coverage.py
+++ b/tests/test_coverage.py
@@ -1490,6 +1490,22 @@ class ExcludeTest(CoverageTest):
[2, 4], "", excludes=['✘cover']
)
+ def test_formfeed(self):
+ # https://bitbucket.org/ned/coveragepy/issues/461/multiline-asserts-need-too-many-pragma
+ self.check_coverage("""\
+ x = 1
+ assert len([]) == 0, (
+ "This won't happen %s" % ("hello",)
+ )
+ \f
+ x = 6
+ assert len([]) == 0, (
+ "This won't happen %s" % ("hello",)
+ )
+ """,
+ [1, 6], "", excludes=['assert'],
+ )
+
class Py24Test(CoverageTest):
"""Tests of new syntax in Python 2.4."""