123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- import asyncio
- import pytest
- from nicegui import core
- from nicegui.awaitable_response import AwaitableResponse, NullResponse
- async def test_awaitable_response():
- core.loop = asyncio.get_event_loop()
- actions = []
- def do_something() -> AwaitableResponse:
- def fire_and_forget():
- actions.append('fire_and_forget')
- async def wait_for_result() -> str:
- actions.append('wait_for_result')
- return 'result'
- return AwaitableResponse(fire_and_forget, wait_for_result)
- actions.clear()
- do_something()
- await asyncio.sleep(0.1)
- assert actions == ['fire_and_forget']
- actions.clear()
- result = await do_something()
- assert result == 'result'
- assert actions == ['wait_for_result']
- actions.clear()
- result = do_something()
- await asyncio.sleep(0.1)
- with pytest.raises(RuntimeError, match='AwaitableResponse must be awaited immediately after creation or not at all'):
- await result
- assert actions == ['fire_and_forget']
- async def test_null_response():
- NullResponse()
- core.loop = asyncio.get_event_loop()
- await NullResponse()
|