コード例 #1
0
def testHandleExcept1b():
    # create a listener that raises an exception:
    from raisinglistener import getRaisingListener
    raisingListener = getRaisingListener()
    pub.subscribe(raisingListener, 'testHandleExcept1b')

    # subscribe a good exception listener and validate
    # create the listener for uncaught exceptions in listeners:
    class UncaughtExcListener:
        def __call__(self, listenerStr=None, excTraceback=None):
            # verify that information received; first the listenerStr
            assert listenerStr.startswith('raisingListener')
            # next the traceback:
            tb = excTraceback.traceback
            assert len(tb) == 2

            def validateTB(tbItem, eFN, eLine, eFnN):
                assert tbItem[0].endswith(eFN), '%s !~ %s' % (tbItem[0], eFN)
                assert tbItem[1] == eLine
                assert tbItem[2] == eFnN

            validateTB(tb[0], 'raisinglistener.py', 5, 'raisingListener')
            validateTB(tb[1], 'raisinglistener.py', 4, 'nested')
            # next the formatted traceback:
            assert len(excTraceback.getFormattedList()) == len(tb) + 1
            # finally the string for formatted traceback:
            msg = excTraceback.getFormattedString()
            #print 'Msg "%s"' % msg
            assert msg.startswith('  File')
            assert msg.endswith("name 'RuntimeError2' is not defined\n")

    from pubsub.utils.exchandling import ExcPublisher
    topic = topicMgr.getTopic(ExcPublisher.topicUncaughtExc)
    assert not topic.hasListeners()
    handler = UncaughtExcListener()
    pub.subscribe(handler, ExcPublisher.topicUncaughtExc)
    pub.sendMessage('testHandleExcept1b')

    # verify that listener isn't stuck in a cyclic reference by sys.exc_info()
    del raisingListener
    gc.collect()  # for pypy: the gc doesn't work the same as cpython's
    assert not topicMgr.getTopic('testHandleExcept1b').hasListeners()
    pub.unsubscribe(handler, ExcPublisher.topicUncaughtExc)
コード例 #2
0
ファイル: test2d_except.py プロジェクト: schollii/pypubsub
def testHandleExcept1a():
    from pubsub.utils.exchandling import ExcPublisher
    excPublisher = ExcPublisher( pub.getDefaultTopicMgr() )
    pub.setListenerExcHandler(excPublisher)

    # create a listener that raises an exception:
    from raisinglistener import getRaisingListener
    raisingListener = getRaisingListener()

    pub.setNotificationFlags(all=False)
    pub.subscribe(raisingListener, 'testHandleExcept1a')

    # first test when a listener raises an exception and exception listener also raises!
    class BadUncaughtExcListener:
        def __call__(self, listenerStr=None, excTraceback=None):
            raise RuntimeError('bad exception listener!')
    handler = BadUncaughtExcListener()
    pub.subscribe(handler, ExcPublisher.topicUncaughtExc)
    pytest.raises(pub.ExcHandlerError, pub.sendMessage, 'testHandleExcept1a')
    pub.unsubscribe(handler, ExcPublisher.topicUncaughtExc)
コード例 #3
0
ファイル: test2d_except.py プロジェクト: schollii/pypubsub
def testHandleExcept1b():
    # create a listener that raises an exception:
    from raisinglistener import getRaisingListener
    raisingListener = getRaisingListener()
    pub.subscribe(raisingListener, 'testHandleExcept1b')

    # subscribe a good exception listener and validate
    # create the listener for uncaught exceptions in listeners:
    class UncaughtExcListener:
        def __call__(self, listenerStr=None, excTraceback=None):
            # verify that information received; first the listenerStr
            assert listenerStr.startswith('raisingListener')
            # next the traceback:
            tb = excTraceback.traceback
            assert len(tb) == 2
            def validateTB(tbItem, eFN, eLine, eFnN):
                assert tbItem[0].endswith(eFN), '%s !~ %s' % (tbItem[0], eFN)
                assert tbItem[1] == eLine
                assert tbItem[2] == eFnN
            validateTB(tb[0], 'raisinglistener.py', 5, 'raisingListener')
            validateTB(tb[1], 'raisinglistener.py', 4, 'nested')
            # next the formatted traceback:
            assert len( excTraceback.getFormattedList() ) == len(tb)+1
            # finally the string for formatted traceback:
            msg = excTraceback.getFormattedString()
            #print 'Msg "%s"' % msg
            assert msg.startswith('  File')
            assert msg.endswith("name 'RuntimeError2' is not defined\n")

    from pubsub.utils.exchandling import ExcPublisher
    topic = topicMgr.getTopic( ExcPublisher.topicUncaughtExc )
    assert not topic.hasListeners()
    handler = UncaughtExcListener()
    pub.subscribe(handler, ExcPublisher.topicUncaughtExc)
    pub.sendMessage('testHandleExcept1b')

    # verify that listener isn't stuck in a cyclic reference by sys.exc_info()
    del raisingListener
    gc.collect() # for pypy: the gc doesn't work the same as cpython's
    assert not topicMgr.getTopic('testHandleExcept1b').hasListeners()
    pub.unsubscribe(handler, ExcPublisher.topicUncaughtExc)
コード例 #4
0
def testHandleExcept1a():
    from pubsub.utils.exchandling import ExcPublisher
    excPublisher = ExcPublisher(pub.getDefaultTopicMgr())
    pub.setListenerExcHandler(excPublisher)

    # create a listener that raises an exception:
    from raisinglistener import getRaisingListener
    raisingListener = getRaisingListener()

    pub.setNotificationFlags(all=False)
    pub.subscribe(raisingListener, 'testHandleExcept1a')

    # first test when a listener raises an exception and exception listener also raises!
    class BadUncaughtExcListener:
        def __call__(self, listenerStr=None, excTraceback=None):
            raise RuntimeError('bad exception listener!')

    handler = BadUncaughtExcListener()
    pub.subscribe(handler, ExcPublisher.topicUncaughtExc)
    pytest.raises(pub.ExcHandlerError, pub.sendMessage, 'testHandleExcept1a')
    pub.unsubscribe(handler, ExcPublisher.topicUncaughtExc)