summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/unit_node/testdata/worker_module/cjs-file.cjs23
-rw-r--r--tests/unit_node/testdata/worker_module/index.js2
-rw-r--r--tests/unit_node/testdata/worker_module/nested/index.js3
-rw-r--r--tests/unit_node/testdata/worker_module/other_cjs_file.cjs5
-rw-r--r--tests/unit_node/testdata/worker_module/other_file.js7
-rw-r--r--tests/unit_node/testdata/worker_module/βάρβαροι.js9
-rw-r--r--tests/unit_node/worker_threads_test.ts177
7 files changed, 199 insertions, 27 deletions
diff --git a/tests/unit_node/testdata/worker_module/cjs-file.cjs b/tests/unit_node/testdata/worker_module/cjs-file.cjs
new file mode 100644
index 000000000..af2e21c35
--- /dev/null
+++ b/tests/unit_node/testdata/worker_module/cjs-file.cjs
@@ -0,0 +1,23 @@
+const { add } = require("./other_cjs_file.cjs");
+
+const missing_toplevel_async = async () => {
+ return new Promise((resolve) => {
+ setTimeout(() => {
+ resolve;
+ }, 500);
+ });
+};
+
+async function main() {
+ /// async code doesn't seem to work within this CJS wrapper :(
+ //const p = await missing_toplevel_async();
+
+ const sum = add(2, 3);
+ if (sum != 5) {
+ throw ("Bad calculator!");
+ }
+
+ postMessage("hallo");
+}
+
+main();
diff --git a/tests/unit_node/testdata/worker_module/index.js b/tests/unit_node/testdata/worker_module/index.js
index a3e976b65..cbb433986 100644
--- a/tests/unit_node/testdata/worker_module/index.js
+++ b/tests/unit_node/testdata/worker_module/index.js
@@ -1,3 +1,3 @@
import { myFunction } from "./other_file.js";
-myFunction().then(() => {});
+await myFunction();
diff --git a/tests/unit_node/testdata/worker_module/nested/index.js b/tests/unit_node/testdata/worker_module/nested/index.js
new file mode 100644
index 000000000..b77376a16
--- /dev/null
+++ b/tests/unit_node/testdata/worker_module/nested/index.js
@@ -0,0 +1,3 @@
+import { myFunction } from "../other_file.js";
+
+await myFunction();
diff --git a/tests/unit_node/testdata/worker_module/other_cjs_file.cjs b/tests/unit_node/testdata/worker_module/other_cjs_file.cjs
new file mode 100644
index 000000000..45ae337bf
--- /dev/null
+++ b/tests/unit_node/testdata/worker_module/other_cjs_file.cjs
@@ -0,0 +1,5 @@
+module.exports = {
+ add: (a, b) => {
+ return a + b;
+ },
+};
diff --git a/tests/unit_node/testdata/worker_module/other_file.js b/tests/unit_node/testdata/worker_module/other_file.js
index 41789dfe8..6bb9b6b83 100644
--- a/tests/unit_node/testdata/worker_module/other_file.js
+++ b/tests/unit_node/testdata/worker_module/other_file.js
@@ -1,3 +1,8 @@
export async function myFunction() {
- await new Promise((resolve) => setTimeout(resolve, 100));
+ await new Promise((resolve) =>
+ setTimeout(() => {
+ postMessage("hallo");
+ resolve;
+ }, 100)
+ );
}
diff --git a/tests/unit_node/testdata/worker_module/βάρβαροι.js b/tests/unit_node/testdata/worker_module/βάρβαροι.js
new file mode 100644
index 000000000..cee92889c
--- /dev/null
+++ b/tests/unit_node/testdata/worker_module/βάρβαροι.js
@@ -0,0 +1,9 @@
+export async function myFunction() {
+ await new Promise((resolve) =>
+ setTimeout(() => {
+ postMessage("hallo");
+ resolve;
+ }, 100)
+ );
+}
+await myFunction();
diff --git a/tests/unit_node/worker_threads_test.ts b/tests/unit_node/worker_threads_test.ts
index f2ce00c84..66460940d 100644
--- a/tests/unit_node/worker_threads_test.ts
+++ b/tests/unit_node/worker_threads_test.ts
@@ -4,9 +4,10 @@ import {
assert,
assertEquals,
assertObjectMatch,
+ assertThrows,
fail,
} from "@std/assert/mod.ts";
-import { fromFileUrl, relative } from "@std/path/mod.ts";
+import { fromFileUrl, relative, sep } from "@std/path/mod.ts";
import * as workerThreads from "node:worker_threads";
import { EventEmitter, once } from "node:events";
@@ -20,42 +21,42 @@ Deno.test("[node/worker_threads] MessageChannel are MessagePort are exported", (
});
Deno.test({
- name: "[worker_threads] isMainThread",
+ name: "[node/worker_threads] isMainThread",
fn() {
assertEquals(workerThreads.isMainThread, true);
},
});
Deno.test({
- name: "[worker_threads] threadId",
+ name: "[node/worker_threads] threadId",
fn() {
assertEquals(workerThreads.threadId, 0);
},
});
Deno.test({
- name: "[worker_threads] resourceLimits",
+ name: "[node/worker_threads] resourceLimits",
fn() {
assertObjectMatch(workerThreads.resourceLimits, {});
},
});
Deno.test({
- name: "[worker_threads] parentPort",
+ name: "[node/worker_threads] parentPort",
fn() {
assertEquals(workerThreads.parentPort, null);
},
});
Deno.test({
- name: "[worker_threads] workerData",
+ name: "[node/worker_threads] workerData",
fn() {
assertEquals(workerThreads.workerData, null);
},
});
Deno.test({
- name: "[worker_threads] setEnvironmentData / getEnvironmentData",
+ name: "[node/worker_threads] setEnvironmentData / getEnvironmentData",
fn() {
workerThreads.setEnvironmentData("test", "test");
assertEquals(workerThreads.getEnvironmentData("test"), "test");
@@ -63,7 +64,7 @@ Deno.test({
});
Deno.test({
- name: "[worker_threads] Worker threadId",
+ name: "[node/worker_threads] Worker threadId",
async fn() {
const worker = new workerThreads.Worker(
new URL("./testdata/worker_threads.mjs", import.meta.url),
@@ -85,7 +86,7 @@ Deno.test({
});
Deno.test({
- name: "[worker_threads] Worker basics",
+ name: "[node/worker_threads] Worker basics",
async fn() {
workerThreads.setEnvironmentData("test", "test");
workerThreads.setEnvironmentData(1, {
@@ -118,7 +119,7 @@ Deno.test({
});
Deno.test({
- name: "[worker_threads] Worker eval",
+ name: "[node/worker_threads] Worker eval",
async fn() {
const worker = new workerThreads.Worker(
`
@@ -135,17 +136,141 @@ Deno.test({
});
Deno.test({
- name: "[worker_threads] worker thread with type module",
+ name: "[node/worker_threads] worker thread with type module",
+ async fn() {
+ function p() {
+ return new Promise<workerThreads.Worker>((resolve, reject) => {
+ const worker = new workerThreads.Worker(
+ new URL("./testdata/worker_module/index.js", import.meta.url),
+ );
+ worker.on("error", (e) => reject(e.message));
+ worker.on("message", () => resolve(worker));
+ });
+ }
+ await p();
+ },
+});
+
+Deno.test({
+ name: "[node/worker_threads] worker thread in nested module",
+ async fn() {
+ function p() {
+ return new Promise<workerThreads.Worker>((resolve, reject) => {
+ const worker = new workerThreads.Worker(
+ new URL("./testdata/worker_module/nested/index.js", import.meta.url),
+ );
+ worker.on("error", (e) => reject(e.message));
+ worker.on("message", () => resolve(worker));
+ });
+ }
+ await p();
+ },
+});
+
+Deno.test({
+ name: "[node/worker_threads] .cjs worker file within module",
+ async fn() {
+ function p() {
+ return new Promise<workerThreads.Worker>((resolve, reject) => {
+ const worker = new workerThreads.Worker(
+ new URL("./testdata/worker_module/cjs-file.cjs", import.meta.url),
+ );
+ worker.on("error", (e) => reject(e.message));
+ worker.on("message", () => resolve(worker));
+ });
+ }
+ await p();
+ },
+});
+
+Deno.test({
+ name: "[node/worker_threads] relativ path string",
+ async fn() {
+ function p() {
+ return new Promise<workerThreads.Worker>((resolve, reject) => {
+ const worker = new workerThreads.Worker(
+ "./tests/unit_node/testdata/worker_module/index.js",
+ );
+ worker.on("error", (e) => reject(e.message));
+ worker.on("message", () => resolve(worker));
+ });
+ }
+ await p();
+ },
+});
+
+Deno.test({
+ name: "[node/worker_threads] utf-8 path string",
+ async fn() {
+ function p() {
+ return new Promise<workerThreads.Worker>((resolve, reject) => {
+ const worker = new workerThreads.Worker(
+ "./tests/unit_node/testdata/worker_module/βάρβαροι.js",
+ );
+ worker.on("error", (e) => reject(e.message));
+ worker.on("message", () => resolve(worker));
+ });
+ }
+ await p();
+ },
+});
+
+Deno.test({
+ name: "[node/worker_threads] utf-8 path URL",
+ async fn() {
+ function p() {
+ return new Promise<workerThreads.Worker>((resolve, reject) => {
+ const worker = new workerThreads.Worker(
+ new URL(
+ "./testdata/worker_module/βάρβαροι.js",
+ import.meta.url,
+ ),
+ );
+ worker.on("error", (e) => reject(e.message));
+ worker.on("message", () => resolve(worker));
+ });
+ }
+ await p();
+ },
+});
+
+Deno.test({
+ name: "[node/worker_threads] throws on relativ path without leading dot",
fn() {
- const worker = new workerThreads.Worker(
- new URL("./testdata/worker_module/index.js", import.meta.url),
+ assertThrows(
+ () => {
+ new workerThreads.Worker(
+ "tests/unit_node/testdata/worker_module/index.js",
+ );
+ },
);
- worker.terminate();
},
});
Deno.test({
- name: "[worker_threads] inheritances",
+ name: "[node/worker_threads] throws on unsupported URL protcol",
+ fn() {
+ assertThrows(
+ () => {
+ new workerThreads.Worker(new URL("https://example.com"));
+ },
+ );
+ },
+});
+
+Deno.test({
+ name: "[node/worker_threads] throws on non-existend file",
+ fn() {
+ assertThrows(
+ () => {
+ new workerThreads.Worker(new URL("file://very/unlikely"));
+ },
+ );
+ },
+});
+
+Deno.test({
+ name: "[node/worker_threads] inheritances",
async fn() {
const worker = new workerThreads.Worker(
`
@@ -168,7 +293,7 @@ Deno.test({
});
Deno.test({
- name: "[worker_threads] Worker workerData",
+ name: "[node/worker_threads] Worker workerData",
async fn() {
const worker = new workerThreads.Worker(
new URL("./testdata/worker_threads.mjs", import.meta.url),
@@ -192,12 +317,14 @@ Deno.test({
});
Deno.test({
- name: "[worker_threads] Worker with relative path",
+ name: "[node/worker_threads] Worker with relative path",
async fn() {
- const worker = new workerThreads.Worker(relative(
- Deno.cwd(),
- fromFileUrl(new URL("./testdata/worker_threads.mjs", import.meta.url)),
- ));
+ const worker = new workerThreads.Worker(
+ `.${sep}` + relative(
+ Deno.cwd(),
+ fromFileUrl(new URL("./testdata/worker_threads.mjs", import.meta.url)),
+ ),
+ );
worker.postMessage("Hello, how are you my thread?");
assertEquals((await once(worker, "message"))[0], "I'm fine!");
worker.terminate();
@@ -205,7 +332,7 @@ Deno.test({
});
Deno.test({
- name: "[worker_threads] unref",
+ name: "[node/worker_threads] unref",
async fn() {
const timeout = setTimeout(() => fail("Test timed out"), 60_000);
const child = new Deno.Command(Deno.execPath(), {
@@ -220,7 +347,7 @@ Deno.test({
});
Deno.test({
- name: "[worker_threads] SharedArrayBuffer",
+ name: "[node/worker_threads] SharedArrayBuffer",
async fn() {
const sab = new SharedArrayBuffer(Uint8Array.BYTES_PER_ELEMENT);
const uint = new Uint8Array(sab);
@@ -240,7 +367,7 @@ Deno.test({
});
Deno.test({
- name: "[worker_threads] Worker workerData with MessagePort",
+ name: "[node/worker_threads] Worker workerData with MessagePort",
async fn() {
const { port1: mainPort, port2: workerPort } = new workerThreads
.MessageChannel();
@@ -256,7 +383,7 @@ Deno.test({
workerData,
} from "node:worker_threads";
parentPort.on("message", (msg) => {
- console.log("message from main", msg);
+ /* console.log("message from main", msg); */
parentPort.postMessage("Hello from worker on parentPort!");
workerData.workerPort.postMessage("Hello from worker on workerPort!");
});