diff options
Diffstat (limited to 'cli/tests/testdata/workers/test.ts')
-rw-r--r-- | cli/tests/testdata/workers/test.ts | 185 |
1 files changed, 96 insertions, 89 deletions
diff --git a/cli/tests/testdata/workers/test.ts b/cli/tests/testdata/workers/test.ts index 0ea9a7477..71f56a8c2 100644 --- a/cli/tests/testdata/workers/test.ts +++ b/cli/tests/testdata/workers/test.ts @@ -8,7 +8,6 @@ import { assertMatch, assertThrows, } from "../../../../test_util/std/testing/asserts.ts"; -import { deferred } from "../../../../test_util/std/async/deferred.ts"; Deno.test({ name: "worker terminate", @@ -22,20 +21,20 @@ Deno.test({ { type: "module", name: "tsWorker" }, ); - const promise1 = deferred(); + const deferred1 = Promise.withResolvers<string>(); jsWorker.onmessage = (e) => { - promise1.resolve(e.data); + deferred1.resolve(e.data); }; - const promise2 = deferred(); + const deferred2 = Promise.withResolvers<string>(); tsWorker.onmessage = (e) => { - promise2.resolve(e.data); + deferred2.resolve(e.data); }; jsWorker.postMessage("Hello World"); - assertEquals(await promise1, "Hello World"); + assertEquals(await deferred1.promise, "Hello World"); tsWorker.postMessage("Hello World"); - assertEquals(await promise2, "Hello World"); + assertEquals(await deferred2.promise, "Hello World"); tsWorker.terminate(); jsWorker.terminate(); }, @@ -49,9 +48,9 @@ Deno.test({ { type: "module", name: "tsWorker" }, ); - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<string>(); tsWorker.onmessage = (e) => { - promise.resolve(e.data); + resolve(e.data); }; tsWorker.postMessage("Hello World"); @@ -68,9 +67,10 @@ Deno.test({ { type: "module", name: "nested" }, ); - const promise = deferred(); + // deno-lint-ignore no-explicit-any + const { promise, resolve } = Promise.withResolvers<any>(); nestedWorker.onmessage = (e) => { - promise.resolve(e.data); + resolve(e.data); }; nestedWorker.postMessage("Hello World"); @@ -87,11 +87,11 @@ Deno.test({ { type: "module" }, ); - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<string>(); // deno-lint-ignore no-explicit-any throwingWorker.onerror = (e: any) => { e.preventDefault(); - promise.resolve(e.message); + resolve(e.message); }; assertMatch(await promise as string, /Uncaught Error: Thrown error/); @@ -108,9 +108,9 @@ Deno.test({ workerOptions, ); - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<string>(); w.onmessage = (e) => { - promise.resolve(e.data); + resolve(e.data); }; w.postMessage("Hello, world!"); @@ -128,9 +128,9 @@ Deno.test({ workerOptions, ); - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<string>(); w.onmessage = (e) => { - promise.resolve(e.data); + resolve(e.data); }; w.postMessage("Hello, world!"); @@ -147,15 +147,15 @@ Deno.test({ { type: "module" }, ); - const promise = deferred(); + const { promise, resolve, reject } = Promise.withResolvers<string>(); // deno-lint-ignore no-explicit-any fetchingWorker.onerror = (e: any) => { e.preventDefault(); - promise.reject(e.message); + reject(e.message); }; // Defer promise.resolve() to allow worker to shut down fetchingWorker.onmessage = (e) => { - promise.resolve(e.data); + resolve(e.data); }; assertEquals(await promise, "Done!"); @@ -166,7 +166,7 @@ Deno.test({ Deno.test({ name: "worker terminate busy loop", fn: async function () { - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<number>(); const busyWorker = new Worker( import.meta.resolve("./busy_worker.js"), @@ -183,7 +183,7 @@ Deno.test({ throw new Error("unreachable"); }; setTimeout(() => { - promise.resolve(testResult); + resolve(testResult); }, 100); } }; @@ -198,7 +198,7 @@ Deno.test({ fn: async function () { // See issue for details // https://github.com/denoland/deno/issues/4080 - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<void>(); const racyWorker = new Worker( import.meta.resolve("./racy_worker.js"), @@ -207,7 +207,7 @@ Deno.test({ racyWorker.onmessage = (_e) => { setTimeout(() => { - promise.resolve(); + resolve(); }, 100); }; @@ -222,8 +222,8 @@ Deno.test({ let messageHandlersCalled = 0; let errorHandlersCalled = 0; - const promise1 = deferred(); - const promise2 = deferred(); + const deferred1 = Promise.withResolvers<void>(); + const deferred2 = Promise.withResolvers<void>(); const worker = new Worker( import.meta.resolve("./event_worker.js"), @@ -238,7 +238,7 @@ Deno.test({ }); worker.addEventListener("message", (_e: Event) => { messageHandlersCalled++; - promise1.resolve(); + deferred1.resolve(); }); worker.onerror = (e) => { @@ -250,15 +250,15 @@ Deno.test({ }); worker.addEventListener("error", (_e: Event) => { errorHandlersCalled++; - promise2.resolve(); + deferred2.resolve(); }); worker.postMessage("ping"); - await promise1; + await deferred1.promise; assertEquals(messageHandlersCalled, 3); worker.postMessage("boom"); - await promise2; + await deferred2.promise; assertEquals(errorHandlersCalled, 3); worker.terminate(); }, @@ -272,9 +272,10 @@ Deno.test({ { type: "module" }, ); - const promise = deferred(); + // deno-lint-ignore no-explicit-any + const { promise, resolve } = Promise.withResolvers<any>(); worker.onmessage = (e: MessageEvent) => { - promise.resolve(e.data); + resolve(e.data); }; worker.onerror = (_e) => { throw new Error("unreachable"); @@ -298,10 +299,10 @@ Deno.test({ { type: "module", deno: { permissions: "inherit" } }, ); - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<string>(); denoWorker.onmessage = (e) => { denoWorker.terminate(); - promise.resolve(e.data); + resolve(e.data); }; denoWorker.postMessage("Hello World"); @@ -317,9 +318,9 @@ Deno.test({ { type: "module" }, ); - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<boolean>(); w.onmessage = (e) => { - promise.resolve(e.data); + resolve(e.data); }; w.postMessage(null); @@ -331,7 +332,7 @@ Deno.test({ Deno.test({ name: "Worker event handler order", fn: async function () { - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<void>(); const w = new Worker( import.meta.resolve("./test_worker.ts"), { type: "module", name: "tsWorker" }, @@ -343,7 +344,7 @@ Deno.test({ }; w.addEventListener("message", () => arr.push(3)); w.addEventListener("message", () => { - promise.resolve(); + resolve(); }); w.postMessage("Hello World"); await promise; @@ -355,13 +356,13 @@ Deno.test({ Deno.test({ name: "Worker immediate close", fn: async function () { - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<void>(); const w = new Worker( import.meta.resolve("./immediately_close_worker.js"), { type: "module" }, ); setTimeout(() => { - promise.resolve(); + resolve(); }, 1000); await promise; w.terminate(); @@ -371,7 +372,7 @@ Deno.test({ Deno.test({ name: "Worker post undefined", fn: async function () { - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<void>(); const worker = new Worker( import.meta.resolve("./post_undefined.ts"), { type: "module" }, @@ -380,7 +381,7 @@ Deno.test({ const handleWorkerMessage = (e: MessageEvent) => { console.log("main <- worker:", e.data); worker.terminate(); - promise.resolve(); + resolve(); }; worker.addEventListener("messageerror", () => console.log("message error")); @@ -399,9 +400,9 @@ Deno.test("Worker inherits permissions", async function () { { type: "module", deno: { permissions: "inherit" } }, ); - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<boolean>(); worker.onmessage = (e) => { - promise.resolve(e.data); + resolve(e.data); }; worker.postMessage(null); @@ -415,9 +416,9 @@ Deno.test("Worker limit children permissions", async function () { { type: "module", deno: { permissions: { read: false } } }, ); - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<boolean>(); worker.onmessage = (e) => { - promise.resolve(e.data); + resolve(e.data); }; worker.postMessage(null); @@ -443,8 +444,9 @@ Deno.test("Worker limit children permissions granularly", async function () { }, }, ); - const promise = deferred(); - worker.onmessage = ({ data }) => promise.resolve(data); + // deno-lint-ignore no-explicit-any + const { promise, resolve } = Promise.withResolvers<any>(); + worker.onmessage = ({ data }) => resolve(data); assertEquals(await promise, { envGlobal: "prompt", envFoo: "granted", @@ -482,8 +484,9 @@ Deno.test("Nested worker limit children permissions", async function () { import.meta.resolve("./parent_read_check_worker.js"), { type: "module", deno: { permissions: "inherit" } }, ); - const promise = deferred(); - worker.onmessage = ({ data }) => promise.resolve(data); + // deno-lint-ignore no-explicit-any + const { promise, resolve } = Promise.withResolvers<any>(); + worker.onmessage = ({ data }) => resolve(data); assertEquals(await promise, { envGlobal: "prompt", envFoo: "prompt", @@ -541,9 +544,9 @@ Deno.test("Worker with disabled permissions", async function () { { type: "module", deno: { permissions: "none" } }, ); - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<boolean>(); worker.onmessage = (e) => { - promise.resolve(e.data); + resolve(e.data); }; worker.postMessage(null); @@ -557,9 +560,10 @@ Deno.test("Worker permissions are not inherited with empty permission object", a { type: "module", deno: { permissions: {} } }, ); - const promise = deferred(); + // deno-lint-ignore no-explicit-any + const { promise, resolve } = Promise.withResolvers<any>(); worker.onmessage = (e) => { - promise.resolve(e.data); + resolve(e.data); }; worker.postMessage(null); @@ -581,9 +585,10 @@ Deno.test("Worker permissions are not inherited with single specified permission { type: "module", deno: { permissions: { net: true } } }, ); - const promise = deferred(); + // deno-lint-ignore no-explicit-any + const { promise, resolve } = Promise.withResolvers<any>(); worker.onmessage = (e) => { - promise.resolve(e.data); + resolve(e.data); }; worker.postMessage(null); @@ -615,11 +620,11 @@ Deno.test("Worker with invalid permission arg", function () { Deno.test({ name: "worker location", fn: async function () { - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<string>(); const workerModuleHref = import.meta.resolve("./worker_location.ts"); const w = new Worker(workerModuleHref, { type: "module" }); w.onmessage = (e) => { - promise.resolve(e.data); + resolve(e.data); }; w.postMessage("Hello, world!"); assertEquals(await promise, `${workerModuleHref}, true`); @@ -635,9 +640,9 @@ Deno.test({ "./workers/test_worker.ts", { type: "module", name: "tsWorker" }, ); - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<string>(); w.onmessage = (e) => { - promise.resolve(e.data); + resolve(e.data); }; w.postMessage("Hello, world!"); assertEquals(await promise, "Hello, world!"); @@ -648,7 +653,7 @@ Deno.test({ Deno.test({ name: "Worker with top-level-await", fn: async function () { - const result = deferred(); + const { promise, resolve, reject } = Promise.withResolvers<void>(); const worker = new Worker( import.meta.resolve("./worker_with_top_level_await.ts"), { type: "module" }, @@ -657,12 +662,12 @@ Deno.test({ if (e.data == "ready") { worker.postMessage("trigger worker handler"); } else if (e.data == "triggered worker handler") { - result.resolve(); + resolve(); } else { - result.reject(new Error("Handler didn't run during top-level delay.")); + reject(new Error("Handler didn't run during top-level delay.")); } }; - await result; + await promise; worker.terminate(); }, }); @@ -670,15 +675,15 @@ Deno.test({ Deno.test({ name: "Worker with native HTTP", fn: async function () { - const result = deferred(); + const { promise, resolve } = Promise.withResolvers<void>(); const worker = new Worker( import.meta.resolve("./http_worker.js"), { type: "module", deno: { permissions: "inherit" } }, ); worker.onmessage = () => { - result.resolve(); + resolve(); }; - await result; + await promise; assert(worker); const response = await fetch("http://localhost:4506"); @@ -695,14 +700,14 @@ Deno.test({ { type: "module" }, ); - const result = deferred(); + // deno-lint-ignore no-explicit-any + const { promise, resolve } = Promise.withResolvers<any>(); worker.onmessage = (e) => { - result.resolve(e.data); + resolve(e.data); }; worker.postMessage("START"); - // deno-lint-ignore no-explicit-any - const data = await result as any; + const data = await promise; // self field should reference itself (circular ref) assert(data === data.self); // fields a and b refer to the same array @@ -729,9 +734,9 @@ Deno.test({ "./workers/test_worker.ts", { type: "module", name: "tsWorker" }, ); - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<string>(); w.onmessage = (e) => { - promise.resolve(e.data); + resolve(e.data); }; w.postMessage("Hello, world!"); assertEquals(await promise, "Hello, world!"); @@ -742,7 +747,7 @@ Deno.test({ Deno.test({ name: "worker SharedArrayBuffer", fn: async function () { - const promise = deferred(); + const { promise, resolve } = Promise.withResolvers<void>(); const workerOptions: WorkerOptions = { type: "module" }; const w = new Worker( import.meta.resolve("./shared_array_buffer.ts"), @@ -757,7 +762,7 @@ Deno.test({ w.onmessage = () => { w.postMessage([sab1, sab2]); w.onmessage = () => { - promise.resolve(); + resolve(); }; }; await promise; @@ -776,30 +781,31 @@ Deno.test({ ); const channel = new MessageChannel(); - const promise1 = deferred(); - const promise2 = deferred(); - const promise3 = deferred(); - const result = deferred(); + // deno-lint-ignore no-explicit-any + const deferred1 = Promise.withResolvers<any>(); + const deferred2 = Promise.withResolvers<boolean>(); + const deferred3 = Promise.withResolvers<boolean>(); + const result = Promise.withResolvers<void>(); worker.onmessage = (e) => { - promise1.resolve([e.data, e.ports.length]); + deferred1.resolve([e.data, e.ports.length]); const port1 = e.ports[0]; port1.onmessage = (e) => { - promise2.resolve(e.data); + deferred2.resolve(e.data); port1.close(); worker.postMessage("3", [channel.port1]); }; port1.postMessage("2"); }; channel.port2.onmessage = (e) => { - promise3.resolve(e.data); + deferred3.resolve(e.data); channel.port2.close(); result.resolve(); }; - assertEquals(await promise1, ["1", 1]); - assertEquals(await promise2, true); - assertEquals(await promise3, true); - await result; + assertEquals(await deferred1.promise, ["1", 1]); + assertEquals(await deferred2.promise, true); + assertEquals(await deferred3.promise, true); + await result.promise; worker.terminate(); }, }); @@ -818,14 +824,15 @@ Deno.test({ w.postMessage(null); - const memoryUsagePromise = deferred(); + // deno-lint-ignore no-explicit-any + const { promise, resolve } = Promise.withResolvers<any>(); w.onmessage = function (evt) { - memoryUsagePromise.resolve(evt.data); + resolve(evt.data); }; assertEquals( Object.keys( - await memoryUsagePromise as unknown as Record<string, number>, + await promise as unknown as Record<string, number>, ), ["rss", "heapTotal", "heapUsed", "external"], ); |