4 from slixmpp
.plugins
.base
import PluginManager
, BasePlugin
, register_plugin
17 dependencies
= set(['b', 'd'])
22 dependencies
= set(['c'])
27 dependencies
= set(['a', 'd'])
31 dependencies
= set(['a', 'b'])
42 class TestPlugins(unittest
.TestCase
):
45 def test_enable(self
):
46 """Enable a single plugin."""
47 p
= PluginManager(None)
58 self
.assertEqual(len(p
), 1, "Wrong number of enabled plugins.")
59 self
.assertEqual(events
, ['init'], "Plugin init method not called.")
61 def test_disable(self
):
62 """Disable a single plugin."""
63 p
= PluginManager(None)
79 self
.assertEqual(len(p
), 0, "Wrong number of enabled plugins.")
80 self
.assertEqual(events
, ['init', 'end'],
81 "Plugin lifecycle methods not called.")
83 def test_enable_dependencies(self
):
84 """Enable a plugin with acyclic dependencies."""
85 p
= PluginManager(None)
89 A
.plugin_init
= lambda s
: events
.append('init_a')
90 B
.plugin_init
= lambda s
: events
.append('init_b')
94 self
.assertEqual(len(p
), 3, "Wrong number of enabled plugins.")
95 self
.assertTrue('init_a' in events
, "Dependency A not enabled.")
96 self
.assertTrue('init_b' in events
, "Dependency B not enabled.")
98 def test_enable_cyclic_dependencies(self
):
99 """Enable a plugin with cyclic dependencies."""
101 p
= PluginManager(None)
105 B
.plugin_init
= lambda s
: events
.append('init_b')
106 C
.plugin_init
= lambda s
: events
.append('init_c')
107 D
.plugin_init
= lambda s
: events
.append('init_d')
111 self
.assertEqual(len(p
), 3, "Wrong number of enabled plugins.")
112 self
.assertTrue('init_b' in events
, "Dependency B not enabled.")
113 self
.assertTrue('init_c' in events
, "Dependency C not enabled.")
114 self
.assertTrue('init_d' in events
, "Dependency D not enabled.")
116 def test_disable_dependendents(self
):
117 """Disable a plugin with dependents."""
119 p
= PluginManager(None)
123 A
.plugin_end
= lambda s
: events
.append('end_a')
124 B
.plugin_end
= lambda s
: events
.append('end_b')
125 F
.plugin_end
= lambda s
: events
.append('end_f')
130 self
.assertEqual(len(p
), 1, "Wrong number of enabled plugins.")
131 self
.assertTrue('end_f' in events
, "Dependent F not disabled.")
132 self
.assertTrue('end_a' in events
, "Plugin A not disabled.")
134 def test_disable_cyclic_dependents(self
):
135 """Disable a plugin with cyclic dependents."""
137 p
= PluginManager(None)
141 B
.plugin_end
= lambda s
: events
.append('end_b')
142 C
.plugin_end
= lambda s
: events
.append('end_c')
143 D
.plugin_end
= lambda s
: events
.append('end_d')
148 self
.assertEqual(len(p
), 0, "Wrong number of enabled plugins.")
149 self
.assertTrue('end_b' in events
, "Plugin B not disabled.")
150 self
.assertTrue('end_c' in events
, "Dependent C not disabled.")
151 self
.assertTrue('end_d' in events
, "Dependent D not disabled.")
155 suite
= unittest
.TestLoader().loadTestsFromTestCase(TestPlugins
)
157 if __name__
== '__main__':
158 logging
.basicConfig(level
=logging
.DEBUG
,
159 format
='%(levelname)-8s %(message)s')
161 tests
= unittest
.TestSuite([suite
])
162 unittest
.TextTestRunner(verbosity
=2).run(tests
)