Просмотр исходного кода

Add a test to make sure event cache is invalidated correctly

Nuwan Goonasekera 7 лет назад
Родитель
Сommit
658f998431
2 измененных файлов с 29 добавлено и 0 удалено
  1. 2 0
      cloudbridge/cloud/base/events.py
  2. 27 0
      test/test_event_system.py

+ 2 - 0
cloudbridge/cloud/base/events.py

@@ -110,6 +110,8 @@ class SimpleEventDispatcher(EventDispatcher):
         handler_list = self.__events.get(event_handler.event_name, [])
         handler_list.append(event_handler)
         self.__events[event_handler.event_name] = handler_list
+        # invalidate cache
+        self.__handler_cache = {}
 
     def observe(self, event_name, priority, callback):
         handler = ObservingEventHandler(event_name, priority, callback)

+ 27 - 0
test/test_event_system.py

@@ -273,3 +273,30 @@ class EventSystemTestCase(unittest.TestCase):
             "Event handlers executed in unexpected order {0}".format(
                 callback_tracker[0]))
         self.assertEqual(result, "helloworld")
+
+    # make sure cache gets invalidated when subscribing after emit
+    def test_subscribe_after_emit(self):
+        callback_tracker = ['']
+
+        def my_callback1(**kwargs):
+            callback_tracker[0] += "event1_"
+            if kwargs.get('next_handler'):
+                return "hello" + kwargs.get('next_handler').invoke(**kwargs)
+            else:
+                return "hello"
+
+        def my_callback2(**kwargs):
+            callback_tracker[0] += "event2_"
+            return "some"
+
+        dispatcher = SimpleEventDispatcher()
+        dispatcher.intercept("event.hello.world", 1000, my_callback1)
+        dispatcher.emit(self, "event.hello.world")
+        dispatcher.intercept("event.hello.*", 1001, my_callback2)
+        result = dispatcher.emit(self, "event.hello.world")
+
+        self.assertEqual(
+            callback_tracker[0], "event1_event1_event2_",
+            "Event handlers executed in unexpected order {0}".format(
+                callback_tracker[0]))
+        self.assertEqual(result, "hellosome")