2 # Copyright (c) Twisted Matrix Laboratories.
3 # See LICENSE for details.
7 Test cases for twisted.hook module.
10 from twisted.python import hook
11 from twisted.trial import unittest
15 dummy class to help in testing.
21 self.calledBasePre = 0
22 self.calledBasePost = 0
31 self.calledBase = self.calledBase + 1
34 class SubClass(BaseClass):
40 another dummy initializer
42 BaseClass.__init__(self)
44 self.calledSubPost = 0
49 another dummy function
53 BaseClass.func(self, a, b)
54 self.calledSub = self.calledSub + 1
56 _clean_BaseClass = BaseClass.__dict__.copy()
57 _clean_SubClass = SubClass.__dict__.copy()
59 def basePre(base, a, b):
61 a pre-hook for the base class
63 base.calledBasePre = base.calledBasePre + 1
65 def basePost(base, a, b):
67 a post-hook for the base class
69 base.calledBasePost = base.calledBasePost + 1
71 def subPre(sub, a, b):
73 a pre-hook for the subclass
75 sub.calledSubPre = sub.calledSubPre + 1
77 def subPost(sub, a, b):
79 a post-hook for the subclass
81 sub.calledSubPost = sub.calledSubPost + 1
83 class HookTestCase(unittest.TestCase):
85 test case to make sure hooks are called
88 """Make sure we have clean versions of our classes."""
89 BaseClass.__dict__.clear()
90 BaseClass.__dict__.update(_clean_BaseClass)
91 SubClass.__dict__.clear()
92 SubClass.__dict__.update(_clean_SubClass)
94 def testBaseHook(self):
95 """make sure that the base class's hook is called reliably
98 self.assertEqual(base.calledBase, 0)
99 self.assertEqual(base.calledBasePre, 0)
101 self.assertEqual(base.calledBase, 1)
102 self.assertEqual(base.calledBasePre, 0)
103 hook.addPre(BaseClass, "func", basePre)
105 self.assertEqual(base.calledBase, 2)
106 self.assertEqual(base.calledBasePre, 1)
107 hook.addPost(BaseClass, "func", basePost)
109 self.assertEqual(base.calledBasePost, 1)
110 self.assertEqual(base.calledBase, 3)
111 self.assertEqual(base.calledBasePre, 2)
112 hook.removePre(BaseClass, "func", basePre)
113 hook.removePost(BaseClass, "func", basePost)
115 self.assertEqual(base.calledBasePost, 1)
116 self.assertEqual(base.calledBase, 4)
117 self.assertEqual(base.calledBasePre, 2)
119 def testSubHook(self):
120 """test interactions between base-class hooks and subclass hooks
123 self.assertEqual(sub.calledSub, 0)
124 self.assertEqual(sub.calledBase, 0)
126 self.assertEqual(sub.calledSub, 1)
127 self.assertEqual(sub.calledBase, 1)
128 hook.addPre(SubClass, 'func', subPre)
129 self.assertEqual(sub.calledSub, 1)
130 self.assertEqual(sub.calledBase, 1)
131 self.assertEqual(sub.calledSubPre, 0)
132 self.assertEqual(sub.calledBasePre, 0)
134 self.assertEqual(sub.calledSub, 2)
135 self.assertEqual(sub.calledBase, 2)
136 self.assertEqual(sub.calledSubPre, 1)
137 self.assertEqual(sub.calledBasePre, 0)
139 hook.addPre(BaseClass, 'func', basePre)
140 BaseClass.func(sub, 1, b=2)
142 self.assertEqual(sub.calledBase, 3)
143 self.assertEqual(sub.calledBasePre, 1, str(sub.calledBasePre))
145 self.assertEqual(sub.calledBasePre, 2)
146 self.assertEqual(sub.calledBase, 4)
147 self.assertEqual(sub.calledSubPre, 2)
148 self.assertEqual(sub.calledSub, 3)
150 testCases = [HookTestCase]