diff --git a/sleekxmpp/xmlstream/xmlstream.py b/sleekxmpp/xmlstream/xmlstream.py index e047dbd..0a66a97 100644 --- a/sleekxmpp/xmlstream/xmlstream.py +++ b/sleekxmpp/xmlstream/xmlstream.py @@ -840,8 +840,9 @@ class XMLStream(object): def filter_pointers(handler): return handler[0] != pointer - self.__event_handlers[name] = filter(filter_pointers, - self.__event_handlers[name]) + self.__event_handlers[name] = list(filter( + filter_pointers, + self.__event_handlers[name])) def event_handled(self, name): """ diff --git a/tests/test_events.py b/tests/test_events.py index ea4cf8a..fb34be3 100644 --- a/tests/test_events.py +++ b/tests/test_events.py @@ -48,6 +48,29 @@ class TestEvents(SleekTest): msg = "Event was not triggered the correct number of times: %s" self.failUnless(happened == [True], msg % happened) + def testAddDelAddEvent(self): + """Test adding, then removing, then adding an event handler.""" + happened = [] + + def handletestevent(event): + happened.append(True) + + self.xmpp.add_event_handler("test_event", handletestevent) + self.xmpp.event("test_event", {}) + + self.xmpp.del_event_handler("test_event", handletestevent) + # Should not trigger because it was deleted + self.xmpp.event("test_event", {}) + + self.xmpp.add_event_handler("test_event", handletestevent) + self.xmpp.event("test_event", {}) + + # Give the event queue time to process. + time.sleep(0.1) + + msg = "Event was not triggered the correct number of times: %s" + self.failUnless(happened == [True, True], msg % happened) + def testDisposableEvent(self): """Test disposable handler working, then not being triggered again.""" happened = []