~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_hooks.py

  • Committer: Andrew Bennetts
  • Date: 2011-02-25 08:45:27 UTC
  • mto: This revision was merged to the branch mainline in revision 5695.
  • Revision ID: andrew.bennetts@canonical.com-20110225084527-0ucp7p00d00hoqon
Add another test.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
from bzrlib import (
20
20
    branch,
21
21
    errors,
 
22
    pyutils,
22
23
    tests,
23
24
    )
24
25
from bzrlib.hooks import (
25
26
    HookPoint,
26
27
    Hooks,
 
28
    install_lazy_named_hook,
27
29
    known_hooks,
28
30
    known_hooks_key_to_object,
29
31
    known_hooks_key_to_parent_and_attribute,
 
32
    _lazy_hooks,
 
33
    )
 
34
from bzrlib.symbol_versioning import (
 
35
    deprecated_in,
30
36
    )
31
37
 
32
38
 
109
115
        hooks.install_named_hook('set_rh', None, "demo")
110
116
        self.assertEqual("demo", hooks.get_hook_name(None))
111
117
 
 
118
    hooks = Hooks("bzrlib.tests.test_hooks", "TestHooks.hooks")
 
119
 
 
120
    def test_install_lazy_named_hook(self):
 
121
        # When the hook points are not yet registered the hook is
 
122
        # added to the _lazy_hooks dictionary in bzrlib.hooks.
 
123
        self.hooks.add_hook('set_rh', "doc", (0, 15))
 
124
        set_rh = lambda: None
 
125
        install_lazy_named_hook('bzrlib.tests.test_hooks',
 
126
            'TestHooks.hooks', 'set_rh', set_rh, "demo")
 
127
        set_rh_lazy_hooks = _lazy_hooks[
 
128
            ('bzrlib.tests.test_hooks', 'TestHooks.hooks', 'set_rh')]
 
129
        self.assertEquals(1, len(set_rh_lazy_hooks))
 
130
        self.assertEquals(set_rh, set_rh_lazy_hooks[0][0].get_obj())
 
131
        self.assertEquals("demo", set_rh_lazy_hooks[0][1])
 
132
        self.assertEqual(list(TestHooks.hooks['set_rh']), [set_rh])
 
133
 
 
134
    set_rh = lambda: None
 
135
 
 
136
    def test_install_named_hook_lazy(self):
 
137
        hooks = Hooks()
 
138
        hooks['set_rh'] = HookPoint("set_rh", "doc", (0, 15), None)
 
139
        hooks.install_named_hook_lazy('set_rh', 'bzrlib.tests.test_hooks',
 
140
            'TestHooks.set_rh', "demo")
 
141
        self.assertEqual(list(hooks['set_rh']), [TestHooks.set_rh])
 
142
 
 
143
    def test_install_named_hook_lazy_old(self):
 
144
        # An exception is raised if a lazy hook is raised for
 
145
        # an old style hook point.
 
146
        hooks = Hooks()
 
147
        hooks['set_rh'] = []
 
148
        self.assertRaises(errors.UnsupportedOperation,
 
149
            hooks.install_named_hook_lazy,
 
150
            'set_rh', 'bzrlib.tests.test_hooks', 'TestHooks.set_rh',
 
151
            "demo")
 
152
 
 
153
    def test_valid_lazy_hooks(self):
 
154
        # Make sure that all the registered lazy hooks are referring to existing
 
155
        # hook points which allow lazy registration.
 
156
        for key, callbacks in _lazy_hooks.iteritems():
 
157
            (module_name, member_name, hook_name) = key
 
158
            obj = pyutils.get_named_object(module_name, member_name)
 
159
            self.assertEquals(obj._module, module_name)
 
160
            self.assertEquals(obj._member_name, member_name)
 
161
            self.assertTrue(hook_name in obj)
 
162
            self.assertIs(callbacks, obj[hook_name]._callbacks)
 
163
 
112
164
 
113
165
class TestHook(tests.TestCase):
114
166
 
141
193
        hook.hook(callback, "my callback")
142
194
        self.assertEqual([callback], list(hook))
143
195
 
 
196
    def lazy_callback():
 
197
        pass
 
198
 
 
199
    def test_lazy_hook(self):
 
200
        hook = HookPoint("foo", "no docs", None, None)
 
201
        hook.hook_lazy(
 
202
            "bzrlib.tests.test_hooks", "TestHook.lazy_callback",
 
203
            "my callback")
 
204
        self.assertEqual([TestHook.lazy_callback], list(hook))
 
205
 
144
206
    def test___repr(self):
145
207
        # The repr should list all the callbacks, with names.
146
208
        hook = HookPoint("foo", "no docs", None, None)
175
237
        self.assertIs(branch.Branch.hooks,
176
238
            known_hooks_key_to_object(('bzrlib.branch', 'Branch.hooks')))
177
239
 
 
240
    def test_known_hooks_key_to_parent_and_attribute_deprecated(self):
 
241
        self.assertEqual((branch.Branch, 'hooks'),
 
242
            self.applyDeprecated(deprecated_in((2,3)),
 
243
                known_hooks_key_to_parent_and_attribute,
 
244
                ('bzrlib.branch', 'Branch.hooks')))
 
245
        self.assertEqual((branch, 'Branch'),
 
246
            self.applyDeprecated(deprecated_in((2,3)),
 
247
                known_hooks_key_to_parent_and_attribute,
 
248
                ('bzrlib.branch', 'Branch')))
 
249
 
178
250
    def test_known_hooks_key_to_parent_and_attribute(self):
179
251
        self.assertEqual((branch.Branch, 'hooks'),
180
 
            known_hooks_key_to_parent_and_attribute(
 
252
            known_hooks.key_to_parent_and_attribute(
181
253
            ('bzrlib.branch', 'Branch.hooks')))
182
254
        self.assertEqual((branch, 'Branch'),
183
 
            known_hooks_key_to_parent_and_attribute(
 
255
            known_hooks.key_to_parent_and_attribute(
184
256
            ('bzrlib.branch', 'Branch')))