davemds pushed a commit to branch master. http://git.enlightenment.org/bindings/python/python-efl.git/commit/?id=807f0417db9c639ee6e92b59bf9a20f4973f4cbc
commit 807f0417db9c639ee6e92b59bf9a20f4973f4cbc Author: Dave Andreoli <d...@gurumeditation.it> Date: Thu Mar 12 22:01:39 2015 +0100 Some tests for SmartObject callbacks --- tests/evas/test_06_object_smart.py | 103 +++++++++++++++++++++++++++++++++++-- 1 file changed, 99 insertions(+), 4 deletions(-) diff --git a/tests/evas/test_06_object_smart.py b/tests/evas/test_06_object_smart.py index dd8419b..b672f87 100644 --- a/tests/evas/test_06_object_smart.py +++ b/tests/evas/test_06_object_smart.py @@ -12,6 +12,11 @@ class MySmart(evas.Smart): obj.r1.geometry = (0, 0, w2, h2) obj.r2.geometry = (w2, h2, w2, h2) + @staticmethod + def move(obj, x, y): + obj.callback_call("event1") + + class MyObject(evas.SmartObject): def __init__(self, canvas, smart, *args, **kargs): evas.SmartObject.__init__(self, canvas, smart, *args, **kargs) @@ -26,6 +31,7 @@ class MyObject(evas.SmartObject): color="#00ff00") self.member_add(self.r2) + class SmartObjectTest(unittest.TestCase): def setUp(self): self.canvas = evas.Canvas(method="buffer", @@ -38,15 +44,104 @@ class SmartObjectTest(unittest.TestCase): self.assertEqual(self.obj.members, (self.obj.r1, self.obj.r2)) def testResize(self): - print(self.obj.geometry) - print(self.obj.r1.geometry) self.obj.resize(100, 100) - print(self.obj.geometry) - print(self.obj.r1.geometry) self.assertEqual(self.obj.r1.geometry, (0, 0, 50, 50)) self.assertEqual(self.obj.r2.geometry, (50, 50, 50, 50)) + def testCallbackSimple(self): + self.expected_cbs = 2 + def _event1_cb(obj): + self.expected_cbs -= 1 + self.obj.callback_add("event1", _event1_cb) + self.obj.move(1, 1) # should fire "event1" + self.obj.move(2, 2) # should fire "event1" + self.obj.callback_del("event1", _event1_cb) + self.obj.move(0, 0) # should NOT fire "event1" + self.assertEqual(self.expected_cbs, 0) + + def testCallbackArgs(self): + def _event1_cb(obj, arg1, arg2, arg3, mykarg2, mykarg1): + self.assertEqual(arg1, 11) + self.assertEqual(arg2, 22) + self.assertEqual(arg3, "arg3") + self.assertEqual(mykarg2, "k2") + self.assertEqual(mykarg1, "k1") + self.obj.callback_add("event1", _event1_cb, 11, 22, "arg3", mykarg1="k1", mykarg2="k2") + self.obj.move(1, 1) # should fire "event1" with the correct args + self.obj.callback_del("event1", _event1_cb) + self.obj.move(0, 0) + + def testCallbackMulti(self): + def _event1_cb1(obj): + self.expected_cbs += 1 + def _event1_cb2(obj): + self.expected_cbs += 10 + + self.expected_cbs = 0 + self.obj.callback_add("event1", _event1_cb1) + self.obj.move(1, 1) # should fire "event1" in cb1 + self.assertEqual(self.expected_cbs, 1) + + self.expected_cbs = 0 + self.obj.callback_add("event1", _event1_cb2) + self.obj.move(2, 2) # should fire "event1" in both cbs + self.assertEqual(self.expected_cbs, 11) + + self.expected_cbs = 0 + self.obj.callback_del("event1", _event1_cb1) + self.obj.move(3, 3) # should fire "event1" only in cb2 + self.assertEqual(self.expected_cbs, 10) + + self.expected_cbs = 0 + self.obj.callback_del("event1", _event1_cb2) + self.obj.move(0, 0) # should NOT fire "event1" + self.assertEqual(self.expected_cbs, 0) + + def testCallbackLots(self): + def _event1_cb(obj): + self.expected_cbs -= 1 + + self.expected_cbs = 20000 + self.obj.callback_add("event1", _event1_cb) + self.obj.callback_add("event1", _event1_cb) + for i in range(10000): + self.obj.move(i+1, i-1) # should fire "event1" 10000 times * 2 cbs + self.assertEqual(self.expected_cbs, 0) + self.obj.callback_del("event1", _event1_cb) + self.obj.callback_del("event1", _event1_cb) + self.obj.move(0, 0) # should NOT fire "event1" + self.assertEqual(self.expected_cbs, 0) + + def testCallbackLots2(self): + def _event1_cb(obj): + self.expected_cbs -= 1 + + self.expected_cbs = 10000 + for i in range(10000): + self.obj.callback_add("event1", _event1_cb) + self.obj.move(1, 1) + self.assertEqual(self.expected_cbs, 0) + for i in range(10000): + self.obj.callback_del("event1", _event1_cb) + self.assertRaises(ValueError, self.obj.callback_del, "event1", _event1_cb) + self.obj.move(0, 0) # should NOT fire "event1" + self.assertEqual(self.expected_cbs, 0) + + def testCallbackWrongDel1(self): + def _event1_cb(obj): + pass + self.assertRaises(ValueError, self.obj.callback_del, "event1", _event1_cb) + def testCallbackWrongDel2(self): + def _event1_cb(obj): + pass + self.obj.callback_add("event1", _event1_cb) + self.obj.callback_add("event1", _event1_cb) + self.obj.callback_del("event1", _event1_cb) + self.obj.callback_del("event1", _event1_cb) + self.assertRaises(ValueError, self.obj.callback_del, "event1", _event1_cb) + + if __name__ == '__main__': unittest.main(verbosity=2) evas.shutdown() --