summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Cordasco <graffatcolmingov@gmail.com>2016-01-24 15:13:58 -0600
committerIan Cordasco <graffatcolmingov@gmail.com>2016-01-24 15:13:58 -0600
commitebdc935ffc44bbfaae863b3b07bc165c601dd88c (patch)
tree9185c22b87e5a6401fbf9fd6203cb0495f75d174
parentb0a258fe79c7f8713708b03f64cdbc832a449bf4 (diff)
downloadflake8-ebdc935ffc44bbfaae863b3b07bc165c601dd88c.tar.gz
Refactor NotifierBuilder into its own mixin
This allows for easier unit testing
-rw-r--r--flake8/plugins/manager.py24
-rw-r--r--tests/unit/test_plugin_type_manager.py28
2 files changed, 42 insertions, 10 deletions
diff --git a/flake8/plugins/manager.py b/flake8/plugins/manager.py
index 8d5d12c..f73d006 100644
--- a/flake8/plugins/manager.py
+++ b/flake8/plugins/manager.py
@@ -253,16 +253,8 @@ class PluginTypeManager(object):
list(self.manager.map(call_provide_options))
-class Checkers(PluginTypeManager):
- """All of the checkers registered through entry-ponits."""
-
- namespace = 'flake8.extension'
-
-
-class Listeners(PluginTypeManager):
- """All of the listeners registered through entry-points."""
-
- namespace = 'flake8.listen'
+class NotifierBuilder(object):
+ """Mixin class that builds a Notifier from a PluginManager."""
def build_notifier(self):
"""Build a Notifier for our Listeners.
@@ -279,6 +271,18 @@ class Listeners(PluginTypeManager):
return notifier_trie
+class Checkers(PluginTypeManager):
+ """All of the checkers registered through entry-ponits."""
+
+ namespace = 'flake8.extension'
+
+
+class Listeners(PluginTypeManager, NotifierBuilder):
+ """All of the listeners registered through entry-points."""
+
+ namespace = 'flake8.listen'
+
+
class ReportFormatters(PluginTypeManager):
"""All of the report formatters registered through entry-points."""
diff --git a/tests/unit/test_plugin_type_manager.py b/tests/unit/test_plugin_type_manager.py
index cb121c6..2735dec 100644
--- a/tests/unit/test_plugin_type_manager.py
+++ b/tests/unit/test_plugin_type_manager.py
@@ -165,3 +165,31 @@ def test_provide_options(PluginManager):
plugin.provide_options.assert_called_with(optmanager,
options,
extra_args)
+
+
+class FakePluginTypeManager(manager.NotifierBuilder):
+ """Provide an easy way to test the NotifierBuilder."""
+
+ def __init__(self, manager):
+ """Initialize with our fake manager."""
+ self.names = sorted(manager.keys())
+ self.manager = manager
+
+
+@pytest.fixture
+def notifier_builder():
+ """Create a fake plugin type manager."""
+ return FakePluginTypeManager(manager={
+ 'T100': object(),
+ 'T101': object(),
+ 'T110': object(),
+ })
+
+
+def test_build_notifier(notifier_builder):
+ """Verify we properly build a Notifier object."""
+ notifier = notifier_builder.build_notifier()
+ for name in ('T100', 'T101', 'T110'):
+ assert list(notifier.listeners_for(name)) == [
+ notifier_builder.manager[name]
+ ]