summaryrefslogtreecommitdiff
path: root/tests/test_parser.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_parser.py')
-rw-r--r--tests/test_parser.py37
1 files changed, 33 insertions, 4 deletions
diff --git a/tests/test_parser.py b/tests/test_parser.py
index 244d4c70..18621d15 100644
--- a/tests/test_parser.py
+++ b/tests/test_parser.py
@@ -1,17 +1,25 @@
-"""Tests for Coverage.py's code parsing."""
+# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
+# For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt
+
+"""Tests for coverage.py's code parsing."""
import textwrap
+
from tests.coveragetest import CoverageTest
+
+from coverage import env
from coverage.parser import PythonParser
class PythonParserTest(CoverageTest):
- """Tests for Coverage.py's Python code parsing."""
+ """Tests for coverage.py's Python code parsing."""
run_in_temp_dir = False
def parse_source(self, text):
"""Parse `text` as source, and return the `PythonParser` used."""
+ if env.PY2:
+ text = text.decode("ascii")
text = textwrap.dedent(text)
parser = PythonParser(text=text, exclude="nocover")
parser.parse_source()
@@ -34,6 +42,22 @@ class PythonParserTest(CoverageTest):
2:1, 3:1, 4:2, 5:1, 7:1, 9:1, 10:1
})
+ def test_generator_exit_counts(self):
+ # https://bitbucket.org/ned/coveragepy/issue/324/yield-in-loop-confuses-branch-coverage
+ parser = self.parse_source("""\
+ def gen(input):
+ for n in inp:
+ yield (i * 2 for i in range(n))
+
+ list(gen([1,2,3]))
+ """)
+ self.assertEqual(parser.exit_counts(), {
+ 1:1, # def -> list
+ 2:2, # for -> yield; for -> exit
+ 3:2, # yield -> for; genexp exit
+ 5:1, # list -> exit
+ })
+
def test_try_except(self):
parser = self.parse_source("""\
try:
@@ -94,10 +118,11 @@ class PythonParserTest(CoverageTest):
class ParserFileTest(CoverageTest):
- """Tests for Coverage.py's code parsing from files."""
+ """Tests for coverage.py's code parsing from files."""
def parse_file(self, filename):
"""Parse `text` as source, and return the `PythonParser` used."""
+ # pylint: disable=attribute-defined-outside-init
parser = PythonParser(filename=filename, exclude="nocover")
self.statements, self.excluded = parser.parse_source()
return parser
@@ -121,7 +146,11 @@ class ParserFileTest(CoverageTest):
fname = fname + ".py"
self.make_file(fname, text, newline=newline)
parser = self.parse_file(fname)
- self.assertEqual(parser.exit_counts(), counts)
+ self.assertEqual(
+ parser.exit_counts(),
+ counts,
+ "Wrong for %r" % fname
+ )
def test_encoding(self):
self.make_file("encoded.py", """\