diff options
-rw-r--r-- | coverage/cmdline.py | 12 | ||||
-rw-r--r-- | coverage/control.py | 15 | ||||
-rw-r--r-- | coverage/summary.py | 1 | ||||
-rw-r--r-- | tests/test_cmdline.py | 11 |
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 ...] |