diff options
author | Mickie Betz <mbetz08@cmc.edu> | 2015-04-14 16:53:30 -0400 |
---|---|---|
committer | Mickie Betz <mbetz08@cmc.edu> | 2015-04-14 16:53:30 -0400 |
commit | d4f1990c537d761989de342a3dd682e5df46c51c (patch) | |
tree | 8445942a9f88bfd1a80ea728ee4732ce380a1dfb | |
parent | e036d40450fd3a30a71a81f63054597bbfd0f168 (diff) | |
download | python-coveragepy-d4f1990c537d761989de342a3dd682e5df46c51c.tar.gz |
Including generator yield statements when doing end of code calculations issue 324
-rw-r--r-- | coverage/parser.py | 2 | ||||
-rw-r--r-- | tests/test_parser.py | 13 |
2 files changed, 14 insertions, 1 deletions
diff --git a/coverage/parser.py b/coverage/parser.py index f488367..91b685c 100644 --- a/coverage/parser.py +++ b/coverage/parser.py @@ -308,7 +308,7 @@ OPS_CODE_END = _opcode_set('RETURN_VALUE') # Opcodes that unconditionally end the code chunk. OPS_CHUNK_END = _opcode_set( 'JUMP_ABSOLUTE', 'JUMP_FORWARD', 'RETURN_VALUE', 'RAISE_VARARGS', - 'BREAK_LOOP', 'CONTINUE_LOOP', + 'BREAK_LOOP', 'CONTINUE_LOOP', 'YIELD_VALUE', ) # Opcodes that unconditionally begin a new code chunk. By starting new chunks diff --git a/tests/test_parser.py b/tests/test_parser.py index 244d4c7..a39820e 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -34,6 +34,19 @@ class PythonParserTest(CoverageTest): 2:1, 3:1, 4:2, 5:1, 7:1, 9:1, 10:1 }) + def test_generator_exit_counts(self): + parser = self.parse_source("""\ + # generators yield lines should only have one exit count + 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(), { + 2:1, 3:2, 4:1, 6:1 + }) + def test_try_except(self): parser = self.parse_source("""\ try: |