summaryrefslogtreecommitdiff
path: root/tests/testdata
diff options
context:
space:
mode:
Diffstat (limited to 'tests/testdata')
-rw-r--r--tests/testdata/workers/node_worker_message_port.mjs41
-rw-r--r--tests/testdata/workers/node_worker_message_port.mjs.out4
-rw-r--r--tests/testdata/workers/node_worker_message_port_1.cjs9
-rw-r--r--tests/testdata/workers/node_worker_transfer_port.mjs14
-rw-r--r--tests/testdata/workers/node_worker_transfer_port.mjs.out3
-rw-r--r--tests/testdata/workers/node_worker_transfer_port_1.mjs10
6 files changed, 81 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 };
+}
diff --git a/tests/testdata/workers/node_worker_message_port.mjs.out b/tests/testdata/workers/node_worker_message_port.mjs.out
new file mode 100644
index 000000000..5317b65a0
--- /dev/null
+++ b/tests/testdata/workers/node_worker_message_port.mjs.out
@@ -0,0 +1,4 @@
+worker port closed
+worker: Hello from worker on parentPort!
+mainPort: Hello from worker on workerPort!
+mainPort closed
diff --git a/tests/testdata/workers/node_worker_message_port_1.cjs b/tests/testdata/workers/node_worker_message_port_1.cjs
new file mode 100644
index 000000000..01739c51e
--- /dev/null
+++ b/tests/testdata/workers/node_worker_message_port_1.cjs
@@ -0,0 +1,9 @@
+const { parentPort, workerData } = require("worker_threads");
+
+parentPort.on("message", (msg) => {
+ const workerPort = workerData.workerPort;
+ parentPort.postMessage("Hello from worker on parentPort!");
+ workerPort.postMessage("Hello from worker on workerPort!");
+ workerPort.on("close", () => console.log("worker port closed"));
+ workerPort.close();
+});
diff --git a/tests/testdata/workers/node_worker_transfer_port.mjs b/tests/testdata/workers/node_worker_transfer_port.mjs
new file mode 100644
index 000000000..1b17ed1ab
--- /dev/null
+++ b/tests/testdata/workers/node_worker_transfer_port.mjs
@@ -0,0 +1,14 @@
+import { MessageChannel, Worker } from "node:worker_threads";
+
+const { port1, port2 } = new MessageChannel();
+const worker = new Worker(
+ import.meta.resolve("./node_worker_transfer_port_1.mjs"),
+);
+// Send the port directly after the worker is created
+worker.postMessage(port2, [port2]);
+// Send a message to the worker using the transferred port
+port1.postMessage("Hello from main thread!");
+worker.on("message", (message) => {
+ console.log("Received message from worker:", message);
+ worker.terminate();
+});
diff --git a/tests/testdata/workers/node_worker_transfer_port.mjs.out b/tests/testdata/workers/node_worker_transfer_port.mjs.out
new file mode 100644
index 000000000..8e8f11940
--- /dev/null
+++ b/tests/testdata/workers/node_worker_transfer_port.mjs.out
@@ -0,0 +1,3 @@
+Worker thread started!
+Received message from main thread: Hello from main thread!
+Received message from worker: Reply from worker
diff --git a/tests/testdata/workers/node_worker_transfer_port_1.mjs b/tests/testdata/workers/node_worker_transfer_port_1.mjs
new file mode 100644
index 000000000..4d0a38bd5
--- /dev/null
+++ b/tests/testdata/workers/node_worker_transfer_port_1.mjs
@@ -0,0 +1,10 @@
+import { parentPort } from "node:worker_threads";
+
+parentPort.on("message", (message) => {
+ const transferredPort = message;
+ transferredPort.on("message", (message) => {
+ console.log("Received message from main thread:", message);
+ parentPort.postMessage("Reply from worker");
+ });
+ console.log("Worker thread started!");
+});