summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coverage/cmdline.py12
-rw-r--r--coverage/control.py15
-rw-r--r--coverage/summary.py1
-rw-r--r--tests/test_cmdline.py11
4 files changed, 31 insertions, 8 deletions
diff --git a/coverage/cmdline.py b/coverage/cmdline.py
index e4ad3859..76af0213 100644
--- a/coverage/cmdline.py
+++ b/coverage/cmdline.py
@@ -101,6 +101,14 @@ class Opts(object):
"Accepts shell-style wildcards, which must be quoted."
),
)
+ contexts = optparse.make_option(
+ '', '--contexts', action='store',
+ metavar="PAT1,PAT2,...",
+ help=(
+ "Only count the lines covered in given contexts. "
+ "Accepts shell-style wildcards, which must be quoted."
+ ),
+ )
output_xml = optparse.make_option(
'-o', '', action='store', dest="outfile",
metavar="OUTFILE",
@@ -176,6 +184,7 @@ class CoverageOptionParser(optparse.OptionParser, object):
include=None,
module=None,
omit=None,
+ contexts=None,
parallel_mode=None,
pylib=None,
rcfile=True,
@@ -348,6 +357,7 @@ CMDS = {
Opts.ignore_errors,
Opts.include,
Opts.omit,
+ Opts.contexts,
Opts.show_missing,
Opts.skip_covered,
] + GLOBAL_ARGS,
@@ -478,6 +488,7 @@ class CoverageScript(object):
omit = unshell_list(options.omit)
include = unshell_list(options.include)
debug = unshell_list(options.debug)
+ contexts = unshell_list(options.contexts)
# Do something.
self.coverage = Coverage(
@@ -519,6 +530,7 @@ class CoverageScript(object):
ignore_errors=options.ignore_errors,
omit=omit,
include=include,
+ contexts=contexts,
)
# We need to be able to import from the current directory, because
diff --git a/coverage/control.py b/coverage/control.py
index b8dd03c6..029b439a 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -730,6 +730,7 @@ class Coverage(object):
def report(
self, morfs=None, show_missing=None, ignore_errors=None,
file=None, omit=None, include=None, skip_covered=None,
+ contexts=None,
):
"""Write a textual summary report to `file`.
@@ -758,13 +759,14 @@ class Coverage(object):
self.config.from_args(
ignore_errors=ignore_errors, report_omit=omit, report_include=include,
show_missing=show_missing, skip_covered=skip_covered,
+ query_contexts=contexts,
)
reporter = SummaryReporter(self, self.config)
return reporter.report(morfs, outfile=file)
def annotate(
self, morfs=None, directory=None, ignore_errors=None,
- omit=None, include=None,
+ omit=None, include=None, contexts=None,
):
"""Annotate a list of modules.
@@ -777,14 +779,15 @@ class Coverage(object):
"""
self.config.from_args(
- ignore_errors=ignore_errors, report_omit=omit, report_include=include
+ ignore_errors=ignore_errors, report_omit=omit,
+ report_include=include, query_contexts=contexts,
)
reporter = AnnotateReporter(self, self.config)
reporter.report(morfs, directory=directory)
def html_report(self, morfs=None, directory=None, ignore_errors=None,
omit=None, include=None, extra_css=None, title=None,
- skip_covered=None):
+ skip_covered=None, contexts=None):
"""Generate an HTML report.
The HTML is written to `directory`. The file "index.html" is the
@@ -811,14 +814,14 @@ class Coverage(object):
self.config.from_args(
ignore_errors=ignore_errors, report_omit=omit, report_include=include,
html_dir=directory, extra_css=extra_css, html_title=title,
- skip_covered=skip_covered,
+ skip_covered=skip_covered, query_contexts=contexts,
)
reporter = HtmlReporter(self, self.config)
return reporter.report(morfs)
def xml_report(
self, morfs=None, outfile=None, ignore_errors=None,
- omit=None, include=None,
+ omit=None, include=None, contexts=None,
):
"""Generate an XML report of coverage results.
@@ -834,7 +837,7 @@ class Coverage(object):
"""
self.config.from_args(
ignore_errors=ignore_errors, report_omit=omit, report_include=include,
- xml_output=outfile,
+ xml_output=outfile, query_contexts=contexts,
)
file_to_close = None
delete_file = False
diff --git a/coverage/summary.py b/coverage/summary.py
index e79592b9..9e0ccbfd 100644
--- a/coverage/summary.py
+++ b/coverage/summary.py
@@ -42,6 +42,7 @@ class SummaryReporter(Reporter):
fmt_err = u"%s %s: %s"
+ self.coverage.get_data().set_query_contexts(self.config.query_contexts)
for fr in self.find_file_reporters(morfs):
try:
analysis = self.coverage._analyze(fr)
diff --git a/tests/test_cmdline.py b/tests/test_cmdline.py
index a3a5b2b5..58c05396 100644
--- a/tests/test_cmdline.py
+++ b/tests/test_cmdline.py
@@ -32,17 +32,19 @@ class BaseCmdLineTest(CoverageTest):
_defaults = mock.Mock()
_defaults.Coverage().annotate(
directory=None, ignore_errors=None, include=None, omit=None, morfs=[],
+ contexts=None,
)
_defaults.Coverage().html_report(
directory=None, ignore_errors=None, include=None, omit=None, morfs=[],
- skip_covered=None, title=None
+ skip_covered=None, title=None, contexts=None,
)
_defaults.Coverage().report(
ignore_errors=None, include=None, omit=None, morfs=[],
- show_missing=None, skip_covered=None
+ show_missing=None, skip_covered=None, contexts=None,
)
_defaults.Coverage().xml_report(
ignore_errors=None, include=None, omit=None, morfs=[], outfile=None,
+ contexts=None,
)
_defaults.Coverage(
cover_pylib=None, data_suffix=None, timid=None, branch=None,
@@ -363,6 +365,11 @@ class CmdLineTest(BaseCmdLineTest):
cov.load()
cov.report(skip_covered=True)
""")
+ self.cmd_executes("report --contexts=foo,bar", """\
+ cov = Coverage()
+ cov.load()
+ cov.report(contexts=["foo", "bar"])
+ """)
def test_run(self):
# coverage run [-p] [-L] [--timid] MODULE.py [ARG1 ARG2 ...]