a7dc534598
Force process termination via `postmortem.quit(0)` in `Completions.run()` after writing completion scripts to stdout. Loading all command modules during completion generation leaves open event loop handles (sockets, timers) that prevent natural process exit, causing tools like chezmoi to hang.
22 lines
775 B
TypeScript
22 lines
775 B
TypeScript
import { afterEach, describe, expect, it, spyOn } from "bun:test";
|
|
import { postmortem } from "@oh-my-pi/pi-utils";
|
|
import Completions from "../src/commands/completions";
|
|
|
|
describe("Completions command exit contract", () => {
|
|
afterEach(() => {
|
|
spyOn(postmortem, "quit").mockRestore();
|
|
spyOn(Bun, "write").mockRestore();
|
|
});
|
|
|
|
it("calls postmortem.quit(0) after writing completion script", async () => {
|
|
const quitSpy = spyOn(postmortem, "quit").mockResolvedValue(undefined);
|
|
const writeSpy = spyOn(Bun, "write").mockResolvedValue(0);
|
|
const config = { bin: "omp", version: "0.0.0", commands: new Map() };
|
|
const cmd = new Completions(["zsh"], config);
|
|
await cmd.run();
|
|
|
|
expect(writeSpy).toHaveBeenCalled();
|
|
expect(quitSpy).toHaveBeenCalledWith(0);
|
|
});
|
|
});
|