summaryrefslogtreecommitdiff
path: root/tests/testdata/workers/node_worker_message_port.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/testdata/workers/node_worker_message_port.mjs')
-rw-r--r--tests/testdata/workers/node_worker_message_port.mjs41
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/testdata/workers/node_worker_message_port.mjs b/tests/testdata/workers/node_worker_message_port.mjs
new file mode 100644
index 000000000..71640fb40
--- /dev/null
+++ b/tests/testdata/workers/node_worker_message_port.mjs
@@ -0,0 +1,41 @@
+import workerThreads from "node:worker_threads";
+
+const { port1: mainPort, port2: workerPort } = new workerThreads
+ .MessageChannel();
+
+// Note: not using Promise.withResolver() because it's not available in Node.js
+const deferred = createDeferred();
+
+const worker = new workerThreads.Worker(
+ import.meta.resolve("./node_worker_message_port_1.cjs"),
+ {
+ workerData: { workerPort },
+ transferList: [workerPort],
+ },
+);
+
+worker.on("message", (data) => {
+ console.log("worker:", data);
+ mainPort.on("message", (msg) => {
+ console.log("mainPort:", msg);
+ deferred.resolve();
+ });
+ mainPort.on("close", (_msg) => {
+ console.log("mainPort closed");
+ });
+});
+
+worker.postMessage("Hello from parent");
+await deferred.promise;
+await worker.terminate();
+mainPort.close();
+
+function createDeferred() {
+ let resolveCallback;
+ let rejectCallback;
+ const promise = new Promise((resolve, reject) => {
+ resolveCallback = resolve;
+ rejectCallback = reject;
+ });
+ return { promise, resolve: resolveCallback, reject: rejectCallback };
+}