From c7c767782538243ded64742dca9b34d6af74d62d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Tue, 6 Oct 2020 10:18:22 +0200 Subject: fix(core): module execution with top level await (#7672) This commit fixes implementation of top level await in "deno_core". Previously promise returned from module execution was ignored causing to execute modules out-of-order. With this commit promise returned from module execution is stored on "JsRuntime" and event loop is polled until the promise resolves. --- cli/tests/integration_tests.rs | 10 ++++++++++ cli/tests/top_level_await_bug.js | 2 ++ cli/tests/top_level_await_bug.out | 1 + cli/tests/top_level_await_bug2.js | 15 +++++++++++++++ cli/tests/top_level_await_bug2.out | 4 ++++ cli/tests/top_level_await_bug_nested.js | 5 +++++ 6 files changed, 37 insertions(+) create mode 100644 cli/tests/top_level_await_bug.js create mode 100644 cli/tests/top_level_await_bug.out create mode 100644 cli/tests/top_level_await_bug2.js create mode 100644 cli/tests/top_level_await_bug2.out create mode 100644 cli/tests/top_level_await_bug_nested.js (limited to 'cli/tests') diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs index 8e2007b42..9ad7bac8c 100644 --- a/cli/tests/integration_tests.rs +++ b/cli/tests/integration_tests.rs @@ -2662,6 +2662,16 @@ itest!(ignore_require { exit_code: 0, }); +itest!(top_level_await_bug { + args: "run --allow-read top_level_await_bug.js", + output: "top_level_await_bug.out", +}); + +itest!(top_level_await_bug2 { + args: "run --allow-read top_level_await_bug2.js", + output: "top_level_await_bug2.out", +}); + #[test] fn cafile_env_fetch() { use deno_core::url::Url; diff --git a/cli/tests/top_level_await_bug.js b/cli/tests/top_level_await_bug.js new file mode 100644 index 000000000..3c6860a5b --- /dev/null +++ b/cli/tests/top_level_await_bug.js @@ -0,0 +1,2 @@ +const mod = await import("./top_level_await_bug_nested.js"); +console.log(mod); diff --git a/cli/tests/top_level_await_bug.out b/cli/tests/top_level_await_bug.out new file mode 100644 index 000000000..f0369645c --- /dev/null +++ b/cli/tests/top_level_await_bug.out @@ -0,0 +1 @@ +Module { default: 1, [Symbol(Symbol.toStringTag)]: "Module" } diff --git a/cli/tests/top_level_await_bug2.js b/cli/tests/top_level_await_bug2.js new file mode 100644 index 000000000..c847bbd34 --- /dev/null +++ b/cli/tests/top_level_await_bug2.js @@ -0,0 +1,15 @@ +const mod = await import("./top_level_await_bug_nested.js"); +console.log(mod); + +const sleep = (n) => new Promise((r) => setTimeout(r, n)); + +await sleep(100); +console.log("slept"); + +window.addEventListener("load", () => { + console.log("load event"); +}); + +setTimeout(() => { + console.log("timeout"); +}, 1000); diff --git a/cli/tests/top_level_await_bug2.out b/cli/tests/top_level_await_bug2.out new file mode 100644 index 000000000..509ee27c2 --- /dev/null +++ b/cli/tests/top_level_await_bug2.out @@ -0,0 +1,4 @@ +Module { default: 1, [Symbol(Symbol.toStringTag)]: "Module" } +slept +load event +timeout diff --git a/cli/tests/top_level_await_bug_nested.js b/cli/tests/top_level_await_bug_nested.js new file mode 100644 index 000000000..894f0de2d --- /dev/null +++ b/cli/tests/top_level_await_bug_nested.js @@ -0,0 +1,5 @@ +const sleep = (n) => new Promise((r) => setTimeout(r, n)); + +await sleep(100); + +export default 1; -- cgit v1.2.3