summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coverage/codeunit.py34
-rw-r--r--coverage/report.py32
-rw-r--r--test/test_summary.py16
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):