diff options
-rw-r--r-- | coverage/codeunit.py | 34 | ||||
-rw-r--r-- | coverage/report.py | 32 | ||||
-rw-r--r-- | test/test_summary.py | 16 |
3 files changed, 47 insertions, 35 deletions
diff --git a/coverage/codeunit.py b/coverage/codeunit.py index 2d960e38..dfc4560d 100644 --- a/coverage/codeunit.py +++ b/coverage/codeunit.py @@ -1,26 +1,21 @@ """Code unit (module) handling for Coverage.""" -import fnmatch, glob, os +import glob, os from coverage.backward import string_class, StringIO from coverage.misc import CoverageException -def code_unit_factory(morfs, file_locator, omit=None, include=None): +def code_unit_factory(morfs, file_locator): """Construct a list of CodeUnits from polymorphic inputs. `morfs` is a module or a filename, or a list of same. `file_locator` is a FileLocator that can help resolve filenames. - `include` is a list of filename patterns. Only CodeUnits that match those - patterns will be included in the list. `omit` is a list of patterns to omit - from the list. - Returns a list of CodeUnit objects. """ - # Be sure we have a list. if not isinstance(morfs, (list, tuple)): morfs = [morfs] @@ -36,31 +31,9 @@ def code_unit_factory(morfs, file_locator, omit=None, include=None): code_units = [CodeUnit(morf, file_locator) for morf in morfs] - if include: - assert not isinstance(include, string_class) # common mistake - patterns = [file_locator.abs_file(p) for p in include] - filtered = [] - for cu in code_units: - for pattern in patterns: - if fnmatch.fnmatch(cu.filename, pattern): - filtered.append(cu) - break - code_units = filtered - - if omit: - assert not isinstance(omit, string_class) # common mistake - patterns = [file_locator.abs_file(p) for p in omit] - filtered = [] - for cu in code_units: - for pattern in patterns: - if fnmatch.fnmatch(cu.filename, pattern): - break - else: - filtered.append(cu) - code_units = filtered - return code_units + class CodeUnit(object): """Code unit: a filename or module. @@ -71,7 +44,6 @@ class CodeUnit(object): `relative` is a boolean. """ - def __init__(self, morf, file_locator): self.file_locator = file_locator diff --git a/coverage/report.py b/coverage/report.py index f7662a31..a1d50828 100644 --- a/coverage/report.py +++ b/coverage/report.py @@ -1,6 +1,7 @@ """Reporter foundation for Coverage.""" -import os +import fnmatch, os +from coverage.backward import string_class from coverage.codeunit import code_unit_factory from coverage.misc import CoverageException, NoSource @@ -33,9 +34,32 @@ class Reporter(object): """ morfs = morfs or self.coverage.data.executed_files() - self.code_units = code_unit_factory( - morfs, self.coverage.file_locator, omit, include - ) + file_locator = self.coverage.file_locator + self.code_units = code_unit_factory(morfs, file_locator) + + if include: + assert not isinstance(include, string_class) # common mistake + patterns = [file_locator.abs_file(p) for p in include] + filtered = [] + for cu in self.code_units: + for pattern in patterns: + if fnmatch.fnmatch(cu.filename, pattern): + filtered.append(cu) + break + self.code_units = filtered + + if omit: + assert not isinstance(omit, string_class) # common mistake + patterns = [file_locator.abs_file(p) for p in omit] + filtered = [] + for cu in self.code_units: + for pattern in patterns: + if fnmatch.fnmatch(cu.filename, pattern): + break + else: + filtered.append(cu) + self.code_units = filtered + self.code_units.sort() def report_files(self, report_fn, morfs, directory=None, diff --git a/test/test_summary.py b/test/test_summary.py index db440f85..fcc26125 100644 --- a/test/test_summary.py +++ b/test/test_summary.py @@ -90,6 +90,22 @@ class SummaryTest(CoverageTest): self.assertTrue("mycode " in report) self.assertEqual(self.last_line_squeezed(report), "mycode 4 0 100%") + def test_report_including(self): + # Try reporting while including some modules + self.run_command("coverage run mycode.py") + report = self.report_from_command("coverage report --include=mycode*") + + # Name Stmts Miss Cover + # ---------------------------- + # mycode 4 0 100% + + self.assertEqual(self.line_count(report), 3) + self.assertFalse("/coverage/" in report) + self.assertFalse("/test/modules/covmod1 " in report) + self.assertFalse("/test/zipmods.zip/covmodzip1 " in report) + self.assertTrue("mycode " in report) + self.assertEqual(self.last_line_squeezed(report), "mycode 4 0 100%") + def test_report_branches(self): self.make_file("mybranch.py", """\ def branch(x): |