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] + ]