diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2016-01-01 12:18:57 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2016-01-01 12:18:57 -0500 |
commit | 9edd625b8fdb09b5494471d460eba11148104e28 (patch) | |
tree | 783820c9479493c9f37586e64ae2f04a88a51c09 | |
parent | 334f95902f91e54e60600072d7e1816670627718 (diff) | |
download | python-coveragepy-git-9edd625b8fdb09b5494471d460eba11148104e28.tar.gz |
All test_arcs.py tests pass on py27 and py35
--HG--
branch : ast-branch
-rw-r--r-- | coverage/parser.py | 30 | ||||
-rw-r--r-- | tests/test_arcs.py | 25 |
2 files changed, 41 insertions, 14 deletions
diff --git a/coverage/parser.py b/coverage/parser.py index a5e12d35..b2618921 100644 --- a/coverage/parser.py +++ b/coverage/parser.py @@ -339,13 +339,27 @@ class AstArcAnalyzer(object): def line_for_node(self, node): """What is the right line number to use for this node?""" node_name = node.__class__.__name__ - if node_name == "Assign": - return node.value.lineno - elif node_name == "comprehension": - # TODO: is this how to get the line number for a comprehension? - return node.target.lineno - else: - return node.lineno + handler = getattr(self, "line_" + node_name, self.line_default) + return handler(node) + + def line_Assign(self, node): + return self.line_for_node(node.value) + + def line_Dict(self, node): + # Python 3.5 changed how dict literals are made. + if env.PYVERSION >= (3, 5): + return node.keys[0].lineno + return node.lineno + + def line_List(self, node): + return self.line_for_node(node.elts[0]) + + def line_comprehension(self, node): + # TODO: is this how to get the line number for a comprehension? + return node.target.lineno + + def line_default(self, node): + return node.lineno def collect_arcs(self): self.arcs = set() @@ -358,8 +372,6 @@ class AstArcAnalyzer(object): Return a set of line numbers, exits from this node to the next. """ node_name = node.__class__.__name__ - #print("Adding arcs for {}".format(node_name)) - handler = getattr(self, "handle_" + node_name, self.handle_default) return handler(node) diff --git a/tests/test_arcs.py b/tests/test_arcs.py index 3dc05c9c..a9533e78 100644 --- a/tests/test_arcs.py +++ b/tests/test_arcs.py @@ -804,7 +804,21 @@ class MiscArcTest(CoverageTest): } assert d """, - arcz=arcz) + arcz=arcz, + ) + self.check_coverage("""\ + d = \\ + { 'a': 2, + 'b': 3, + 'c': { + 'd': 5, + 'e': 6, + } + } + assert d + """, + arcz=".1 19 9-2", + ) def test_pathologically_long_code_object(self): # https://bitbucket.org/ned/coveragepy/issue/359 @@ -814,17 +828,18 @@ class MiscArcTest(CoverageTest): code = """\ data = [ """ + "".join("""\ - [{i}, {i}, {i}, {i}, {i}, {i}, {i}, {i}, {i}, {i}], + [ + {i}, {i}, {i}, {i}, {i}, {i}, {i}, {i}, {i}, {i}], """.format(i=i) for i in range(2000) ) + """\ ] - if __name__ == "__main__": - print(len(data)) + print(len(data)) """ self.check_coverage( code, - arcs=[(-1, 1), (1, 2004), (2004, -2), (2004, 2005), (2005, -2)], + arcs=[(-1, 1), (1, 4004), (4004, -3)], + arcs_missing=[], arcs_unpredicted=[], ) |