diff options
-rw-r--r-- | coverage/control.py | 4 | ||||
-rw-r--r-- | coverage/plugin.py | 11 | ||||
-rw-r--r-- | tests/test_plugins.py | 43 |
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): |