@@ -18,6 +18,21 @@ function createStubChild() {
|
18 | 18 | return child; |
19 | 19 | } |
20 | 20 | |
| 21 | +function spawnOptionsAt( |
| 22 | +spawnMock: { mock: { calls: readonly unknown[][] } }, |
| 23 | +callIndex: number, |
| 24 | +): { stdio?: unknown } { |
| 25 | +const call = spawnMock.mock.calls[callIndex]; |
| 26 | +if (!call) { |
| 27 | +throw new Error(`expected spawn call ${callIndex}`); |
| 28 | +} |
| 29 | +const options = call[2]; |
| 30 | +if (typeof options !== "object" || options === null || Array.isArray(options)) { |
| 31 | +throw new Error(`expected spawn call ${callIndex} options`); |
| 32 | +} |
| 33 | +return options; |
| 34 | +} |
| 35 | + |
21 | 36 | describe("spawnWithFallback", () => { |
22 | 37 | it("retries on EBADF using fallback options", async () => { |
23 | 38 | const spawnMock = vi |
@@ -39,8 +54,8 @@ describe("spawnWithFallback", () => {
|
39 | 54 | expect(result.usedFallback).toBe(true); |
40 | 55 | expect(result.fallbackLabel).toBe("safe-stdin"); |
41 | 56 | expect(spawnMock).toHaveBeenCalledTimes(2); |
42 | | -expect(spawnMock.mock.calls[0]?.[2]?.stdio).toEqual(["pipe", "pipe", "pipe"]); |
43 | | -expect(spawnMock.mock.calls[1]?.[2]?.stdio).toEqual(["ignore", "pipe", "pipe"]); |
| 57 | +expect(spawnOptionsAt(spawnMock, 0).stdio).toEqual(["pipe", "pipe", "pipe"]); |
| 58 | +expect(spawnOptionsAt(spawnMock, 1).stdio).toEqual(["ignore", "pipe", "pipe"]); |
44 | 59 | }); |
45 | 60 | |
46 | 61 | it("does not retry on non-EBADF errors", async () => { |
|