--- 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) :
"""