Add the 'connecting' event
[slixmpp.git] / tests / test_plugins.py
blob510ae7d73c486559878666fd0c915449095d0a64
1 import unittest
2 import logging
4 from slixmpp.plugins.base import PluginManager, BasePlugin, register_plugin
7 class A(BasePlugin):
8 name = 'a'
11 class B(BasePlugin):
12 name = 'b'
15 class C(BasePlugin):
16 name = 'c'
17 dependencies = set(['b', 'd'])
20 class D(BasePlugin):
21 name = 'd'
22 dependencies = set(['c'])
25 class E(BasePlugin):
26 name = 'e'
27 dependencies = set(['a', 'd'])
29 class F(BasePlugin):
30 name = 'f'
31 dependencies = set(['a', 'b'])
34 register_plugin(A)
35 register_plugin(B)
36 register_plugin(C)
37 register_plugin(D)
38 register_plugin(E)
39 register_plugin(F)
42 class TestPlugins(unittest.TestCase):
45 def test_enable(self):
46 """Enable a single plugin."""
47 p = PluginManager(None)
49 events = []
51 def init(self):
52 events.append('init')
54 A.plugin_init = init
56 p.enable('a')
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)
65 events = []
67 def init(self):
68 events.append('init')
70 def end(self):
71 events.append('end')
73 A.plugin_init = init
74 A.plugin_end = end
76 p.enable('a')
77 p.disable('a')
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)
87 events = []
89 A.plugin_init = lambda s: events.append('init_a')
90 B.plugin_init = lambda s: events.append('init_b')
92 p.enable('f')
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)
103 events = []
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')
109 p.enable('c')
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)
121 events = []
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')
127 p.enable('f')
128 p.disable('a')
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)
139 events = []
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')
145 p.enable('c')
146 p.disable('b')
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)