def testHandleExcept1b(self): # create a listener that raises an exception: from lib_pubsub_except_raisinglistener import getRaisingListener raisingListener = getRaisingListener() self.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 self.assertEqual(len(tb), 2) def validateTB(tbItem, eFN, eLine, eFnN, assertE=self.assertEqual): assert tbItem[0].endswith(eFN), '%s !~ %s' % (tbItem[0], eFN) assertE(tbItem[1], eLine) assertE(tbItem[2], eFnN) validateTB(tb[0], 'lib_pubsub_except_raisinglistener.py', 5, 'raisingListener') validateTB(tb[1], 'lib_pubsub_except_raisinglistener.py', 4, 'nested') # next the formatted traceback: self.assertEqual(len(excTraceback.getFormattedList()), len(tb) + 1) # finally the string for formatted traceback: msg = excTraceback.getFormattedString() assert msg.startswith(' File') assert msg.endswith( "global name 'RuntimeError2' is not defined\n") from wx.lib.pubsub.utils.exchandling import ExcPublisher topic = self.pub.getDefaultTopicMgr().getTopic( ExcPublisher.topicUncaughtExc) assert not topic.hasListeners() handler = UncaughtExcListener() handler.assertEqual = self.assertEqual self.pub.subscribe(handler, ExcPublisher.topicUncaughtExc) self.pub.sendMessage('testHandleExcept1b') # verify that listener isn't stuck in a cyclic reference by sys.exc_info() del raisingListener assert not self.pub.getDefaultTopicMgr().getTopic( 'testHandleExcept1b').hasListeners()
def testHandleExcept1a(self): from wx.lib.pubsub.utils.exchandling import ExcPublisher excPublisher = ExcPublisher(self.pub.getDefaultTopicMgr() ) self.pub.setListenerExcHandler(excPublisher) # create a listener that raises an exception: from lib_pubsub_except_raisinglistener import getRaisingListener raisingListener = getRaisingListener() self.pub.setNotificationFlags(all=False) self.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() self.pub.subscribe(handler, ExcPublisher.topicUncaughtExc) self.assertRaises(self.pub.ExcHandlerError, self.pub.sendMessage, 'testHandleExcept1a')
def testHandleExcept1a(self): from wx.lib.pubsub.utils.exchandling import ExcPublisher excPublisher = ExcPublisher(self.pub.getDefaultTopicMgr()) self.pub.setListenerExcHandler(excPublisher) # create a listener that raises an exception: from lib_pubsub_except_raisinglistener import getRaisingListener raisingListener = getRaisingListener() self.pub.setNotificationFlags(all=False) self.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() self.pub.subscribe(handler, ExcPublisher.topicUncaughtExc) self.assertRaises(self.pub.ExcHandlerError, self.pub.sendMessage, 'testHandleExcept1a')
def testHandleExcept1b(self): # create a listener that raises an exception: from lib_pubsub_except_raisinglistener import getRaisingListener raisingListener = getRaisingListener() self.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 self.assertEqual(len(tb), 2) def validateTB(tbItem, eFN, eLine, eFnN, assertE=self.assertEqual): assert tbItem[0].endswith(eFN), '%s !~ %s' % (tbItem[0], eFN) assertE(tbItem[1], eLine) assertE(tbItem[2], eFnN) validateTB(tb[0], 'lib_pubsub_except_raisinglistener.py', 5, 'raisingListener') validateTB(tb[1], 'lib_pubsub_except_raisinglistener.py', 4, 'nested') # next the formatted traceback: self.assertEqual(len(excTraceback.getFormattedList() ), len(tb)+1) # finally the string for formatted traceback: msg = excTraceback.getFormattedString() assert msg.startswith(' File') assert msg.endswith("global name 'RuntimeError2' is not defined\n") from wx.lib.pubsub.utils.exchandling import ExcPublisher topic = self.pub.getTopic(ExcPublisher.topicUncaughtExc) assert not topic.hasListeners() handler = UncaughtExcListener() handler.assertEqual = self.assertEqual self.pub.subscribe(handler, ExcPublisher.topicUncaughtExc) self.pub.sendMessage('testHandleExcept1b') # verify that listener isn't stuck in a cyclic reference by sys.exc_info() del raisingListener assert not self.pub.getTopic('testHandleExcept1b').hasListeners()