From 8153341439f1eddddad18ee6ca8ca10a88549129 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Fri, 3 Sep 2010 23:15:20 -0400 Subject: 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. --- coverage/control.py | 7 +++++++ coverage/data.py | 4 ++++ 2 files changed, 11 insertions(+) (limited to 'coverage') diff --git a/coverage/control.py b/coverage/control.py index dd7d705b..28c8850f 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 6d49f710..30119d9c 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()) -- cgit v1.2.1