summaryrefslogtreecommitdiff
path: root/coverage/testplugin.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2010-05-30 11:30:55 -0400
committerNed Batchelder <ned@nedbatchelder.com>2010-05-30 11:30:55 -0400
commitc03628367b660ff2b52d6f88105fda75e5b080c8 (patch)
tree2a7697356316ccd52ce0b1f9b7ae861c81bdfd64 /coverage/testplugin.py
parentb1a44a1f52f048727eb8064da3d70a43a3cbbcd2 (diff)
downloadpython-coveragepy-git-c03628367b660ff2b52d6f88105fda75e5b080c8.tar.gz
Move the test runner plugins into their own sub-package.
--HG-- rename : coverage/noseplugin.py => coverage/runners/noseplugin.py rename : coverage/testplugin.py => coverage/runners/pytestplugin.py
Diffstat (limited to 'coverage/testplugin.py')
-rw-r--r--coverage/testplugin.py180
1 files changed, 0 insertions, 180 deletions
diff --git a/coverage/testplugin.py b/coverage/testplugin.py
deleted file mode 100644
index 57833005..00000000
--- a/coverage/testplugin.py
+++ /dev/null
@@ -1,180 +0,0 @@
-import re
-import sys
-import optparse
-
-import coverage
-
-
-class CoverageTestWrapper(object):
- """A coverage test wrapper.
-
- 1) Setup the with the parsed options
- 2) Call start()
- 3) Run your tests
- 4) Call finish()
- 5) Improve your code coverage ;)
- """
-
- coverPackages = None
-
- def __init__(self, options, _covpkg=coverage):
- # _covpkg is for dependency injection, so we can test this code.
-
- self.options = options
- self.covpkg = _covpkg
-
- self.coverage = None
-
- self.coverTests = options.cover_tests
- self.coverPackages = options.cover_package
-
- def start(self):
- self.coverage = self.covpkg.coverage(
- data_suffix = bool(self.options.cover_parallel_mode),
- cover_pylib = self.options.cover_pylib,
- timid = self.options.cover_timid,
- branch = self.options.cover_branch,
- )
-
- self.skipModules = sys.modules.keys()[:] #TODO: is this necessary??
-
- self.coverage.start()
-
- def finish(self, stream=None):
- self.coverage.stop()
- self.coverage.save()
-
- modules = [module for name, module in sys.modules.items()
- if self._want_module(name, module)]
-
- # Remaining actions are reporting, with some common self.options.
- report_args = {
- 'morfs': modules,
- 'ignore_errors': self.options.cover_ignore_errors,
- }
-
- try: # try looking for an omit file
- omit_file = open(self.options.cover_omit)
- omit = [line.strip() for line in omit_file.readlines()]
- report_args['omit'] = omit
- except: # assume cover_omit is a ',' separated list if provided
- omit = self.options.cover_omit.split(',')
- report_args['omit'] = omit
-
- if 'report' in self.options.cover_actions:
- self.coverage.report(
- show_missing=self.options.cover_show_missing,
- file=stream, **report_args)
- if 'annotate' in self.options.cover_actions:
- self.coverage.annotate(
- directory=self.options.cover_directory, **report_args)
- if 'html' in self.options.cover_actions:
- self.coverage.html_report(
- directory=self.options.cover_directory, **report_args)
- if 'xml' in self.options.cover_actions:
- outfile = self.options.cover_outfile
- if outfile == '-':
- outfile = None
- self.coverage.xml_report(outfile=outfile, **report_args)
-
- return
-
- def _want_module(self, name, module):
- for package in self.coverPackages:
- if module is not None and name.startswith(package):
- return True
-
- return False
-
-
-options = [
- optparse.Option('--cover-action', action='append', default=['report'],
- dest='cover_actions', type="choice",
- choices=['annotate', 'html', 'report', 'xml'],
- help="""\
-annotate Annotate source files with execution information.
-html Create an HTML report.
-report Report coverage stats on modules.
-xml Create an XML report of coverage results.
- """.strip()),
-
- optparse.Option('--cover-package', action='append', default=[],
- dest="cover_package", metavar="COVER_PACKAGE",
- help=("Restrict coverage output to selected package "
- "- can be specified multiple times")),
-
- optparse.Option("--cover-tests", action="store_true", dest="cover_tests",
- metavar="[NOSE_COVER_TESTS]", default=False,
- help="Include test modules in coverage report "),
-
- optparse.Option('--cover-branch', action='store_true',
- help="Measure branch execution. HIGHLY EXPERIMENTAL!"),
-
- optparse.Option('--cover-directory', action='store', metavar="DIR",
- help="Write the output files to DIR."),
-
- optparse.Option('--cover-ignore-errors', action='store_true',
- help="Ignore errors while reading source files."),
-
- optparse.Option('--cover-pylib', action='store_true',
- help=("Measure coverage even inside the Python installed "
- "library, which isn't done by default.")),
-
- optparse.Option('--cover-show-missing', action='store_true',
- help=("Show line numbers of statements in each module "
- "that weren't executed.")),
-
- optparse.Option('--cover-omit', action='store',
- metavar="PRE1,PRE2,...", default='',
- help=("Omit files when their filename path matches one "
- "of these patterns.")),
-
- optparse.Option('--cover-outfile', action='store', metavar="OUTFILE",
- help=("Write the XML report to this file. Defaults to "
- "'coverage.xml'")),
-
- optparse.Option('--cover-parallel-mode', action='store_true',
- help=("Include the machine name and process id in the "
- ".coverage data file name.")),
-
- optparse.Option('--cover-timid', action='store_true',
- help=("Use a simpler but slower trace method. Try this "
- "if you get seemingly impossible results!")),
-
- optparse.Option('--cover-append', action='store_false',
- help=("Append coverage data to .coverage, otherwise it "
- "is started clean with each run."))
-]
-
-# py.test plugin hooks
-
-def pytest_addoption(parser):
- """
- Get all the options from the coverage.runner and import them
- """
- group = parser.getgroup('Coverage options')
- for opt in options:
- group._addoption_instance(opt)
-
-def pytest_configure(config):
- # Load the runner and start it up
- if config.getvalue("cover_actions"):
- config.pluginmanager.register(DoCover(config), "do_coverage")
-
-class DoCover:
-
- def __init__(self, config):
- self.config = config
-
- def pytest_sessionstart(self):
- self.coverage = CoverageTestWrapper(self.config.option)
- # XXX maybe better to start/suspend/resume coverage
- # for each single test item
- self.coverage.start()
-
- def pytest_terminal_summary(self, terminalreporter):
- config = terminalreporter.config
- tw = terminalreporter._tw
- tw.sep('-', 'coverage')
- tw.line('Processing Coverage...')
- self.coverage.finish()