summaryrefslogtreecommitdiff
path: root/tests/unit_node/worker_threads_test.ts
diff options
context:
space:
mode:
authorMarvin Hagemeister <marvin@deno.com>2024-05-20 15:01:40 +0200
committerGitHub <noreply@github.com>2024-05-20 15:01:40 +0200
commitd7709daaa09ebd40b5756a2ce6d3e1c0c3bf7984 (patch)
treed6e1eea4ebbab74a3fa5579127e3cc13952c1dbc /tests/unit_node/worker_threads_test.ts
parent927cbb5ecde7581fd80ce4c6ed013ba4e742d5df (diff)
fix(node): patch MessagePort in worker_thread message (#23871)
Our `MessagePort` to Node's `MessagePort` conversion logic was missing the case where a `MessagePort` is sent _inside_ the message. This broke `tinypool` which is used by `vitest` as it relies on some node specific methods on `MessagePort`. Fixes https://github.com/denoland/deno/issues/23854 , Fixes https://github.com/denoland/deno/pull/23871
Diffstat (limited to 'tests/unit_node/worker_threads_test.ts')
-rw-r--r--tests/unit_node/worker_threads_test.ts28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/unit_node/worker_threads_test.ts b/tests/unit_node/worker_threads_test.ts
index e16bc8966..9991e5787 100644
--- a/tests/unit_node/worker_threads_test.ts
+++ b/tests/unit_node/worker_threads_test.ts
@@ -562,3 +562,31 @@ Deno.test({
port1.close();
},
});
+
+// Test for https://github.com/denoland/deno/issues/23854
+Deno.test({
+ name: "[node/worker_threads] MessagePort.addListener is present",
+ async fn() {
+ const channel = new workerThreads.MessageChannel();
+ const worker = new workerThreads.Worker(
+ `
+ import { parentPort } from "node:worker_threads";
+ parentPort.addListener("message", message => {
+ if (message.foo) {
+ const success = typeof message.foo.bar.addListener === "function";
+ parentPort.postMessage(success ? "it works" : "it doesn't work")
+ }
+ })
+ `,
+ {
+ eval: true,
+ },
+ );
+ worker.postMessage({ foo: { bar: channel.port1 } }, [channel.port1]);
+
+ assertEquals((await once(worker, "message"))[0], "it works");
+ worker.terminate();
+ channel.port1.close();
+ channel.port2.close();
+ },
+});