annotate examples/trac/trac/tests/core.py @ 39:93b4dcbafd7b trunk

Copy Trac to main branch.
author cmlenz
date Mon, 03 Jul 2006 18:53:27 +0000
parents
children
rev   line source
39
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
1 # -*- coding: utf-8 -*-
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
2 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
3 # Copyright (C) 2005 Edgewall Software
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
4 # Copyright (C) 2005 Christopher Lenz <cmlenz@gmx.de>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
5 # All rights reserved.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
6 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
7 # This software is licensed as described in the file COPYING, which
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
8 # you should have received as part of this distribution. The terms
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
9 # are also available at http://trac.edgewall.com/license.html.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
10 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
11 # This software consists of voluntary contributions made by many
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
12 # individuals. For the exact contribution history, see the revision
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
13 # history and logs, available at http://projects.edgewall.com/trac/.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
14 #
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
15 # Author: Christopher Lenz <cmlenz@gmx.de>
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
16
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
17 from trac.core import *
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
18
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
19 import unittest
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
20
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
21
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
22 class ITest(Interface):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
23 def test():
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
24 """Dummy function."""
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
25
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
26
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
27 class ComponentTestCase(unittest.TestCase):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
28
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
29 def setUp(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
30 from trac.core import ComponentManager, ComponentMeta
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
31 self.compmgr = ComponentManager()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
32
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
33 # Make sure we have no external components hanging around in the
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
34 # component registry
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
35 self.old_registry = ComponentMeta._registry
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
36 ComponentMeta._registry = {}
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
37
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
38 def tearDown(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
39 # Restore the original component registry
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
40 from trac.core import ComponentMeta
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
41 ComponentMeta._registry = self.old_registry
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
42
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
43 def test_base_class_not_registered(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
44 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
45 Make sure that the Component base class does not appear in the component
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
46 registry.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
47 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
48 from trac.core import ComponentMeta
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
49 assert Component not in ComponentMeta._components
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
50 self.assertRaises(TracError, self.compmgr.__getitem__, Component)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
51
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
52 def test_abstract_component_not_registered(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
53 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
54 Make sure that a Component class marked as abstract does not appear in
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
55 the component registry.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
56 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
57 from trac.core import ComponentMeta
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
58 class AbstractComponent(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
59 abstract = True
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
60 assert AbstractComponent not in ComponentMeta._components
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
61 self.assertRaises(TracError, self.compmgr.__getitem__,
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
62 AbstractComponent)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
63
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
64 def test_unregistered_component(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
65 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
66 Make sure the component manager refuses to manage classes not derived
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
67 from `Component`.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
68 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
69 class NoComponent(object): pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
70 self.assertRaises(TracError, self.compmgr.__getitem__, NoComponent)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
71
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
72 def test_component_registration(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
73 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
74 Verify that classes derived from `Component` are managed by the
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
75 component manager.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
76 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
77 class ComponentA(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
78 pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
79 assert self.compmgr[ComponentA]
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
80 assert ComponentA(self.compmgr)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
81
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
82 def test_component_identity(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
83 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
84 Make sure instantiating a component multiple times just returns the
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
85 same instance again.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
86 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
87 class ComponentA(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
88 pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
89 c1 = ComponentA(self.compmgr)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
90 c2 = ComponentA(self.compmgr)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
91 assert c1 is c2, 'Expected same component instance'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
92 c2 = self.compmgr[ComponentA]
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
93 assert c1 is c2, 'Expected same component instance'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
94
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
95 def test_component_initializer(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
96 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
97 Makes sure that a components' `__init__` method gets called.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
98 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
99 class ComponentA(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
100 def __init__(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
101 self.data = 'test'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
102 self.assertEqual('test', ComponentA(self.compmgr).data)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
103 ComponentA(self.compmgr).data = 'newtest'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
104 self.assertEqual('newtest', ComponentA(self.compmgr).data)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
105
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
106 def test_inherited_component_initializer(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
107 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
108 Makes sure that a the `__init__` method of a components' super-class
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
109 gets called if the component doesn't override it.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
110 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
111 class ComponentA(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
112 def __init__(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
113 self.data = 'foo'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
114 class ComponentB(ComponentA):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
115 def __init__(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
116 self.data = 'bar'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
117 class ComponentC(ComponentB):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
118 pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
119 self.assertEqual('bar', ComponentC(self.compmgr).data)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
120 ComponentC(self.compmgr).data = 'baz'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
121 self.assertEqual('baz', ComponentC(self.compmgr).data)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
122
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
123 def test_implements_called_outside_classdef(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
124 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
125 Verify that calling implements() outside a class definition raises an
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
126 `AssertionError`.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
127 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
128 try:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
129 implements()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
130 self.fail('Expected AssertionError')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
131 except AssertionError:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
132 pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
133
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
134 def test_implements_called_twice(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
135 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
136 Verify that calling implements() twice in a class definition raises an
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
137 `AssertionError`.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
138 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
139 try:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
140 class ComponentA(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
141 implements()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
142 implements()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
143 self.fail('Expected AssertionError')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
144 except AssertionError:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
145 pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
146
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
147 def test_attribute_access(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
148 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
149 Verify that accessing undefined attributes on components raises an
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
150 `AttributeError`.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
151 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
152 class ComponentA(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
153 pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
154 comp = ComponentA(self.compmgr)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
155 try:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
156 comp.foo
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
157 self.fail('Expected AttributeError')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
158 except AttributeError:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
159 pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
160
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
161 def test_nonconforming_extender(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
162 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
163 Verify that accessing a method of a declared extension point interface
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
164 raises a normal `AttributeError` if the component does not implement
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
165 the method.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
166 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
167 class ComponentA(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
168 tests = ExtensionPoint(ITest)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
169 class ComponentB(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
170 implements(ITest)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
171 tests = iter(ComponentA(self.compmgr).tests)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
172 try:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
173 tests.next().test()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
174 self.fail('Expected AttributeError')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
175 except AttributeError:
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
176 pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
177
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
178 def test_extension_point_with_no_extension(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
179 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
180 Verify that accessing an extension point with no extenders returns an
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
181 empty list.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
182 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
183 class ComponentA(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
184 tests = ExtensionPoint(ITest)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
185 tests = iter(ComponentA(self.compmgr).tests)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
186 self.assertRaises(StopIteration, tests.next)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
187
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
188 def test_extension_point_with_one_extension(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
189 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
190 Verify that a single component extending an extension point can be
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
191 accessed through the extension point attribute of the declaring
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
192 component.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
193 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
194 class ComponentA(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
195 tests = ExtensionPoint(ITest)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
196 class ComponentB(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
197 implements(ITest)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
198 def test(self): return 'x'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
199 tests = iter(ComponentA(self.compmgr).tests)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
200 self.assertEquals('x', tests.next().test())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
201 self.assertRaises(StopIteration, tests.next)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
202
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
203 def test_extension_point_with_two_extensions(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
204 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
205 Verify that two components extending an extension point can be accessed
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
206 through the extension point attribute of the declaring component.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
207 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
208 class ComponentA(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
209 tests = ExtensionPoint(ITest)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
210 class ComponentB(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
211 implements(ITest)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
212 def test(self): return 'x'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
213 class ComponentC(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
214 implements(ITest)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
215 def test(self): return 'y'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
216 tests = iter(ComponentA(self.compmgr).tests)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
217 self.assertEquals('x', tests.next().test())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
218 self.assertEquals('y', tests.next().test())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
219 self.assertRaises(StopIteration, tests.next)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
220
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
221 def test_inherited_extension_point(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
222 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
223 Verify that extension points are inherited to sub-classes.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
224 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
225 class BaseComponent(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
226 tests = ExtensionPoint(ITest)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
227 class ConcreteComponent(BaseComponent):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
228 pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
229 class ExtendingComponent(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
230 implements(ITest)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
231 def test(self): return 'x'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
232 tests = iter(ConcreteComponent(self.compmgr).tests)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
233 self.assertEquals('x', tests.next().test())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
234 self.assertRaises(StopIteration, tests.next)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
235
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
236 def test_inherited_implements(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
237 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
238 Verify that a component with a super-class implementing an extension
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
239 point interface is also registered as implementing that interface.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
240 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
241 class BaseComponent(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
242 implements(ITest)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
243 abstract = True
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
244 class ConcreteComponent(BaseComponent):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
245 pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
246 from trac.core import ComponentMeta
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
247 assert ConcreteComponent in ComponentMeta._registry[ITest]
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
248
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
249 def test_component_manager_component(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
250 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
251 Verify that a component manager can itself be a component with its own
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
252 extension points.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
253 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
254 from trac.core import ComponentManager
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
255 class ManagerComponent(ComponentManager, Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
256 tests = ExtensionPoint(ITest)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
257 def __init__(self, foo, bar):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
258 ComponentManager.__init__(self)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
259 self.foo, self.bar = foo, bar
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
260 class Extender(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
261 implements(ITest)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
262 def test(self): return 'x'
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
263 mgr = ManagerComponent('Test', 42)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
264 assert id(mgr) == id(mgr[ManagerComponent])
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
265 tests = iter(mgr.tests)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
266 self.assertEquals('x', tests.next().test())
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
267 self.assertRaises(StopIteration, tests.next)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
268
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
269 def test_instantiation_doesnt_enable(self):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
270 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
271 Make sure that a component disabled by the ComponentManager is not
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
272 implicitly enabled by instantiating it directly.
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
273 """
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
274 from trac.core import ComponentManager
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
275 class DisablingComponentManager(ComponentManager):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
276 def is_component_enabled(self, cls):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
277 return False
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
278 class ComponentA(Component):
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
279 pass
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
280 mgr = DisablingComponentManager()
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
281 instance = ComponentA(mgr)
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
282 self.assertEqual(None, mgr[ComponentA])
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
283
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
284
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
285 def suite():
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
286 return unittest.makeSuite(ComponentTestCase, 'test')
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
287
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
288 if __name__ == '__main__':
93b4dcbafd7b Copy Trac to main branch.
cmlenz
parents:
diff changeset
289 unittest.main()
Copyright (C) 2012-2017 Edgewall Software