summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2015-07-19 16:50:47 -0400
committerNed Batchelder <ned@nedbatchelder.com>2015-07-19 16:50:47 -0400
commit8eec054f2e2c7b3f3669f28d382ddcfec39d48f0 (patch)
treeb1b53f3c6a5d28c6eb52c39849445acdf71cebfc
parentb2d9f2638cd7e53687401ea89ebaa446e6762512 (diff)
downloadpython-coveragepy-git-8eec054f2e2c7b3f3669f28d382ddcfec39d48f0.tar.gz
CoverageData.lines() and CoverageData.arcs() now distinguish between unmeasured, and measured, but nothing ran
-rw-r--r--coverage/data.py27
-rw-r--r--coverage/results.py4
-rw-r--r--tests/test_data.py16
3 files changed, 38 insertions, 9 deletions
diff --git a/coverage/data.py b/coverage/data.py
index 981edf8d..1c6a283a 100644
--- a/coverage/data.py
+++ b/coverage/data.py
@@ -86,17 +86,30 @@ class CoverageData(object):
self._plugins = {}
def lines(self, filename):
- """Get the list of lines executed for a file."""
+ """Get the list of lines executed for a file.
+
+ If the file was not measured, returns None. A file might be measured,
+ and have no lines executed, in which case an empty list is returned.
+
+ """
if self._arcs:
- arcs = self._arcs.get(filename) or {}
- return [s for s, __ in arcs if s > 0]
+ if filename in self._arcs:
+ return [s for s, __ in self._arcs[filename] if s > 0]
else:
- lines = self._lines.get(filename) or {}
- return list(lines)
+ if filename in self._lines:
+ return list(self._lines[filename])
+ return None
def arcs(self, filename):
- """Get the list of arcs executed for a file."""
- return list((self._arcs.get(filename) or {}).keys())
+ """Get the list of arcs executed for a file.
+
+ If the file was not measured, returns None. A file might be measured,
+ and have no arcs executed, in which case an empty list is returned.
+
+ """
+ if filename in self._arcs:
+ return list((self._arcs[filename]).keys())
+ return None
def plugin_name(self, filename):
"""Get the plugin name for a file.
diff --git a/coverage/results.py b/coverage/results.py
index 65e70c75..c7a2f95e 100644
--- a/coverage/results.py
+++ b/coverage/results.py
@@ -17,7 +17,7 @@ class Analysis(object):
self.excluded = self.file_reporter.excluded_statements()
# Identify missing statements.
- executed = self.data.lines(self.filename)
+ executed = self.data.lines(self.filename) or []
executed = self.file_reporter.translate_lines(executed)
self.missing = self.statements - executed
@@ -61,7 +61,7 @@ class Analysis(object):
def arcs_executed(self):
"""Returns a sorted list of the arcs actually executed in the code."""
- executed = self.data.arcs(self.filename)
+ executed = self.data.arcs(self.filename) or []
executed = self.file_reporter.translate_arcs(executed)
return sorted(executed)
diff --git a/tests/test_data.py b/tests/test_data.py
index 11208d67..e48724da 100644
--- a/tests/test_data.py
+++ b/tests/test_data.py
@@ -134,6 +134,22 @@ class CoverageDataTest(DataTestHelpers, CoverageTest):
covdata.touch_file('zzz.py')
self.assert_measured_files(covdata, MEASURED_FILES_3 + ['zzz.py'])
+ def test_no_lines_vs_unmeasured_file(self):
+ covdata = CoverageData()
+ covdata.add_lines(LINES_1)
+ covdata.touch_file('zzz.py')
+ self.assertEqual(covdata.lines('zzz.py'), [])
+ self.assertIsNone(covdata.lines('no_such_file.py'))
+
+ def test_no_arcs_vs_unmeasured_file(self):
+ covdata = CoverageData()
+ covdata.add_arcs(ARCS_3)
+ covdata.touch_file('zzz.py')
+ self.assertEqual(covdata.lines('zzz.py'), [])
+ self.assertIsNone(covdata.lines('no_such_file.py'))
+ self.assertEqual(covdata.arcs('zzz.py'), [])
+ self.assertIsNone(covdata.arcs('no_such_file.py'))
+
def test_plugin_name(self):
covdata = CoverageData()
covdata.add_plugins({"p1.foo": "p1.plugin", "p2.html": "p2.plugin"})