diff options
author | rozza@x103086.gcapmedia.com <rozza@x103086.gcapmedia.com> | 2009-11-20 11:27:52 +0000 |
---|---|---|
committer | rozza@x103086.gcapmedia.com <rozza@x103086.gcapmedia.com> | 2009-11-20 11:27:52 +0000 |
commit | cf2251822c220e4fc2a8f95f746dd269ac2659eb (patch) | |
tree | de478f3ee9b26ecac486d2d27f71cac8e91bedc3 /coverage/test_plugins/pytest_coverage.py | |
parent | b09acaa84c8624d67c9c1e271a780fbd2122c2c6 (diff) | |
download | python-coveragepy-git-cf2251822c220e4fc2a8f95f746dd269ac2659eb.tar.gz |
Adding a CoverageTestWrapper to be used by test runners / plugins.
Added example plugins for pytest and nose
Warning: I haven't tested the nose plugin against a test suite
Warning: I use a file listing files / paths to omit from code coverage and use regexes to filter them out
To ignore that remove the monkey patch..
Diffstat (limited to 'coverage/test_plugins/pytest_coverage.py')
-rw-r--r-- | coverage/test_plugins/pytest_coverage.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/coverage/test_plugins/pytest_coverage.py b/coverage/test_plugins/pytest_coverage.py new file mode 100644 index 00000000..5b910e94 --- /dev/null +++ b/coverage/test_plugins/pytest_coverage.py @@ -0,0 +1,69 @@ +""" +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() + +def pytest_addoption(parser): + """ + Get all the options from the coverage.runner and import them + """ + 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) + +# Monkey patch omit_filter to use regex patterns for file omits +def omit_filter(omit_prefixes, code_units): + import re + exclude_patterns = [re.compile(line.strip()) for line in omit_prefixes if line and not line.startswith('#')] + filtered = [] + for cu in code_units: + skip = False + for pattern in exclude_patterns: + if pattern.search(cu.filename): + skip = True + break + + if not skip: + filtered.append(cu) + return filtered + +coverage.codeunit.omit_filter = omit_filter + +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() + assert result.ret == 0 + assert result.stdout.fnmatch_lines([ + '*Processing Coverage*' + ])
\ No newline at end of file |