async def test_once_emit_after_remove(self) -> None: mock = Mock() emitter.on(Event, Global, mock, once=True) emitter.remove(None, Global) e = Event("0") results = await asyncio.gather( emitter.emit(e, Global), emitter.emit(e, Global), emitter.emit(e, Global), emitter.emit(e, Global), emitter.emit(e, Global), ) self.assertListEqual([False, False, False, False, False], results) mock.assert_not_called()
async def test_once_emit_before_remove(self) -> None: e = Event("0") mock = Mock() emitter.on(Event, Global, mock, once=True) emit_task = asyncio.gather( emitter.emit(e, Global), emitter.emit(e, Global), emitter.emit(e, Global), emitter.emit(e, Global), emitter.emit(e, Global), ) emitter.remove(None, Global) results = await emit_task self.assertIn(True, results) results.remove(True) self.assertListEqual([False, False, False, False], results) mock.assert_called_once_with(e)
def emit(segments: List[emitter.Segment]) -> bytes: ret = binascii.unhexlify(b"cf702b56") for segment in segments: handled_segment = False for emitter in emitters: if not emitter.handles(segment): continue handled_segment = True ret += emitter.emit(segment) break if not handled_segment: raise ValueError("This is a compiler bug.") return ret
def test_emit_sync(self) -> None: mock = Mock() @emitter.on(Event, Global) def listener(event: Event) -> None: self.assertEqual("Wowow", event.data) mock(event) @emitter.on(Event, Global) async def listener(event: Event) -> None: await asyncio.sleep(0) self.assertEqual("Wowow", event.data) mock(event) e = Event("Wowow") self.assertTrue(emitter.emit(e, Global, sync=True)) mock.assert_called_once_with(e)