summaryrefslogtreecommitdiff
path: root/coverage
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2010-09-03 23:15:20 -0400
committerNed Batchelder <ned@nedbatchelder.com>2010-09-03 23:15:20 -0400
commit023f6b5f6789230d7dc473361d75505bf86c60f3 (patch)
treef81172151cfcdc5efb3d9f0507c81a2f6faf49f5 /coverage
parentf03f6c7869be91a754db9b82cc1b7152a86352c6 (diff)
downloadpython-coveragepy-023f6b5f6789230d7dc473361d75505bf86c60f3.tar.gz
Now completely unexecuted source files can be included in reporting. Specifying --source tells coverage.py where to search for files that haven't been executed.
Diffstat (limited to 'coverage')
-rw-r--r--coverage/control.py7
-rw-r--r--coverage/data.py4
2 files changed, 11 insertions, 0 deletions
diff --git a/coverage/control.py b/coverage/control.py
index dd7d705..28c8850 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -9,6 +9,7 @@ from coverage.collector import Collector
from coverage.config import CoverageConfig
from coverage.data import CoverageData
from coverage.files import FileLocator, TreeMatcher, FnmatchMatcher
+from coverage.files import find_python_files
from coverage.html import HtmlReporter
from coverage.misc import CoverageException, bool_or_none
from coverage.results import Analysis, Numbers
@@ -303,6 +304,7 @@ class coverage(object):
else:
pkg_file = self._source_for_file(pkg_file)
pkg_file = self.file_locator.canonical_filename(pkg_file)
+ self.source.append(pkg_file)
self.source_match.add(pkg_file)
for pkg in found:
@@ -437,6 +439,11 @@ class coverage(object):
if not summary:
self._warn("No data was collected.")
+ # Find files that were never executed at all.
+ for src in self.source:
+ for py_file in find_python_files(src):
+ self.data.touch_file(py_file)
+
self._harvested = True
# Backward compatibility with version 1.
diff --git a/coverage/data.py b/coverage/data.py
index 6d49f71..30119d9 100644
--- a/coverage/data.py
+++ b/coverage/data.py
@@ -207,6 +207,10 @@ class CoverageData(object):
for filename, arcs in arc_data.items():
self.arcs.setdefault(filename, {}).update(arcs)
+ def touch_file(self, filename):
+ """Ensure that `filename` appears in the data, empty if needed."""
+ self.lines.setdefault(filename, {})
+
def executed_files(self):
"""A list of all files that had been measured as executed."""
return list(self.lines.keys())