summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coverage/nose_coverage.py (renamed from coverage/test_plugins/nose_coverage.py)11
-rw-r--r--coverage/pytest_coverage.py (renamed from coverage/test_plugins/pytest_coverage.py)65
-rw-r--r--coverage/runner.py60
-rw-r--r--setup.py5
4 files changed, 72 insertions, 69 deletions
diff --git a/coverage/test_plugins/nose_coverage.py b/coverage/nose_coverage.py
index 603ce43a..6ba0a104 100644
--- a/coverage/test_plugins/nose_coverage.py
+++ b/coverage/nose_coverage.py
@@ -22,14 +22,9 @@ class Coverage(Plugin):
"""
Add options to command line.
"""
-
Plugin.options(self, parser, env)
-
- from coverage.runner import Options
- # Loop the coverage options and append them to the plugin options
- options = [a for a in dir(Options) if not a.startswith('_')]
- for option in options:
- opt = getattr(Options, option)
+ from coverage.runner import options
+ for opt in options:
parser.add_option(opt)
def configure(self, options, config):
@@ -108,4 +103,4 @@ class TestCoverage(PluginTester, unittest.TestCase):
class TC(unittest.TestCase):
def runTest(self):
raise ValueError("Coverage down")
- return unittest.TestSuite([TC()]) \ No newline at end of file
+ return unittest.TestSuite([TC()])
diff --git a/coverage/test_plugins/pytest_coverage.py b/coverage/pytest_coverage.py
index 5b910e94..094be44a 100644
--- a/coverage/test_plugins/pytest_coverage.py
+++ b/coverage/pytest_coverage.py
@@ -2,38 +2,41 @@
Write and report coverage data with 'coverage.py'.
"""
import py
-
-coverage = py.test.importorskip("coverage")
-
-def pytest_configure(config):
- # Load the runner and start it up
- from coverage.runner import CoverageTestWrapper
-
- config.coverage = CoverageTestWrapper(config.option)
- config.coverage.start()
-
-def pytest_terminal_summary(terminalreporter):
- # Finished the tests start processing the coverage
- config = terminalreporter.config
- tw = terminalreporter._tw
- tw.sep('-', 'coverage')
- tw.line('Processing Coverage...')
-
- # finish up with coverage
- config.coverage.finish()
+import coverage
def pytest_addoption(parser):
"""
Get all the options from the coverage.runner and import them
"""
- from coverage.runner import Options
-
+ from coverage.runner import options
group = parser.getgroup('Coverage options')
- # Loop the coverage options and append them to the plugin options
- options = [a for a in dir(Options) if not a.startswith('_')]
- for option in options:
- opt = getattr(Options, option)
- group._addoption_instance(opt, shortupper=True)
+ 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):
+ from coverage.runner import CoverageTestWrapper
+ 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):
+ # Finished the tests start processing the coverage
+ config = terminalreporter.config
+ tw = terminalreporter._tw
+ tw.sep('-', 'coverage')
+ tw.line('Processing Coverage...')
+ self.coverage.finish()
+
# Monkey patch omit_filter to use regex patterns for file omits
def omit_filter(omit_prefixes, code_units):
@@ -53,17 +56,19 @@ def omit_filter(omit_prefixes, code_units):
coverage.codeunit.omit_filter = omit_filter
+pytest_plugins = ['pytester']
def test_functional(testdir):
- py.test.importorskip("coverage")
- testdir.plugins.append("coverage")
testdir.makepyfile("""
def f():
x = 42
def test_whatever():
pass
""")
- result = testdir.runpytest()
+ result = testdir.runpytest("--cover-action=annotate")
assert result.ret == 0
assert result.stdout.fnmatch_lines([
'*Processing Coverage*'
- ]) \ No newline at end of file
+ ])
+ coveragefile = testdir.tmpdir.join(".coverage")
+ assert coveragefile.check()
+ # XXX try loading it?
diff --git a/coverage/runner.py b/coverage/runner.py
index ba4861a7..ef4c1f21 100644
--- a/coverage/runner.py
+++ b/coverage/runner.py
@@ -73,66 +73,66 @@ class CoverageTestWrapper(object):
return
-class Options(object):
- """A namespace class for individual options we'll build parsers from."""
-
- action = optparse.Option('',
+options = [
+ optparse.Option('',
'--cover-action', action='append', default=None,
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())
-
- branch = optparse.Option(
+ 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-branch', action='store_true',
help="Measure branch execution. HIGHLY EXPERIMENTAL!"
- )
- directory = optparse.Option(
+ ),
+ optparse.Option(
'--cover-directory', action='store',
metavar="DIR",
help="Write the output files to DIR."
- )
- ignore_errors = optparse.Option(
+ ),
+ optparse.Option(
'--cover-ignore-errors', action='store_true',
help="Ignore errors while reading source files."
- )
- pylib = optparse.Option(
+ ),
+ optparse.Option(
'--cover-pylib', action='store_true',
help="Measure coverage even inside the Python installed library, "
"which isn't done by default."
- )
- show_missing = optparse.Option(
+ ),
+ optparse.Option(
'--cover-show-missing', action='store_true',
help="Show line numbers of statements in each module that weren't "
"executed."
- )
- omit = optparse.Option(
+ ),
+ optparse.Option(
'--cover-omit', action='store',
metavar="PRE1,PRE2,...",
default='',
help="Omit files when their filename path starts with one of these "
"prefixes."
- )
- output_xml = optparse.Option(
+ ),
+ optparse.Option(
'--cover-outfile', action='store',
metavar="OUTFILE",
help="Write the XML report to this file. Defaults to 'coverage.xml'"
- )
- parallel_mode = optparse.Option(
+ ),
+ optparse.Option(
'--cover-parallel-mode', action='store_true',
help="Include the machine name and process id in the .coverage "
"data file name."
- )
- timid = optparse.Option(
+ ),
+ optparse.Option(
'--cover-timid', action='store_true',
help="Use a simpler but slower trace method. Try this if you get "
"seemingly impossible results!"
- )
- append = optparse.Option(
+ ),
+ optparse.Option(
'--cover-append', action='store_false',
help="Append coverage data to .coverage, otherwise it is started "
"clean with each run."
)
+]
+
diff --git a/setup.py b/setup.py
index 4a5aba1c..7ad92f3e 100644
--- a/setup.py
+++ b/setup.py
@@ -41,7 +41,10 @@ if sys.hexversion < 0x03000000:
entry_points = {
'console_scripts': [
'coverage = coverage:main',
- ]
+ ],
+ 'pytest11': [
+ 'coverage = coverage.pytest_coverage',
+ ],
},
# We need to get HTML assets from our htmlfiles dir.