summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coverage/control.py4
-rw-r--r--coverage/plugin.py11
-rw-r--r--tests/test_plugins.py43
3 files changed, 58 insertions, 0 deletions
diff --git a/coverage/control.py b/coverage/control.py
index 8ae96fcf..5724a938 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -301,6 +301,10 @@ class Coverage(object):
if self.debug.should('sys'):
self.debug.write_formatted_info("sys", self.sysinfo())
+ for plugin in self.plugins:
+ header = "sys: " + plugin.plugin_name
+ info = plugin.sysinfo()
+ self.debug.write_formatted_info(header, info)
wrote_any = True
if wrote_any:
diff --git a/coverage/plugin.py b/coverage/plugin.py
index 32750a18..c1246274 100644
--- a/coverage/plugin.py
+++ b/coverage/plugin.py
@@ -57,6 +57,17 @@ class CoveragePlugin(object):
"""
_needs_to_implement(self, "file_reporter")
+ def sysinfo(self):
+ """Return a list of information useful for debugging.
+
+ This method will be invoked for ``coverage run --debug=sys``. Your
+ plugin can return any information to be displayed.
+
+ The return value is a list of pairs: (name, value).
+
+ """
+ return []
+
class FileTracer(object):
"""Support needed for files during the tracing phase.
diff --git a/tests/test_plugins.py b/tests/test_plugins.py
index 718bf2ca..5485005b 100644
--- a/tests/test_plugins.py
+++ b/tests/test_plugins.py
@@ -4,6 +4,7 @@ import os.path
import coverage
from coverage import env
+from coverage.backward import StringIO
from coverage.control import Plugins
import coverage.plugin
@@ -136,6 +137,48 @@ class PluginTest(CoverageTest):
cov.start()
cov.stop()
+ def test_plugin_sysinfo(self):
+ self.make_file("plugin_sysinfo.py", """\
+ import coverage
+
+ class Plugin(coverage.CoveragePlugin):
+ def sysinfo(self):
+ return [("hello", "world")]
+ """)
+ debug_out = StringIO()
+ cov = coverage.Coverage(debug=["sys"])
+ cov._debug_file = debug_out
+ cov.config["run:plugins"] = ["plugin_sysinfo"]
+ cov.load()
+
+ out_lines = debug_out.getvalue().splitlines()
+ expected_end = [
+ "-- sys: plugin_sysinfo ---------------------------------------",
+ " hello: world",
+ "-- end -------------------------------------------------------",
+ ]
+ self.assertEqual(expected_end, out_lines[-len(expected_end):])
+
+ def test_plugin_with_no_sysinfo(self):
+ self.make_file("plugin_no_sysinfo.py", """\
+ import coverage
+
+ class Plugin(coverage.CoveragePlugin):
+ pass
+ """)
+ debug_out = StringIO()
+ cov = coverage.Coverage(debug=["sys"])
+ cov._debug_file = debug_out
+ cov.config["run:plugins"] = ["plugin_no_sysinfo"]
+ cov.load()
+
+ out_lines = debug_out.getvalue().splitlines()
+ expected_end = [
+ "-- sys: plugin_no_sysinfo ------------------------------------",
+ "-- end -------------------------------------------------------",
+ ]
+ self.assertEqual(expected_end, out_lines[-len(expected_end):])
+
if not env.C_TRACER:
class FileTracerTest(CoverageTest):