test/lib_event.py
changeset 56 07ed878c847b
parent 42 0ff56f7216ee
--- a/test/lib_event.py	Sat Sep 26 22:09:24 2009 +0300
+++ b/test/lib_event.py	Sat Sep 26 23:38:02 2009 +0300
@@ -1,7 +1,7 @@
 import unittest
 
 from qmsk.net.lib.event2.base import event_base
-from qmsk.net.lib.event2.event import event
+from qmsk.net.lib.event2.event import event, CallbackEvent
 from qmsk.net.lib.event2.constants import *
 
 import os
@@ -20,6 +20,7 @@
 
         self.res = (mask == self.ev_in)
 
+
 class TestEventBase (unittest.TestCase) :
     """
         Simple event_base bits
@@ -42,6 +43,7 @@
 
         self.assertFalse(self.ev_base.loop(nonblock=True))
 
+
 class TestEvent (unittest.TestCase) :
     """
         Simple event bits.
@@ -126,6 +128,93 @@
         
         ev = event(self.ev_base, 0, 0)
         ev.add()
+    
+    def test_init_nonalive (self) :
+        """
+            An event is not alive after init
+        """
+
+        ev = event(self.ev_base, 0, 0)
+
+        self.assertFalse(ev.alive)
+
+    def test_add_alive (self) :
+        """
+            An event is considered alive and pending after add
+        """
+
+        ev = event(self.ev_base, 0, EV_READ)
+        ev.add()
+
+        self.assertTrue(ev.alive)
+
+    def test_del_nonalive (self) :
+        """
+            An event is not considered alive anymore after del
+        """
+    
+        ev = event(self.ev_base, 0, EV_READ)
+        ev.add()
+
+        ev.delete()
+
+        self.assertFalse(ev.alive)
+
+    def test_fire_nonalive (self) :
+        """
+            An event is not considered alive anymore during callback execution the callback fires, nor afterwards
+        """
+
+        fired = []
+
+        def cb (ev, what) :
+            fired.append(1)
+
+            self.assertFalse(ev.alive)
+        
+        ev = CallbackEvent(self.ev_base, 0, EV_READ, cb)
+        ev.add(-1)
+        
+        self.ev_base.loop()
+
+        # fired
+        self.assertTrue(fired)
+        
+        # not alive anymore
+        self.assertFalse(ev.alive)
+
+    def test_fire_add_alive (self) :
+        """
+            An event is considered alive if it is re-added during callback exec
+        """
+
+        ev = CallbackEvent(self.ev_base, 0, EV_READ,
+            lambda ev, what: ev.add()
+        )
+
+        ev.add(0)
+
+        self.ev_base.loop(once=True, nonblock=True)
+
+        # still alive
+        self.assertTrue(ev.alive)
+    
+    def test_persistent_fire_alive (self) :
+        """
+            A persistent event is still considered alive during and after callback exec
+        """
+
+        ev = CallbackEvent(self.ev_base, 0, EV_READ,
+            lambda ev, what: self.assertTrue(ev.alive)
+        )
+
+        ev.add()
+
+        self.ev_base.loop(once=True, nonblock=True)
+        
+        # persists -> stays alive
+        self.assertTrue(ev.alive)
+
 
 class TestEventPipe (unittest.TestCase) :
     """