summaryrefslogtreecommitdiff
path: root/tests/specs/run/top_level_await
diff options
context:
space:
mode:
Diffstat (limited to 'tests/specs/run/top_level_await')
-rw-r--r--tests/specs/run/top_level_await/__test__.jsonc4
-rw-r--r--tests/specs/run/top_level_await/hello.txt1
-rw-r--r--tests/specs/run/top_level_await/top_level_await/circular.js8
-rw-r--r--tests/specs/run/top_level_await/top_level_await/circular.out10
-rw-r--r--tests/specs/run/top_level_await/top_level_await/loop.js20
-rw-r--r--tests/specs/run/top_level_await/top_level_await/loop.out5
-rw-r--r--tests/specs/run/top_level_await/top_level_await/nested.out5
-rw-r--r--tests/specs/run/top_level_await/top_level_await/nested/a.js3
-rw-r--r--tests/specs/run/top_level_await/top_level_await/nested/b.js1
-rw-r--r--tests/specs/run/top_level_await/top_level_await/nested/main.js3
-rw-r--r--tests/specs/run/top_level_await/top_level_await/order.js21
-rw-r--r--tests/specs/run/top_level_await/top_level_await/order.out2
-rw-r--r--tests/specs/run/top_level_await/top_level_await/tla/a.js3
-rw-r--r--tests/specs/run/top_level_await/top_level_await/tla/b.js7
-rw-r--r--tests/specs/run/top_level_await/top_level_await/tla/c.js3
-rw-r--r--tests/specs/run/top_level_await/top_level_await/tla/d.js8
-rw-r--r--tests/specs/run/top_level_await/top_level_await/tla/order.js1
-rw-r--r--tests/specs/run/top_level_await/top_level_await/tla/parent.js9
-rw-r--r--tests/specs/run/top_level_await/top_level_await/tla2/a.js5
-rw-r--r--tests/specs/run/top_level_await/top_level_await/tla2/b.js5
-rw-r--r--tests/specs/run/top_level_await/top_level_await/tla3/b.js7
-rw-r--r--tests/specs/run/top_level_await/top_level_await/tla3/timeout_loop.js23
-rw-r--r--tests/specs/run/top_level_await/top_level_await/top_level_await.js3
-rw-r--r--tests/specs/run/top_level_await/top_level_await/top_level_await.out3
-rw-r--r--tests/specs/run/top_level_await/top_level_await/top_level_await.ts3
-rw-r--r--tests/specs/run/top_level_await/top_level_await/top_level_for_await.js10
-rw-r--r--tests/specs/run/top_level_await/top_level_await/top_level_for_await.out3
-rw-r--r--tests/specs/run/top_level_await/top_level_await/top_level_for_await.ts10
-rw-r--r--tests/specs/run/top_level_await/top_level_await/unresolved.js1
-rw-r--r--tests/specs/run/top_level_await/top_level_await/unresolved.out4
30 files changed, 191 insertions, 0 deletions
diff --git a/tests/specs/run/top_level_await/__test__.jsonc b/tests/specs/run/top_level_await/__test__.jsonc
new file mode 100644
index 000000000..25537db5f
--- /dev/null
+++ b/tests/specs/run/top_level_await/__test__.jsonc
@@ -0,0 +1,4 @@
+{
+ "args": "run --allow-read top_level_await/top_level_await.js",
+ "output": "top_level_await/top_level_await.out"
+}
diff --git a/tests/specs/run/top_level_await/hello.txt b/tests/specs/run/top_level_await/hello.txt
new file mode 100644
index 000000000..6769dd60b
--- /dev/null
+++ b/tests/specs/run/top_level_await/hello.txt
@@ -0,0 +1 @@
+Hello world! \ No newline at end of file
diff --git a/tests/specs/run/top_level_await/top_level_await/circular.js b/tests/specs/run/top_level_await/top_level_await/circular.js
new file mode 100644
index 000000000..ff2964b6a
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/circular.js
@@ -0,0 +1,8 @@
+import { foo } from "./tla3/timeout_loop.js";
+
+export const collection = [];
+
+const mod = await import("./tla3/b.js");
+
+console.log("foo in main", foo);
+console.log("mod", mod);
diff --git a/tests/specs/run/top_level_await/top_level_await/circular.out b/tests/specs/run/top_level_await/top_level_await/circular.out
new file mode 100644
index 000000000..c88978961
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/circular.out
@@ -0,0 +1,10 @@
+timeout loop 0
+timeout loop 1
+timeout loop 2
+timeout loop 3
+timeout loop 4
+timeout loop 5
+error: Top-level await promise never resolved
+const mod = await import("./tla3/b.js");
+ ^
+ at <anonymous> ([WILDCARD]/top_level_await/circular.js:5:13)
diff --git a/tests/specs/run/top_level_await/top_level_await/loop.js b/tests/specs/run/top_level_await/top_level_await/loop.js
new file mode 100644
index 000000000..f229e03f6
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/loop.js
@@ -0,0 +1,20 @@
+const importsDir = Deno.readDirSync(
+ Deno.realPathSync("./top_level_await/tla2"),
+);
+
+const resolvedPaths = [];
+
+for (const { name } of importsDir) {
+ const filePath = Deno.realPathSync(`./top_level_await/tla2/${name}`);
+ resolvedPaths.push(filePath);
+}
+
+resolvedPaths.sort();
+
+for (const filePath of resolvedPaths) {
+ console.log("loading", filePath);
+ const mod = await import(`file://${filePath}`);
+ console.log("loaded", mod);
+}
+
+console.log("all loaded");
diff --git a/tests/specs/run/top_level_await/top_level_await/loop.out b/tests/specs/run/top_level_await/top_level_await/loop.out
new file mode 100644
index 000000000..1bdffbf66
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/loop.out
@@ -0,0 +1,5 @@
+loading [WILDCARD]a.js
+loaded [Module: null prototype] { default: [class Foo] }
+loading [WILDCARD]b.js
+loaded [Module: null prototype] { default: [class Bar] }
+all loaded
diff --git a/tests/specs/run/top_level_await/top_level_await/nested.out b/tests/specs/run/top_level_await/top_level_await/nested.out
new file mode 100644
index 000000000..8a1218a10
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/nested.out
@@ -0,0 +1,5 @@
+1
+2
+3
+4
+5
diff --git a/tests/specs/run/top_level_await/top_level_await/nested/a.js b/tests/specs/run/top_level_await/top_level_await/nested/a.js
new file mode 100644
index 000000000..74837d4ba
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/nested/a.js
@@ -0,0 +1,3 @@
+console.log(2);
+await import("./b.js");
+console.log(4);
diff --git a/tests/specs/run/top_level_await/top_level_await/nested/b.js b/tests/specs/run/top_level_await/top_level_await/nested/b.js
new file mode 100644
index 000000000..3bd241b50
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/nested/b.js
@@ -0,0 +1 @@
+console.log(3);
diff --git a/tests/specs/run/top_level_await/top_level_await/nested/main.js b/tests/specs/run/top_level_await/top_level_await/nested/main.js
new file mode 100644
index 000000000..ed46a4717
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/nested/main.js
@@ -0,0 +1,3 @@
+console.log(1);
+await import("./a.js");
+console.log(5);
diff --git a/tests/specs/run/top_level_await/top_level_await/order.js b/tests/specs/run/top_level_await/top_level_await/order.js
new file mode 100644
index 000000000..30659cdfb
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/order.js
@@ -0,0 +1,21 @@
+// Ported from Node
+// https://github.com/nodejs/node/blob/54746bb763ebea0dc7e99d88ff4b379bcd680964/test/es-module/test-esm-tla.mjs
+
+const { default: order } = await import("./tla/parent.js");
+
+console.log("order", JSON.stringify(order));
+
+if (
+ !(
+ order[0] === "order" &&
+ order[1] === "b" &&
+ order[2] === "c" &&
+ order[3] === "d" &&
+ order[4] === "a" &&
+ order[5] === "parent"
+ )
+) {
+ throw new Error("TLA wrong order");
+}
+
+console.log("TLA order correct");
diff --git a/tests/specs/run/top_level_await/top_level_await/order.out b/tests/specs/run/top_level_await/top_level_await/order.out
new file mode 100644
index 000000000..4cc27858c
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/order.out
@@ -0,0 +1,2 @@
+order ["order","b","c","d","a","parent"]
+TLA order correct
diff --git a/tests/specs/run/top_level_await/top_level_await/tla/a.js b/tests/specs/run/top_level_await/top_level_await/tla/a.js
new file mode 100644
index 000000000..c3ef3f7db
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/tla/a.js
@@ -0,0 +1,3 @@
+import order from "./order.js";
+
+order.push("b");
diff --git a/tests/specs/run/top_level_await/top_level_await/tla/b.js b/tests/specs/run/top_level_await/top_level_await/tla/b.js
new file mode 100644
index 000000000..3271c92d8
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/tla/b.js
@@ -0,0 +1,7 @@
+import order from "./order.js";
+
+await new Promise((resolve) => {
+ setTimeout(resolve, 200);
+});
+
+order.push("a");
diff --git a/tests/specs/run/top_level_await/top_level_await/tla/c.js b/tests/specs/run/top_level_await/top_level_await/tla/c.js
new file mode 100644
index 000000000..806eb0a8b
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/tla/c.js
@@ -0,0 +1,3 @@
+import order from "./order.js";
+
+order.push("c");
diff --git a/tests/specs/run/top_level_await/top_level_await/tla/d.js b/tests/specs/run/top_level_await/top_level_await/tla/d.js
new file mode 100644
index 000000000..283ebf817
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/tla/d.js
@@ -0,0 +1,8 @@
+import order from "./order.js";
+
+const end = Date.now() + 500;
+while (end < Date.now()) {
+ // pass
+}
+
+order.push("d");
diff --git a/tests/specs/run/top_level_await/top_level_await/tla/order.js b/tests/specs/run/top_level_await/top_level_await/tla/order.js
new file mode 100644
index 000000000..f213a562c
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/tla/order.js
@@ -0,0 +1 @@
+export default ["order"];
diff --git a/tests/specs/run/top_level_await/top_level_await/tla/parent.js b/tests/specs/run/top_level_await/top_level_await/tla/parent.js
new file mode 100644
index 000000000..1ecc15463
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/tla/parent.js
@@ -0,0 +1,9 @@
+import order from "./order.js";
+import "./a.js";
+import "./b.js";
+import "./c.js";
+import "./d.js";
+
+order.push("parent");
+
+export default order;
diff --git a/tests/specs/run/top_level_await/top_level_await/tla2/a.js b/tests/specs/run/top_level_await/top_level_await/tla2/a.js
new file mode 100644
index 000000000..d07bcb94d
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/tla2/a.js
@@ -0,0 +1,5 @@
+export default class Foo {
+ constructor(message) {
+ this.message = message;
+ }
+}
diff --git a/tests/specs/run/top_level_await/top_level_await/tla2/b.js b/tests/specs/run/top_level_await/top_level_await/tla2/b.js
new file mode 100644
index 000000000..68e357c1e
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/tla2/b.js
@@ -0,0 +1,5 @@
+export default class Bar {
+ constructor(message) {
+ this.message = message;
+ }
+}
diff --git a/tests/specs/run/top_level_await/top_level_await/tla3/b.js b/tests/specs/run/top_level_await/top_level_await/tla3/b.js
new file mode 100644
index 000000000..d0349545e
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/tla3/b.js
@@ -0,0 +1,7 @@
+import { foo } from "./timeout_loop.js";
+import { collection } from "../circular.js";
+
+console.log("collection in b", collection);
+console.log("foo in b", foo);
+
+export const a = "a";
diff --git a/tests/specs/run/top_level_await/top_level_await/tla3/timeout_loop.js b/tests/specs/run/top_level_await/top_level_await/tla3/timeout_loop.js
new file mode 100644
index 000000000..860e6cd2a
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/tla3/timeout_loop.js
@@ -0,0 +1,23 @@
+export const foo = "foo";
+
+export function delay(ms) {
+ return new Promise((res) =>
+ setTimeout(() => {
+ res();
+ }, ms)
+ );
+}
+
+let i = 0;
+
+async function timeoutLoop() {
+ await delay(1000);
+ console.log("timeout loop", i);
+ i++;
+ if (i > 5) {
+ return;
+ }
+ timeoutLoop();
+}
+
+timeoutLoop();
diff --git a/tests/specs/run/top_level_await/top_level_await/top_level_await.js b/tests/specs/run/top_level_await/top_level_await/top_level_await.js
new file mode 100644
index 000000000..31c83caed
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/top_level_await.js
@@ -0,0 +1,3 @@
+const buf = await Deno.readFile("./hello.txt");
+const n = await Deno.stdout.write(buf);
+console.log(`\n\nwrite ${n}`);
diff --git a/tests/specs/run/top_level_await/top_level_await/top_level_await.out b/tests/specs/run/top_level_await/top_level_await/top_level_await.out
new file mode 100644
index 000000000..4b65d15fe
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/top_level_await.out
@@ -0,0 +1,3 @@
+Hello world!
+
+write 12
diff --git a/tests/specs/run/top_level_await/top_level_await/top_level_await.ts b/tests/specs/run/top_level_await/top_level_await/top_level_await.ts
new file mode 100644
index 000000000..8d47ceb21
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/top_level_await.ts
@@ -0,0 +1,3 @@
+const buf: Uint8Array = await Deno.readFile("./assets/hello.txt");
+const n: number = await Deno.stdout.write(buf);
+console.log(`\n\nwrite ${n}`);
diff --git a/tests/specs/run/top_level_await/top_level_await/top_level_for_await.js b/tests/specs/run/top_level_await/top_level_await/top_level_for_await.js
new file mode 100644
index 000000000..a330f6c71
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/top_level_for_await.js
@@ -0,0 +1,10 @@
+function* asyncGenerator() {
+ let i = 0;
+ while (i < 3) {
+ yield i++;
+ }
+}
+
+for await (const num of asyncGenerator()) {
+ console.log(num);
+}
diff --git a/tests/specs/run/top_level_await/top_level_await/top_level_for_await.out b/tests/specs/run/top_level_await/top_level_await/top_level_for_await.out
new file mode 100644
index 000000000..4539bbf2d
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/top_level_for_await.out
@@ -0,0 +1,3 @@
+0
+1
+2
diff --git a/tests/specs/run/top_level_await/top_level_await/top_level_for_await.ts b/tests/specs/run/top_level_await/top_level_await/top_level_for_await.ts
new file mode 100644
index 000000000..9179322d7
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/top_level_for_await.ts
@@ -0,0 +1,10 @@
+async function* asyncGenerator(): AsyncIterableIterator<number> {
+ let i = 0;
+ while (i < 3) {
+ yield i++;
+ }
+}
+
+for await (const num of asyncGenerator()) {
+ console.log(num);
+}
diff --git a/tests/specs/run/top_level_await/top_level_await/unresolved.js b/tests/specs/run/top_level_await/top_level_await/unresolved.js
new file mode 100644
index 000000000..231a8cd63
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/unresolved.js
@@ -0,0 +1 @@
+await new Promise(() => {});
diff --git a/tests/specs/run/top_level_await/top_level_await/unresolved.out b/tests/specs/run/top_level_await/top_level_await/unresolved.out
new file mode 100644
index 000000000..1f4ea5d38
--- /dev/null
+++ b/tests/specs/run/top_level_await/top_level_await/unresolved.out
@@ -0,0 +1,4 @@
+error: Top-level await promise never resolved
+await new Promise(() => {});
+^
+ at <anonymous> ([WILDCARD]top_level_await/unresolved.js:1:1)