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())
 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()