test/lib_event.py
author Tero Marttila <terom@fixme.fi>
Sat, 26 Sep 2009 23:38:02 +0300
changeset 56 07ed878c847b
parent 42 0ff56f7216ee
permissions -rw-r--r--
doctweaks and some skeleton tests for event-aliveness
40
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
import unittest
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
from qmsk.net.lib.event2.base import event_base
56
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
     4
from qmsk.net.lib.event2.event import event, CallbackEvent
40
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
from qmsk.net.lib.event2.constants import *
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
import os
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
class MyEvent (event) :
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
    def __init__ (self, base, fd, ev) :
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
        event.__init__(self, base, fd, ev)
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
        self.ev_in = ev
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
        self.ev_out = None
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
        self.res = None
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
    def __call__ (self, fd, mask) :
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
        self.ev_out = mask
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
        self.res = (mask == self.ev_in)
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
56
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
    23
40
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
class TestEventBase (unittest.TestCase) :
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
        Simple event_base bits
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
    def setUp (self) :
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
        self.ev_base = event_base()
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    def test_loop_empty (self) :
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
            loop() on an empty event_base returns False and doesn't block
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
        """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
        self.assertFalse(self.ev_base.loop(nonblock=False, once=False))
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
    def test_loop_empty_nb (self) :
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
        """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
            loop(nonblock=False) on an empty event_base returns False
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
        """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
        self.assertFalse(self.ev_base.loop(nonblock=True))
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
56
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
    46
42
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    47
class TestEvent (unittest.TestCase) :
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    48
    """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    49
        Simple event bits.
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    50
    """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    51
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    52
    def setUp (self) :
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    53
        self.ev_base = event_base()
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    54
        self.ev = event(self.ev_base, 0, EV_READ)
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    55
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    56
    def test_add (self) :
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    57
        """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    58
            .add() works.
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    59
        """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    60
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    61
        self.assertFalse(self.ev.pending(EV_READ))
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    62
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    63
        self.ev.add()
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    64
        
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    65
        self.assertTrue(self.ev.pending(EV_READ))
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    66
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    67
    def test_add_timeout (self) :
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    68
        """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    69
            .add() with timeout works
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    70
        """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    71
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    72
        self.ev.add(1.1)
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    73
        self.assertTrue(self.ev.pending())
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    74
    
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    75
    def test_add_del (self) :
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    76
        """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    77
            .add() and then .delete() works
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    78
        """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    79
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    80
        self.assertFalse(self.ev.pending())
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    81
        
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    82
        # add it in
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    83
        self.ev.add()
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    84
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    85
        self.assertTrue(self.ev.pending())
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    86
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    87
        # ensure that the ev_base is indeed not empty
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    88
        self.assertTrue(self.ev_base.loop(nonblock=True))
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    89
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    90
    
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    91
        # remove it again
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    92
        self.ev.delete()
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    93
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    94
        self.assertFalse(self.ev.pending())
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    95
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    96
        # ensure that the ev_base is indeed empty
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    97
        self.assertFalse(self.ev_base.loop(nonblock=True))
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    98
    
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
    99
    def test_invalid_base (self) :
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   100
        """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   101
            Building an event with invalid base (None) fails
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   102
        """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   103
        
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   104
        # XXX: this doesn't actually seem to check against None, just the type..?
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   105
        self.assertRaises(TypeError, event, None, 0, EV_READ)
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   106
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   107
    def test_illegal_fd (self) :
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   108
        """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   109
            Building an event with an illegal fd (-1) fails
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   110
        """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   111
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   112
        self.assertRaises(ValueError, event, self.ev_base, -1, EV_READ)
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   113
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   114
    def test_invalid_fd (self) :
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   115
        """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   116
            Building an event with an invalid fd (>= 0) fails when calling .add()
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   117
        """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   118
        
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   119
        ev = event(self.ev_base, 666, EV_READ)
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   120
        
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   121
        # XXX: be more specific about Exception
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   122
        self.assertRaises(Exception, ev.add)
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   123
    
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   124
    def test_invalid_mask_zero (self) :
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   125
        """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   126
            Building an event with an invalid mask (0)... XXX: works?
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   127
        """
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   128
        
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   129
        ev = event(self.ev_base, 0, 0)
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   130
        ev.add()
56
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   131
    
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   132
    def test_init_nonalive (self) :
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   133
        """
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   134
            An event is not alive after init
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   135
        """
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   136
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   137
        ev = event(self.ev_base, 0, 0)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   138
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   139
        self.assertFalse(ev.alive)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   140
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   141
    def test_add_alive (self) :
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   142
        """
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   143
            An event is considered alive and pending after add
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   144
        """
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   145
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   146
        ev = event(self.ev_base, 0, EV_READ)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   147
        ev.add()
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   148
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   149
        self.assertTrue(ev.alive)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   150
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   151
    def test_del_nonalive (self) :
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   152
        """
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   153
            An event is not considered alive anymore after del
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   154
        """
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   155
    
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   156
        ev = event(self.ev_base, 0, EV_READ)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   157
        ev.add()
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   158
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   159
        ev.delete()
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   160
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   161
        self.assertFalse(ev.alive)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   162
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   163
    def test_fire_nonalive (self) :
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   164
        """
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   165
            An event is not considered alive anymore during callback execution the callback fires, nor afterwards
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   166
        """
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   167
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   168
        fired = []
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   169
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   170
        def cb (ev, what) :
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   171
            fired.append(1)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   172
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   173
            self.assertFalse(ev.alive)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   174
        
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   175
        ev = CallbackEvent(self.ev_base, 0, EV_READ, cb)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   176
        ev.add(-1)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   177
        
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   178
        self.ev_base.loop()
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   179
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   180
        # fired
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   181
        self.assertTrue(fired)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   182
        
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   183
        # not alive anymore
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   184
        self.assertFalse(ev.alive)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   185
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   186
    def test_fire_add_alive (self) :
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   187
        """
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   188
            An event is considered alive if it is re-added during callback exec
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   189
        """
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   190
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   191
        ev = CallbackEvent(self.ev_base, 0, EV_READ,
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   192
            lambda ev, what: ev.add()
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   193
        )
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   194
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   195
        ev.add(0)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   196
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   197
        self.ev_base.loop(once=True, nonblock=True)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   198
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   199
        # still alive
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   200
        self.assertTrue(ev.alive)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   201
    
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   202
    def test_persistent_fire_alive (self) :
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   203
        """
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   204
            A persistent event is still considered alive during and after callback exec
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   205
        """
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   206
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   207
        ev = CallbackEvent(self.ev_base, 0, EV_READ,
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   208
            lambda ev, what: self.assertTrue(ev.alive)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   209
        )
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   210
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   211
        ev.add()
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   212
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   213
        self.ev_base.loop(once=True, nonblock=True)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   214
        
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   215
        # persists -> stays alive
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   216
        self.assertTrue(ev.alive)
07ed878c847b doctweaks and some skeleton tests for event-aliveness
Tero Marttila <terom@fixme.fi>
parents: 42
diff changeset
   217
42
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   218
40
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   219
class TestEventPipe (unittest.TestCase) :
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   220
    """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   221
        Test basic event stuff using a pipe.
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   222
    """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   223
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   224
    def setUp (self) :
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   225
        self.ev_base = event_base()
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   226
        self.fd_read, self.fd_write = os.pipe()
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   227
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   228
    def test_event (self) :
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   229
        """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   230
            Constructing an event works
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   231
        """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   232
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   233
        self.assertTrue(event(self.ev_base, self.fd_read, EV_READ))
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   234
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   235
    def test_read (self) :
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   236
        """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   237
            Read event on pipe with data fires
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   238
        """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   239
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   240
        ev = MyEvent(self.ev_base, self.fd_read, EV_READ)
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   241
        ev.add(0.1) # 100ms
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   242
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   243
        # trigger
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   244
        os.write(self.fd_write, "foo")
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   245
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   246
        # loop
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   247
        self.ev_base.loop(nonblock=True)
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   248
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   249
        # test
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   250
        self.assertEquals(ev.ev_out, EV_READ)
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   251
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   252
    def test_read_timeout (self) :
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   253
        """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   254
            Read event on empty pipe timeouts
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   255
        """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   256
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   257
        ev = MyEvent(self.ev_base, self.fd_read, EV_READ)
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   258
        ev.add(0.0)
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   259
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   260
        # loop
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   261
        self.ev_base.loop(once=True)
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   262
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   263
        # test
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   264
        self.assertEquals(ev.ev_out, EV_TIMEOUT)
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   265
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   266
    def test_read_nonblock (self) :
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   267
        """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   268
            Read event on empty pipe doesn't block loop with nonblock=True
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   269
        """
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   270
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   271
        ev = MyEvent(self.ev_base, self.fd_read, EV_READ)
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   272
        ev.add()
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   273
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   274
        # loop once
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   275
        self.ev_base.loop(nonblock=True)
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   276
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   277
        # test
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   278
        self.assertEquals(ev.ev_out, None)
42
0ff56f7216ee fix some segfaults with event
Tero Marttila <terom@fixme.fi>
parents: 40
diff changeset
   279
    
40
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   280
if __name__ == '__main__' :
a5d498bbf40a some lib.event2 unitests
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   281
    unittest.main()