blob: 387784917102d793d93b964d695956b211aaa4e7 [file] [log] [blame] [edit]
# -*- coding: utf-8 -*-
import pytest
import pytest_trio.plugin # noqa
import trio
from pyee import TrioEventEmitter
class PyeeTestError(Exception):
pass
@pytest.mark.trio
async def test_trio_emit():
"""Test that the trio event emitter can handle wrapping
coroutines
"""
async with TrioEventEmitter() as ee:
should_call = trio.Event()
@ee.on("event")
async def event_handler():
should_call.set()
ee.emit("event")
result = False
with trio.move_on_after(0.1):
await should_call.wait()
result = True
assert result
@pytest.mark.trio
async def test_trio_once_emit():
"""Test that trio event emitters also wrap coroutines when
using once
"""
async with TrioEventEmitter() as ee:
should_call = trio.Event()
@ee.once("event")
async def event_handler():
should_call.set()
ee.emit("event")
result = False
with trio.move_on_after(0.1):
await should_call.wait()
result = True
assert result
@pytest.mark.trio
async def test_trio_error():
"""Test that trio event emitters can handle errors when
wrapping coroutines
"""
async with TrioEventEmitter() as ee:
send, rcv = trio.open_memory_channel(1)
@ee.on("event")
async def event_handler():
raise PyeeTestError()
@ee.on("error")
async def handle_error(exc):
async with send:
await send.send(exc)
ee.emit("event")
result = None
with trio.move_on_after(0.1):
async with rcv:
result = await rcv.__anext__()
assert isinstance(result, PyeeTestError)
@pytest.mark.trio
async def test_sync_error(event_loop):
"""Test that regular functions have the same error handling as coroutines"""
async with TrioEventEmitter() as ee:
send, rcv = trio.open_memory_channel(1)
@ee.on("event")
def sync_handler():
raise PyeeTestError()
@ee.on("error")
async def handle_error(exc):
async with send:
await send.send(exc)
ee.emit("event")
result = None
with trio.move_on_after(0.1):
async with rcv:
result = await rcv.__anext__()
assert isinstance(result, PyeeTestError)