

















@@ -20,18 +20,22 @@ vi.mock("../../kill-tree.js", () => ({
20202121function createStubPty(pid = 1234) {
2222let exitListener: ((event: { exitCode: number; signal?: number }) => void) | null = null;
23+const disposeData = vi.fn();
24+const disposeExit = vi.fn();
2325return {
2426 pid,
2527write: vi.fn(),
26-onData: vi.fn(() => ({ dispose: vi.fn() })),
28+onData: vi.fn(() => ({ dispose: disposeData })),
2729onExit: vi.fn((listener: (event: { exitCode: number; signal?: number }) => void) => {
2830exitListener = listener;
29-return { dispose: vi.fn() };
31+return { dispose: disposeExit };
3032}),
3133kill: (signal?: string) => ptyKillMock(signal),
3234emitExit: (event: { exitCode: number; signal?: number }) => {
3335exitListener?.(event);
3436},
37+ disposeData,
38+ disposeExit,
3539};
3640}
3741@@ -151,6 +155,22 @@ describe("createPtyAdapter", () => {
151155await expect(adapter.wait()).resolves.toEqual({ code: 3, signal: null });
152156});
153157158+it("disposes PTY listeners", async () => {
159+const stub = createStubPty();
160+spawnMock.mockReturnValue(stub);
161+162+const adapter = await createPtyAdapter({
163+shell: "bash",
164+args: ["-lc", "echo ok"],
165+});
166+adapter.onStdout(() => undefined);
167+168+adapter.dispose();
169+170+expect(stub.disposeData).toHaveBeenCalledTimes(1);
171+expect(stub.disposeExit).toHaveBeenCalledTimes(1);
172+});
173+154174it("keeps inherited env when no override env is provided on non-Linux", async () => {
155175const originalPlatform = Object.getOwnPropertyDescriptor(process, "platform");
156176Object.defineProperty(process, "platform", { value: "darwin", configurable: true });
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。