From 009fe18fa269247ae533608fa524c442b69b8f3a Mon Sep 17 00:00:00 2001 From: dave caruso Date: Tue, 8 Aug 2023 22:19:46 -0700 Subject: worker tests (#4058) Co-authored-by: Jarred Sumner --- test/js/web/worker-fixture-process-exit.js | 3 ++ test/js/web/worker.test.ts | 49 +++++++++++++++++++++++++++++- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 test/js/web/worker-fixture-process-exit.js (limited to 'test/js/web') diff --git a/test/js/web/worker-fixture-process-exit.js b/test/js/web/worker-fixture-process-exit.js new file mode 100644 index 000000000..0d93217d9 --- /dev/null +++ b/test/js/web/worker-fixture-process-exit.js @@ -0,0 +1,3 @@ +setTimeout(() => { + process.exit(2); +}, 100); diff --git a/test/js/web/worker.test.ts b/test/js/web/worker.test.ts index 1babfbcc3..34d5f6f06 100644 --- a/test/js/web/worker.test.ts +++ b/test/js/web/worker.test.ts @@ -1,6 +1,7 @@ import { expect, test } from "bun:test"; import { bunEnv, bunExe } from "harness"; import path from "path"; +import * as wt from "worker_threads"; test("worker", done => { const worker = new Worker(new URL("worker-fixture.js", import.meta.url).href, { @@ -115,7 +116,7 @@ test("worker by default will not close the event loop", done => { done(new Error("exited with non-zero code")); } else { const text = await new Response(x.stdout).text(); - if (text.includes("done")) { + if (!text.includes("done")) { console.log({ text }); done(new Error("event loop killed early")); } else { @@ -124,3 +125,49 @@ test("worker by default will not close the event loop", done => { } }); }); + +test("worker with process.exit", done => { + const worker = new Worker(new URL("worker-fixture-process-exit.js", import.meta.url).href, { + smol: true, + }); + worker.addEventListener("close", e => { + try { + expect(e.code).toBe(2); + } catch (e) { + done(e); + } + done(); + }); +}); + +test("worker_threads with process.exit", done => { + const worker = new wt.Worker(new URL("worker-fixture-process-exit.js", import.meta.url).href, { + smol: true, + }); + worker.on("exit", event => { + try { + console.log({ event }); + expect(event).toBe(2); + } catch (e) { + done(e); + } + done(); + }); +}); + +test.skip("worker_threads with process.exit and terminate", async () => { + const worker = new wt.Worker(new URL("worker-fixture-process-exit.js", import.meta.url).href, { + smol: true, + }); + const code = await worker.terminate(); + expect(code).toBe(2); +}); + +test.skip("worker_threads with process.exit (delay) and terminate", async () => { + const worker2 = new wt.Worker(new URL("worker-fixture-process-exit.js", import.meta.url).href, { + smol: true, + }); + await Bun.sleep(100); + const code2 = await worker2.terminate(); + expect(code2).toBe(2); +}); -- cgit v1.2.3