diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2015-02-08 13:20:31 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2015-02-08 13:20:31 -0500 |
commit | 44643bd88b90c3ae0afe9dd4b9c9094d868d60b1 (patch) | |
tree | 57aba47760de7aaffa028bb9452a17054ad72eef | |
parent | b48ad946aca8fc24561ca3e639533b24e799c020 (diff) | |
download | python-coveragepy-git-44643bd88b90c3ae0afe9dd4b9c9094d868d60b1.tar.gz |
Plugin modules have to define a Plugin class, or an error happens.
-rw-r--r-- | coverage/control.py | 4 | ||||
-rw-r--r-- | tests/test_plugins.py | 15 |
2 files changed, 13 insertions, 6 deletions
diff --git a/coverage/control.py b/coverage/control.py index 7398ced0..8650dbcb 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -1126,6 +1126,10 @@ class Plugins(object): plugin.plugin_name = module plugins.order.append(plugin) plugins.names[module] = plugin + else: + raise CoverageException( + "Plugin module %r didn't define a Plugin class" % module + ) return plugins diff --git a/tests/test_plugins.py b/tests/test_plugins.py index f6609e26..0e3c9865 100644 --- a/tests/test_plugins.py +++ b/tests/test_plugins.py @@ -6,6 +6,7 @@ import coverage from coverage import env from coverage.backward import StringIO from coverage.control import Plugins +from coverage.misc import CoverageException import coverage.plugin @@ -104,15 +105,14 @@ class LoadPluginsTest(CoverageTest): with self.assertRaises(ImportError): _ = Plugins.load_plugins(["plugin_not_there"], None) - def test_ok_to_not_define_plugin(self): - # TODO: should this actually be an error or warning? - self.make_file("plugin2.py", """\ + def test_plugin_must_define_plugin_class(self): + self.make_file("no_plugin.py", """\ from coverage import CoveragePlugin - Nothing = 0 """) - plugins = list(Plugins.load_plugins(["plugin2"], None)) - self.assertEqual(plugins, []) + msg_pat = "Plugin module 'no_plugin' didn't define a Plugin class" + with self.assertRaisesRegex(CoverageException, msg_pat): + plugins = list(Plugins.load_plugins(["no_plugin"], None)) class PluginTest(CoverageTest): @@ -121,6 +121,9 @@ class PluginTest(CoverageTest): def test_plugin_imported(self): # Prove that a plugin will be imported. self.make_file("my_plugin.py", """\ + from coverage import CoveragePlugin + class Plugin(CoveragePlugin): + pass with open("evidence.out", "w") as f: f.write("we are here!") """) |