diff options
-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.py | 60 | ||||
-rw-r--r-- | setup.py | 5 |
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." ) +] + @@ -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. |