summaryrefslogtreecommitdiff
path: root/cli/tests/workers/test.ts
diff options
context:
space:
mode:
authorLuca Casonato <hello@lcas.dev>2021-06-22 16:30:16 +0200
committerGitHub <noreply@github.com>2021-06-22 16:30:16 +0200
commit6261c89e04b8f1a3aabc771dbc8cddad904710e9 (patch)
tree6b1814991d77b8f238e507aa2f52e93589f3c0a1 /cli/tests/workers/test.ts
parent0a2ced57285aa0ee4b47426382c32fb53c4e07cd (diff)
feat: transfer MessagePort between workers (#11076)
Add support for transferring `MessagePort`s between workers.
Diffstat (limited to 'cli/tests/workers/test.ts')
-rw-r--r--cli/tests/workers/test.ts53
1 files changed, 53 insertions, 0 deletions
diff --git a/cli/tests/workers/test.ts b/cli/tests/workers/test.ts
index 6a572b92f..b37b7aeb1 100644
--- a/cli/tests/workers/test.ts
+++ b/cli/tests/workers/test.ts
@@ -769,3 +769,56 @@ Deno.test({
worker.terminate();
},
});
+
+Deno.test({
+ name: "worker with relative specifier",
+ fn: async function (): Promise<void> {
+ assertEquals(location.href, "http://127.0.0.1:4545/cli/tests/");
+ const promise = deferred();
+ const w = new Worker(
+ "./workers/test_worker.ts",
+ { type: "module", name: "tsWorker" },
+ );
+ w.onmessage = (e): void => {
+ assertEquals(e.data, "Hello, world!");
+ promise.resolve();
+ };
+ w.postMessage("Hello, world!");
+ await promise;
+ w.terminate();
+ },
+});
+
+Deno.test({
+ name: "Send MessagePorts from / to workers",
+ fn: async function (): Promise<void> {
+ const result = deferred();
+ const worker = new Worker(
+ new URL("message_port.ts", import.meta.url).href,
+ { type: "module" },
+ );
+
+ const channel = new MessageChannel();
+
+ worker.onmessage = (e) => {
+ assertEquals(e.data, "1");
+ assertEquals(e.ports.length, 1);
+ const port1 = e.ports[0];
+ port1.onmessage = (e) => {
+ assertEquals(e.data, true);
+ port1.close();
+ worker.postMessage("3", [channel.port1]);
+ };
+ port1.postMessage("2");
+ };
+
+ channel.port2.onmessage = (e) => {
+ assertEquals(e.data, true);
+ channel.port2.close();
+ result.resolve();
+ };
+
+ await result;
+ worker.terminate();
+ },
+});