summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2016-01-01 12:18:57 -0500
committerNed Batchelder <ned@nedbatchelder.com>2016-01-01 12:18:57 -0500
commit9edd625b8fdb09b5494471d460eba11148104e28 (patch)
tree783820c9479493c9f37586e64ae2f04a88a51c09
parent334f95902f91e54e60600072d7e1816670627718 (diff)
downloadpython-coveragepy-git-9edd625b8fdb09b5494471d460eba11148104e28.tar.gz
All test_arcs.py tests pass on py27 and py35
--HG-- branch : ast-branch
-rw-r--r--coverage/parser.py30
-rw-r--r--tests/test_arcs.py25
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=[],
)