From e1338f0d3b7bec7e982ff874bff908a3ee81842f Mon Sep 17 00:00:00 2001 From: Anders Kaseorg Date: Tue, 4 Feb 2025 21:26:36 -0800 Subject: [PATCH] Add regression tests for #491 and #492 Signed-off-by: Anders Kaseorg --- tests/test_sync.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tests/test_sync.py b/tests/test_sync.py index 0c67308c..11667413 100644 --- a/tests/test_sync.py +++ b/tests/test_sync.py @@ -1208,3 +1208,33 @@ def test_function(**kwargs: Any) -> None: # SyncToAsync.__call__.loop.run_in_executor has a param named `task_context`. await test_function(task_context=1) + + +def test_nested_task() -> None: + async def inner() -> asyncio.Task[None]: + return asyncio.create_task(sync_to_async(print)("inner")) + + async def main() -> None: + task = await sync_to_async(async_to_sync(inner))() + await task + + async_to_sync(main)() + + +def test_nested_task_later() -> None: + def later(fut: asyncio.Future[asyncio.Task[None]]) -> None: + task = asyncio.create_task(sync_to_async(print)("later")) + fut.set_result(task) + + async def inner() -> asyncio.Future[asyncio.Task[None]]: + loop = asyncio.get_running_loop() + fut = loop.create_future() + loop.call_later(0.1, later, fut) + return fut + + async def main() -> None: + fut = await sync_to_async(async_to_sync(inner))() + task = await fut + await task + + async_to_sync(main)()