Skip to content

Commit ddd1114

Browse files
committed
Extend tests.
1 parent 646b5a3 commit ddd1114

File tree

2 files changed

+55
-4
lines changed

2 files changed

+55
-4
lines changed

pymitter.py

+11-4
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ def on(func):
7777

7878
# create a new listener and add it
7979
self._event_tree.add_listener(event, Listener(func, event, ttl))
80+
8081
if self.new_listener and event != self.new_listener_event:
8182
self.emit(self.new_listener_event, func, event)
8283

@@ -104,6 +105,7 @@ def on_any(func):
104105

105106
# create a new listener and add it
106107
self._any_listeners.append(Listener(func, None, ttl))
108+
107109
if self.new_listener:
108110
self.emit(self.new_listener_event, func)
109111

@@ -162,22 +164,27 @@ def listeners_all(self) -> List[Callable]:
162164
"""
163165
Returns all registered functions, ordered by their registration time.
164166
"""
165-
listeners = []
166-
nodes = [self._event_tree]
167+
listeners = list(self._any_listeners)
168+
nodes = list(self._event_tree.nodes.values())
167169
while nodes:
168170
node = nodes.pop(0)
169-
listeners.extend(node.listeners)
170171
nodes.extend(node.nodes.values())
172+
listeners.extend(node.listeners)
171173

172174
# sort them
173175
listeners = sorted(listeners, key=lambda listener: listener.time)
174176

175177
return [listener.func for listener in listeners]
176178

177179
def _emit(self, event: str, *args, **kwargs) -> List[Awaitable]:
180+
listeners = self._event_tree.find_listeners(event)
181+
if event != self.new_listener_event:
182+
listeners.extend(self._any_listeners)
183+
listeners = sorted(listeners, key=lambda listener: listener.time)
184+
178185
# call listeners in order, keep track of awaitables from coroutines functions
179186
awaitables = []
180-
for listener in self._event_tree.find_listeners(event):
187+
for listener in listeners:
181188
# since listeners can emit events themselves,
182189
# deregister them before calling if needed
183190
if listener.ttl == 1:

tests.py

+44
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,50 @@ def handler():
7171
ee.emit("on_all.foo")
7272
self.assertTrue(stack[-1] == "on_all")
7373

74+
def test_on_any(self):
75+
ee = EventEmitter()
76+
stack = []
77+
78+
@ee.on("foo")
79+
def handler1():
80+
stack.append("foo")
81+
82+
@ee.on_any()
83+
def handler2():
84+
stack.append("bar")
85+
86+
ee.emit("foo")
87+
self.assertEqual(tuple(stack), ("foo", "bar"))
88+
89+
def test_listeners(self):
90+
ee = EventEmitter(wildcard=True)
91+
92+
@ee.on("foo")
93+
def h1():
94+
pass
95+
96+
@ee.on("foo")
97+
def h2():
98+
pass
99+
100+
@ee.on("bar")
101+
def h3():
102+
pass
103+
104+
@ee.once("baz")
105+
def h4():
106+
pass
107+
108+
@ee.on_any
109+
def h5():
110+
pass
111+
112+
self.assertEqual(tuple(ee.listeners_any()), (h5,))
113+
self.assertEqual(tuple(ee.listeners_all()), (h1, h2, h3, h4, h5))
114+
self.assertEqual(tuple(ee.listeners("foo")), (h1, h2))
115+
self.assertEqual(tuple(ee.listeners("bar")), (h3,))
116+
self.assertEqual(tuple(ee.listeners("ba?")), (h3, h4))
117+
74118
def test_emit_all(self):
75119
ee = EventEmitter(wildcard=True)
76120
stack = []

0 commit comments

Comments
 (0)