def test7_DyingListenersClass(self): # Test notification callbacks when listener dies # test dead listener notification def onDead(weakListener): lsrs.remove(weakListener) def listener1(): pass def listener2(): pass def listener3(): pass lsrs = [] lsrs.append(Listener(listener1, ArgsInfoMock(False), onDead=onDead)) lsrs.append(Listener(listener2, ArgsInfoMock(False), onDead=onDead)) lsrs.append(Listener(listener3, ArgsInfoMock(False), onDead=onDead)) # now force some listeners to die, verify lsrs list self.assertEqual(len(lsrs), 3) del listener1 self.assertEqual(len(lsrs), 2) self.assertEqual(lsrs[0], listener2) self.assertEqual(lsrs[1], listener3) del listener2 self.assertEqual(len(lsrs), 1) self.assertEqual(lsrs[0], listener3) del listener3 self.assertEqual(len(lsrs), 0)
def getListener2(): def fn(): pass class Wrapper: def __init__(self, func): self.func = func def __call__(self): pass def onDead(listenerObj): pass # check dead-on-arrival when no death callback specified: doa1 = Listener(Wrapper(fn), ArgsInfoMock()) assert doa1.getCallable() is None assert doa1.isDead() self.assertRaises(RuntimeError, doa1, None, {}) # check dead-on-arrival when a death callback specified: doa2 = Listener(Wrapper(fn), ArgsInfoMock(), onDead) assert doa2.getCallable() is None assert doa2.isDead() self.assertRaises(RuntimeError, doa2, None, {})
def test6_ListenerEq(self): # Test equality tests of two listeners def listener1(): pass def listener2(): pass l1 = Listener(listener1, ArgsInfoMock()) l2 = Listener(listener2, ArgsInfoMock()) # verify that Listener can be compared for equality to another Listener, weakref, or callable self.assertEqual(l1, l1) self.assertNotEqual(l1, l2) self.assertEqual(l1, listener1) self.assertNotEqual(l1, listener2) ll = [l1] assert listener1 in ll assert listener2 not in ll self.assertEqual(ll.index(listener1), 0) # now for class method listener: class MyListener: def __call__(self): pass def meth(self): pass listener3 = MyListener() l3 = Listener(listener3, ArgsInfoMock()) self.assertNotEqual(l3, l1) self.assertNotEqual(l3, l2) self.assertNotEqual(l3, listener2) self.assertEqual(l3, l3) self.assertEqual(l3, listener3) self.assertNotEqual(l3, listener3.__call__) l4 = Listener(listener3.meth, ArgsInfoMock()) self.assertEqual(l4, l4) self.assertNotEqual(l4, l3) self.assertNotEqual(l4, l2) self.assertNotEqual(l4, listener3.__call__) self.assertEqual(l4, listener3.meth)
def getListener2(): def fn(): pass class Wrapper: def __init__(self, func): self.func = func def __call__(self): pass def onDead(listenerObj): pass # check dead-on-arrival when no death callback specified: doa1 = Listener( Wrapper(fn), ArgsInfoMock() ) assert doa1.getCallable() is None assert doa1.isDead() self.assertRaises(RuntimeError, doa1, None, {}) # check dead-on-arrival when a death callback specified: doa2 = Listener( Wrapper(fn), ArgsInfoMock(), onDead ) assert doa2.getCallable() is None assert doa2.isDead() self.assertRaises(RuntimeError, doa2, None, {})
def test11_testNaming(self): aiMock = ArgsInfoMock() # define various type of listeners def fn(): pass class Foo: def __call__(self): pass def meth(self): pass ll = Listener(fn, aiMock) self.assertEqual(ll.typeName(), "fn") self.assertEqual(ll.module(), "test_lib_pubsub_listener") assert not ll.wantsTopicObjOnCall() foo = Foo() ll = Listener(foo, aiMock) self.assertEqual(ll.typeName(), "Foo") self.assertEqual(ll.module(), "test_lib_pubsub_listener") assert not ll.wantsTopicObjOnCall() ll = Listener(foo.meth, ArgsInfoMock('argName')) self.assertEqual(ll.typeName(), "Foo.meth") self.assertEqual(ll.module(), "test_lib_pubsub_listener") assert ll.wantsTopicObjOnCall()
def getListener1(): class DOA: def tmpFn(self): pass Listener(DOA.tmpFn, ArgsInfoMock())