import { assertEquals, assertRejects } from "@std/assert"; import { localEnvironment } from "@berry/api/environment.ts"; import { launch } from "./transport.ts"; Deno.test("cancelling startup closes the target runner before Firefox is ready", async () => { const env = localEnvironment(Deno.cwd()); const started = Promise.withResolvers(); const exited = Promise.withResolvers(); let output!: ReadableStreamDefaultController; let stopped = false; env.spawn = () => { started.resolve(); return Promise.resolve({ stdin: new WritableStream({ close() { stopped = true; output.close(); exited.resolve(0); }, }), stdout: new ReadableStream({ start: (stream) => output = stream }), stderr: new ReadableStream({ start: (stream) => stream.close() }), exited: exited.promise, kill() {}, }); }; const abort = new AbortController(); const pending = launch(env, () => {}, abort.signal); const rejected = assertRejects(() => pending, Error, "cancelled startup"); await started.promise; abort.abort(new Error("cancelled startup")); await rejected; assertEquals(stopped, true); });