diff --git a/test/js/node/worker_threads/worker-with-process-exit-delay-and-terminate.mjs b/test/js/node/worker_threads/worker-with-process-exit-delay-and-terminate.mjs deleted file mode 100644 index 3a705e0de7..0000000000 --- a/test/js/node/worker_threads/worker-with-process-exit-delay-and-terminate.mjs +++ /dev/null @@ -1,19 +0,0 @@ -import assert from "node:assert"; -import { setTimeout as sleep } from "node:timers/promises"; -import { fileURLToPath } from "node:url"; -import { Worker, isMainThread } from "node:worker_threads"; - -// This test exists so we can test the behaviour from -// https://github.com/oven-sh/bun/blob/f6dc66925e40dfb088c78b9592f832cbddb86519/test/js/web/workers/worker.test.ts#L341-L351 - -if (isMainThread) { - const worker = new Worker(fileURLToPath(import.meta.url), { smol: true }); - let exitCode; - worker.once("exit", code => (exitCode = code)); - await sleep(200); - assert.strictEqual(await worker.terminate(), undefined); - assert.strictEqual(exitCode, 2); -} else { - await sleep(100); - process.exit(2); -} diff --git a/test/js/node/worker_threads/worker-with-process-exit-does-terminate.test.ts b/test/js/node/worker_threads/worker-with-process-exit-does-terminate.test.ts new file mode 100644 index 0000000000..9ff89d69ce --- /dev/null +++ b/test/js/node/worker_threads/worker-with-process-exit-does-terminate.test.ts @@ -0,0 +1,53 @@ +// import assert from "node:assert"; +// import { once } from "node:events"; +// import { fileURLToPath } from "node:url"; +// import { Worker, isMainThread, parentPort } from "node:worker_threads"; + +// if (isMainThread) { +// const worker = new Worker(fileURLToPath(import.meta.url)); +// worker.postMessage("process.exit(2); parentPort.postMessage('done')"); +// worker.on("message", () => { +// assert.fail("worker should not send a message"); +// }); +// const [exitCode] = await once(worker, "exit"); +// assert.strictEqual(exitCode, 2); +// } else { +// parentPort.on("message", code => { +// console.log(`EVAL(${code})`); +// eval(code); +// }); +// } +import { once } from "node:events"; +import { fileURLToPath } from "node:url"; +import { Worker, isMainThread, parentPort } from "node:worker_threads"; + +if (isMainThread) { + const { test, expect } = await import("bun:test"); + + test("process.exit() works", async () => { + console.log("Testing process.exit() in worker thread..."); + + const worker = new Worker(fileURLToPath(import.meta.url)); + + worker.on("message", () => expect().fail("worker should not keep executing after process.exit()")); + + worker.postMessage("boom"); + + const [exitCode] = await once(worker, "exit"); + expect(exitCode).toBe(2); + }); +} else { + console.log("Worker thread started"); + + parentPort!.on("message", message => { + console.log(`Worker received: ${message}`); + + console.log("About to call process.exit(2)..."); + process.exit(2); + console.log("process.exit(2) called"); + + parentPort!.postMessage("i'm still alive!"); + }); + + console.log("Worker is ready, waiting for messages..."); +} diff --git a/test/js/node/worker_threads/worker-with-process-exit.mjs b/test/js/node/worker_threads/worker-with-process-exit.mjs deleted file mode 100644 index 734c3102e5..0000000000 --- a/test/js/node/worker_threads/worker-with-process-exit.mjs +++ /dev/null @@ -1,19 +0,0 @@ -import assert from "node:assert"; -import { once } from "node:events"; -import { fileURLToPath } from "node:url"; -import { Worker, isMainThread, parentPort } from "node:worker_threads"; - -if (isMainThread) { - const worker = new Worker(fileURLToPath(import.meta.url)); - worker.postMessage("process.exit(2); parentPort.postMessage('done')"); - worker.on("message", () => { - assert.fail("worker should not send a message"); - }); - const [exitCode] = await once(worker, "exit"); - assert.strictEqual(exitCode, 2); -} else { - parentPort.on("message", code => { - console.log(`EVAL(${code})`); - eval(code); - }); -} diff --git a/test/js/web/workers/worker.test.ts b/test/js/web/workers/worker.test.ts index 729d9164e1..b132f6d2ce 100644 --- a/test/js/web/workers/worker.test.ts +++ b/test/js/web/workers/worker.test.ts @@ -342,9 +342,7 @@ describe("worker_threads", () => { const worker = new wt.Worker(new URL("worker-fixture-process-exit.js", import.meta.url).href, { smol: true, }); - let exitCode: number | undefined = undefined; - worker.once("exit", code => (exitCode = code)); - await Bun.sleep(200); + const [exitCode] = await once(worker, "exit"); expect(await worker.terminate()).toBe(undefined); expect(exitCode).toBe(2); });