summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coverage/nose_coverage.py44
-rw-r--r--coverage/pytest_coverage.py74
-rw-r--r--coverage/testplugin.py (renamed from coverage/runner.py)54
-rw-r--r--setup.py2
-rw-r--r--test/test_testplugin.py36
5 files changed, 93 insertions, 117 deletions
diff --git a/coverage/nose_coverage.py b/coverage/nose_coverage.py
index 6ba0a104..907e6803 100644
--- a/coverage/nose_coverage.py
+++ b/coverage/nose_coverage.py
@@ -1,10 +1,9 @@
import logging
import unittest, os
-from nose.plugins import Plugin, PluginTester
-
+from nose.plugins import Plugin
import sys
-import os
-sys.path.insert(0, os.path.realpath(os.path.join(os.path.dirname(__file__), '../../')))
+
+from coverage.testplugin import CoverageTestWrapper
log = logging.getLogger(__name__)
@@ -55,7 +54,6 @@ class Coverage(Plugin):
"""
log.debug("Coverage begin")
# Load the runner and start it up
- from coverage.runner import CoverageTestWrapper
self.coverage = CoverageTestWrapper(self.options)
self.coverage.start()
@@ -68,39 +66,3 @@ class Coverage(Plugin):
# finish up with coverage
self.coverage.finish()
-
-# 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
-
-try:
- import coverage
- coverage.codeunit.omit_filter = omit_filter
-except:
- pass
-
-class TestCoverage(PluginTester, unittest.TestCase):
- activate = '--with-coverage_new' # enables the plugin
- plugins = [Coverage()]
- args = ['--cover-action=report']
-
- def test_output(self):
- assert "Processing Coverage..." in self.output, (
- "got: %s" % self.output)
- def makeSuite(self):
- class TC(unittest.TestCase):
- def runTest(self):
- raise ValueError("Coverage down")
- return unittest.TestSuite([TC()])
diff --git a/coverage/pytest_coverage.py b/coverage/pytest_coverage.py
deleted file mode 100644
index 094be44a..00000000
--- a/coverage/pytest_coverage.py
+++ /dev/null
@@ -1,74 +0,0 @@
-"""
-Write and report coverage data with 'coverage.py'.
-"""
-import py
-import coverage
-
-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')
- 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):
- 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
-
-pytest_plugins = ['pytester']
-def test_functional(testdir):
- testdir.makepyfile("""
- def f():
- x = 42
- def test_whatever():
- pass
- """)
- result = testdir.runpytest("--cover-action=annotate")
- assert result.ret == 0
- assert result.stdout.fnmatch_lines([
- '*Processing Coverage*'
- ])
- coveragefile = testdir.tmpdir.join(".coverage")
- assert coveragefile.check()
- # XXX try loading it?
diff --git a/coverage/runner.py b/coverage/testplugin.py
index ef4c1f21..a979ad2b 100644
--- a/coverage/runner.py
+++ b/coverage/testplugin.py
@@ -1,4 +1,4 @@
-import optparse
+import coverage, optparse
class CoverageTestWrapper(object):
"""
@@ -136,3 +136,55 @@ xml Create an XML report of coverage results.
)
]
+# 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):
+ # Finished the tests start processing the coverage
+ config = terminalreporter.config
+ tw = terminalreporter._tw
+ tw.sep('-', 'coverage')
+ tw.line('Processing Coverage...')
+ self.coverage.finish()
+
+
+# XXX please make the following unnessary
+# 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
diff --git a/setup.py b/setup.py
index 7ad92f3e..38678d15 100644
--- a/setup.py
+++ b/setup.py
@@ -43,7 +43,7 @@ if sys.hexversion < 0x03000000:
'coverage = coverage:main',
],
'pytest11': [
- 'coverage = coverage.pytest_coverage',
+ 'coverage = coverage.testplugin',
],
},
diff --git a/test/test_testplugin.py b/test/test_testplugin.py
new file mode 100644
index 00000000..d102a4f4
--- /dev/null
+++ b/test/test_testplugin.py
@@ -0,0 +1,36 @@
+import py
+import unittest
+from nose.plugins import PluginTester
+from coverage.nose_coverage import Coverage
+
+class TestCoverage(PluginTester, unittest.TestCase):
+ activate = '--with-coverage_new' # enables the plugin
+ plugins = [Coverage()]
+ args = ['--cover-action=report']
+
+ @py.test.mark.skipif(True) # "requires nose test runner"
+ def test_output(self):
+ assert "Processing Coverage..." in self.output, (
+ "got: %s" % self.output)
+ def makeSuite(self):
+ class TC(unittest.TestCase):
+ def runTest(self):
+ raise ValueError("Coverage down")
+ return unittest.TestSuite([TC()])
+
+pytest_plugins = ['pytester']
+def test_functional(testdir):
+ testdir.makepyfile("""
+ def f():
+ x = 42
+ def test_whatever():
+ pass
+ """)
+ result = testdir.runpytest("--cover-action=annotate")
+ assert result.ret == 0
+ assert result.stdout.fnmatch_lines([
+ '*Processing Coverage*'
+ ])
+ coveragefile = testdir.tmpdir.join(".coverage")
+ assert coveragefile.check()
+ # XXX try loading it?