forked from romilly/quick2wire-python-api
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_selector.py
More file actions
109 lines (77 loc) · 2.72 KB
/
test_selector.py
File metadata and controls
109 lines (77 loc) · 2.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
from contextlib import closing
from itertools import islice
from quick2wire.selector import Selector, INPUT, OUTPUT, ERROR, Semaphore, Timer
def test_selector_is_a_convenient_api_to_epoll():
selector = Selector()
ev1 = Semaphore(blocking=False)
with selector, ev1:
selector.add(ev1, INPUT)
ev1.signal()
selector.wait()
assert selector.ready == ev1
assert selector.has_input == True
assert selector.has_output == False
assert selector.has_error == False
assert selector.has_hangup == False
assert selector.has_priority_input == False
def test_event_mask_defaults_to_input_and_error():
selector = Selector()
ev1 = Semaphore(blocking=False)
with selector, ev1:
selector.add(ev1)
ev1.signal()
selector.wait(timeout=0)
assert selector.ready == ev1
assert selector.has_input == True
def test_selecting_from_multiple_event_sources():
selector = Selector()
ev1 = Semaphore(blocking=False)
ev2 = Semaphore(blocking=False)
with selector, ev1, ev2:
selector.add(ev1, INPUT)
selector.add(ev2, INPUT)
ev1.signal()
ev2.signal()
selector.wait()
first = selector.ready
first.wait()
selector.wait()
second = selector.ready
second.wait()
assert first in (ev1, ev2)
assert second in (ev1, ev2)
assert first is not second
def test_can_use_a_different_value_to_identify_the_event_source():
selector = Selector()
ev1 = Semaphore(blocking=False)
with selector, ev1:
selector.add(ev1, INPUT, identifier=999)
ev1.signal()
selector.wait()
assert selector.ready == 999
def test_can_wait_with_a_timeout():
selector = Selector()
ev1 = Semaphore(blocking=False)
with selector, ev1:
selector.add(ev1, INPUT, identifier=999)
selector.wait(timeout=0)
assert selector.ready == None
def test_can_remove_source_from_selector():
selector = Selector()
ev1 = Semaphore(blocking=False)
with selector, ev1:
selector.add(ev1, INPUT)
ev1.signal()
selector.wait(timeout=0)
assert selector.ready == ev1
selector.remove(ev1)
selector.wait(timeout=0)
assert selector.ready == None
def test_can_wait_for_timer():
selector = Selector()
timer = Timer(blocking=False,offset=0.0125)
with selector, timer:
selector.add(timer, INPUT)
timer.start()
selector.wait()
assert selector.ready == timer