summaryrefslogtreecommitdiff
path: root/tests/unit_node/worker_threads_test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit_node/worker_threads_test.ts')
-rw-r--r--tests/unit_node/worker_threads_test.ts49
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/unit_node/worker_threads_test.ts b/tests/unit_node/worker_threads_test.ts
index 1ded9a591..f2ce00c84 100644
--- a/tests/unit_node/worker_threads_test.ts
+++ b/tests/unit_node/worker_threads_test.ts
@@ -238,3 +238,52 @@ Deno.test({
},
sanitizeResources: false,
});
+
+Deno.test({
+ name: "[worker_threads] Worker workerData with MessagePort",
+ async fn() {
+ const { port1: mainPort, port2: workerPort } = new workerThreads
+ .MessageChannel();
+ const deferred = Promise.withResolvers<void>();
+ const worker = new workerThreads.Worker(
+ `
+ import {
+ isMainThread,
+ MessageChannel,
+ parentPort,
+ receiveMessageOnPort,
+ Worker,
+ workerData,
+ } from "node:worker_threads";
+ parentPort.on("message", (msg) => {
+ console.log("message from main", msg);
+ parentPort.postMessage("Hello from worker on parentPort!");
+ workerData.workerPort.postMessage("Hello from worker on workerPort!");
+ });
+ `,
+ {
+ eval: true,
+ workerData: { workerPort },
+ transferList: [workerPort],
+ },
+ );
+
+ worker.on("message", (data) => {
+ assertEquals(data, "Hello from worker on parentPort!");
+ // TODO(bartlomieju): it would be better to use `mainPort.on("message")`,
+ // but we currently don't support it.
+ // https://github.com/denoland/deno/issues/22951
+ // Wait a bit so the message can arrive.
+ setTimeout(() => {
+ const msg = workerThreads.receiveMessageOnPort(mainPort)!.message;
+ assertEquals(msg, "Hello from worker on workerPort!");
+ deferred.resolve();
+ }, 500);
+ });
+
+ worker.postMessage("Hello from parent");
+ await deferred.promise;
+ await worker.terminate();
+ mainPort.close();
+ },
+});