root/tests/core/test_plugins.py @ 304:b1f22a705e28

Revision 304:b1f22a705e28, 5.7 KB (checked in by ronny.pfannschmidt, 3 years ago)

* altered the repr output of the *NamedSets? classes

Line 
1from unittest import TestCase
2
3from pida.core.plugins import Registry, NamedSets, \
4        StrictNamedSets, DynamicNamedSets, ExtensionPoint, \
5        Plugin, PluginFactory, SingletonError, ExtensionPointError, \
6        FactoryDict
7
8class ISingleton:
9    """A singleton definition"""
10
11
12class IFeature:
13    """A feature definition"""
14
15
16class Singleton(object):
17    """Singleton Implementation"""
18    def __init__(self, registry=None):
19        pass
20
21
22class TestSingleton(TestCase):
23   
24    def reg_singleton(self,**kw):
25        s = Singleton()
26        self.reg.register_plugin(
27            instance=s,
28            singletons=(ISingleton,),
29            **kw
30            )
31        return s
32
33
34    def setUp(self):
35        self.reg = Registry()
36
37    def test_register_instance(self):
38        s = self.reg_singleton()
39        assert self.reg.get_singleton(ISingleton) is s
40
41    def test_register_factory(self):
42        s = Singleton
43        self.reg.register_plugin(
44            factory=s,
45            singletons=(ISingleton,)
46            )
47        self.assertEqual(type(self.reg.get_singleton(ISingleton)),s)
48
49    def test_duplicate_singleton_error(self):
50        self.reg_singleton()
51        self.assertRaises(SingletonError, self.reg_singleton)
52   
53    def test_unregister_singleton(self):
54        self.reg_singleton()
55        self.reg.unregister_singleton(ISingleton)
56
57    def test_unregsiter_singleton_unknown(self):
58        def test():
59            self.reg.unregister_singleton(ISingleton)
60        self.assertRaises(SingletonError,test)
61
62    def test_register_with_feature(self):
63        self.reg_singleton(features=(IFeature,))
64
65    def test_uregister_with_feature(self):
66        self.reg_singleton(features=(IFeature,))
67        plugin = list(self.reg)[0]
68        self.reg.unregister_feature(IFeature,plugin)
69   
70    def test_iter(self):
71        plugin = self.reg_singleton()
72        self.assertEqual(list(self.reg)[0].get_instance(None),plugin)
73
74    def test_plugin_from_singleton(self):
75        self.reg_singleton()
76        got = self.reg.get_plugin_from_singleton(ISingleton)
77        self.assertEqual(type(got),Plugin)
78
79    def test_pluin_from_unknown_singleton_fail(self):
80        self.assertRaises(
81                SingletonError,
82                lambda: self.reg.get_plugin_from_singleton(ISingleton))
83
84    def test_clear_registry(self):
85        self.reg_singleton()
86        self.reg.clear()
87   
88    def test_ext_points_get(self):
89        self.reg_singleton()
90        self.reg.ext_points["test"]
91
92
93def gen_data(sets):
94    sets.add("job", "manager")
95    sets.add("name", "josh")
96
97
98class TestNamedSets(TestCase):
99    def setUp(self):
100        self.sets=NamedSets()
101   
102    def test_fail_getitem(self):
103        self.assertRaises(NotImplementedError,
104                lambda:self.sets["test"])
105   
106    def test_fail_add(self):
107        self.assertRaises(NotImplementedError,
108            lambda:self.sets.add("test","test"))
109       
110    def test_fail_remove(self):
111        self.assertRaises(NotImplementedError,
112            lambda:self.sets.remove("test","test"))
113
114class TestDynamicNamedSets(TestCase):
115   
116    def setUp(self):
117        self.sets = DynamicNamedSets()
118   
119    def test_repr(self):
120        self.assertEqual(repr(self.sets),'<DynamicNamedSets: {}>')
121   
122    def test_add(self):
123        gen_data(self.sets)
124   
125    def test_remove(self):
126        gen_data(self.sets)
127        self.sets.remove("name", "josh")
128        self.failIf("name" in self.sets.data)
129   
130    def test_remove_unknown(self):
131        self.sets.remove("name", "josh")
132   
133    def test_delitem(self):
134        gen_data(self.sets)
135        del self.sets["name"]
136        self.failIf("name" in self.sets.data)
137
138    def test_delitem_unknown(self):
139        del self.sets["name"]
140
141class TestStrictNamedSets(TestCase):
142    def setUp(self):
143        self.sets=StrictNamedSets(("name","job"))
144   
145    def test_create(self):
146        self.assertEqual(
147                repr(StrictNamedSets(("test",))),
148                "<StrictNamedSets: {'test': set([])}>")
149
150    def test_add(self):
151        gen_data(self.sets)
152   
153    def test_getitem(self):
154        self.assertEqual(self.sets["name"], set([]))
155
156    def test_remove(self):
157        gen_data(self.sets)
158        self.sets.remove("name","josh")
159        self.assertEqual(self.sets["name"], set([]))
160
161class TestExtensionPoint(TestCase):
162    def setUp(self):
163        self.p = ExtensionPoint()
164
165
166    def test_init(self):
167        gen_data(self.p)
168        self.p.init_extensions(["name"])
169        self.failIf(hasattr(self.p, "lazy"))
170
171
172    def test_uninit_fail_getitem(self):
173        def test():
174            self.p["name"]
175        self.assertRaises(
176                ExtensionPointError, 
177                test)
178       
179    def test_uninit_fail_keys(self):
180        self.assertRaises(ExtensionPointError, self.p.keys)
181   
182    def test_keys(self):
183        gen_data(self.p)
184        self.p.init_extensions(["name"])
185        self.assertEqual(
186                self.p.keys(),
187                ["name"])
188   
189class TestPluginFactory(TestCase):
190    def test_need_params(self):
191        self.assertRaises(TypeError,PluginFactory)
192
193
194class TestPlugin(TestCase):
195    def setUp(self):
196        self.pstr=Plugin(factory=str)
197        self.pin=Plugin(instance="test")
198   
199    def test_create_fail_factory(self):
200        self.assertRaises(TypeError,lambda: Plugin(factory=""))
201
202    def test_factory(self):
203        self.assertEqual(self.pstr.get_instance("test"),"test")
204   
205    def test_reset_factory(self):
206        self.pstr.reset()
207
208class TestFactoryDict(TestCase):
209    def setUp(self):
210        self.dict=FactoryDict(str.upper)
211   
212    def test_gen(self):
213        self.assertEqual(self.dict["test"],"TEST")
214        self.assertEqual(self.dict.data.keys(),["test"])
215        del self.dict["test"]
Note: See TracBrowser for help on using the browser.