summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDamien George <damien@micropython.org>2024-06-18 17:35:24 +1000
committerDamien George <damien@micropython.org>2024-06-18 22:23:16 +1000
commite9c898cb3312c2e2cf9e0da1d099541bf7bdf4d2 (patch)
tree0f99a3264aa04767883a85cd8d173a88c3ba06cf /tests
parenta053e639147d97c4a306ab272c12d9520a80e805 (diff)
webassembly/asyncio: Support top-level await of asyncio Task and Event.
This change allows doing a top-level await on an asyncio primitive like Task and Event. This feature enables a better interaction and synchronisation between JavaScript and Python, because `api.runPythonAsync` can now be used (called from JavaScript) to await on the completion of asyncio primitives. Signed-off-by: Damien George <damien@micropython.org>
Diffstat (limited to 'tests')
-rw-r--r--tests/ports/webassembly/asyncio_top_level_await.mjs25
-rw-r--r--tests/ports/webassembly/asyncio_top_level_await.mjs.exp7
2 files changed, 32 insertions, 0 deletions
diff --git a/tests/ports/webassembly/asyncio_top_level_await.mjs b/tests/ports/webassembly/asyncio_top_level_await.mjs
new file mode 100644
index 000000000..d8a9cad42
--- /dev/null
+++ b/tests/ports/webassembly/asyncio_top_level_await.mjs
@@ -0,0 +1,25 @@
+// Test top-level await on asyncio primitives: Task, Event.
+
+const mp = await (await import(process.argv[2])).loadMicroPython();
+
+await mp.runPythonAsync(`
+import asyncio
+
+async def task(event):
+ print("task set event")
+ event.set()
+ print("task sleep")
+ await asyncio.sleep(0.1)
+ print("task end")
+
+event = asyncio.Event()
+t = asyncio.create_task(task(event))
+
+print("top-level wait event")
+await event.wait()
+print("top-level wait task")
+await t
+print("top-level end")
+`);
+
+console.log("finished");
diff --git a/tests/ports/webassembly/asyncio_top_level_await.mjs.exp b/tests/ports/webassembly/asyncio_top_level_await.mjs.exp
new file mode 100644
index 000000000..7232c5d4f
--- /dev/null
+++ b/tests/ports/webassembly/asyncio_top_level_await.mjs.exp
@@ -0,0 +1,7 @@
+top-level wait event
+task set event
+task sleep
+top-level wait task
+task end
+top-level end
+finished