Exemple #1
0
def test_DyingListenersClass():
    # 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
    assert len(lsrs) == 3
    del listener1
    gc.collect()  # for pypy: the gc doesn't work the same as cpython's
    assert len(lsrs) == 2
    assert lsrs[0] == listener2
    assert lsrs[1] == listener3
    del listener2
    gc.collect()  # for pypy: the gc doesn't work the same as cpython's
    assert len(lsrs) == 1
    assert lsrs[0] == listener3
    del listener3
    gc.collect()  # for pypy: the gc doesn't work the same as cpython's
    assert len(lsrs) == 0
Exemple #2
0
def test_call():
    aiMock = ArgsInfoMock()
    result = []

    def fn(a, b, c=1, d=2, **e):
        result.append((a, b, c, d, e))

    listener = Listener(fn, aiMock)
    listener(dict(a=123, b=456), 'test_topic')
    assert result[0] == (123, 456, 1, 2, {})

    listener = Listener(fn, aiMock, curriedArgs=dict(b=4, d=5, f=6))
    listener(dict(a=123), 'test_topic')
    assert result[1] == (123, 4, 1, 5, {'f': 6})
Exemple #3
0
def test_DOAListeners_2():
    # test DOA of tmp callable:
    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())
    gc.collect()  # for pypy: the gc doesn't work the same as cpython's
    assert doa1.getCallable() is None
    assert doa1.isDead()
    pytest.raises(RuntimeError, doa1, None, {})

    # check dead-on-arrival when a death callback specified:
    doa2 = Listener(Wrapper(fn), ArgsInfoMock(), onDead)
    gc.collect()  # for pypy: the gc doesn't work the same as cpython's
    assert doa2.getCallable() is None
    assert doa2.isDead()
    pytest.raises(RuntimeError, doa2, None, {})
Exemple #4
0
def test_ListenerEq():
    # 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
    assert l1 == l1
    assert l1 != l2
    assert l1 == listener1
    assert l1 != listener2
    ll = [l1]
    assert listener1 in ll
    assert listener2 not in ll
    assert 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())
    assert l3 != l1
    assert l3 != l2
    assert l3 != listener2
    assert l3 == l3
    assert l3 == listener3
    assert l3 != listener3.__call__

    l4 = Listener(listener3.meth, ArgsInfoMock())
    assert l4 == l4
    assert l4 != l3
    assert l4 != l2
    assert l4 != listener3.__call__
    assert l4 == listener3.meth
Exemple #5
0
def test_DOAListeners_2():
    # test DOA of tmp callable:
    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() )
    gc.collect() # for pypy: the gc doesn't work the same as cpython's
    assert doa1.getCallable() is None
    assert doa1.isDead()
    pytest.raises(RuntimeError, doa1, None, {})

    # check dead-on-arrival when a death callback specified:
    doa2 = Listener( Wrapper(fn), ArgsInfoMock(), onDead )
    gc.collect() # for pypy: the gc doesn't work the same as cpython's
    assert doa2.getCallable() is None
    assert doa2.isDead()
    pytest.raises(RuntimeError, doa2, None, {})
Exemple #6
0
def test_testNaming():
    aiMock = ArgsInfoMock()

    # define various type of listeners
    def fn():
        pass

    class Foo:
        def __call__(self):
            pass

        def meth(self):
            pass

    ll = Listener(fn, aiMock)
    assert ll.typeName() == "fn"
    assert ll.module() == "test1_listener"
    assert not ll.wantsTopicObjOnCall()

    foo = Foo()
    ll = Listener(foo, aiMock)
    assert ll.typeName() == "Foo"
    assert ll.module() == "test1_listener"
    assert not ll.wantsTopicObjOnCall()

    ll = Listener(foo.meth, ArgsInfoMock('argName'))
    assert ll.typeName() == "Foo.meth"
    assert ll.module() == "test1_listener"
    assert ll.wantsTopicObjOnCall()
Exemple #7
0
    def getListener1():
        class DOA:
            def tmpFn(self):
                pass

        return Listener(DOA.tmpFn, ArgsInfoMock())
Exemple #8
0
def test_testNaming():
    aiMock = ArgsInfoMock()

    # define various type of listeners
    def fn(): pass
    class Foo:
        def __call__(self): pass
        def meth(self): pass

    ll = Listener(fn, aiMock)
    assert ll.typeName() == "fn"
    assert ll.module() == "test1_listener"
    assert not ll.wantsTopicObjOnCall()

    foo = Foo()
    ll = Listener(foo, aiMock)
    assert ll.typeName() == "Foo"
    assert ll.module() == "test1_listener"
    assert not ll.wantsTopicObjOnCall()

    ll = Listener(foo.meth, ArgsInfoMock('argName'))
    assert ll.typeName() == "Foo.meth"
    assert ll.module() == "test1_listener"
    assert ll.wantsTopicObjOnCall()