diff --git a/src/infra/infra-runtime.test.ts b/src/infra/infra-runtime.test.ts index 66a81f7bc06..6676a5d8f8a 100644 --- a/src/infra/infra-runtime.test.ts +++ b/src/infra/infra-runtime.test.ts @@ -224,35 +224,34 @@ describe("infra runtime", () => { afterEach(() => resetShellPathCacheForTests()); it("returns PATH from login shell env", () => { - if (process.platform === "win32") { - return; - } const exec = vi .fn() .mockReturnValue(Buffer.from("PATH=/custom/bin\0HOME=/home/user\0", "utf-8")); - const result = getShellPathFromLoginShell({ env: { SHELL: "/bin/sh" }, exec }); + const result = getShellPathFromLoginShell({ + env: { SHELL: "/bin/sh" }, + exec, + platform: "linux", + }); expect(result).toBe("/custom/bin"); }); it("caches the value", () => { - if (process.platform === "win32") { - return; - } const exec = vi.fn().mockReturnValue(Buffer.from("PATH=/custom/bin\0", "utf-8")); const env = { SHELL: "/bin/sh" } as NodeJS.ProcessEnv; - expect(getShellPathFromLoginShell({ env, exec })).toBe("/custom/bin"); - expect(getShellPathFromLoginShell({ env, exec })).toBe("/custom/bin"); + expect(getShellPathFromLoginShell({ env, exec, platform: "linux" })).toBe("/custom/bin"); + expect(getShellPathFromLoginShell({ env, exec, platform: "linux" })).toBe("/custom/bin"); expect(exec).toHaveBeenCalledTimes(1); }); it("returns null on exec failure", () => { - if (process.platform === "win32") { - return; - } const exec = vi.fn(() => { throw new Error("boom"); }); - const result = getShellPathFromLoginShell({ env: { SHELL: "/bin/sh" }, exec }); + const result = getShellPathFromLoginShell({ + env: { SHELL: "/bin/sh" }, + exec, + platform: "linux", + }); expect(result).toBeNull(); }); }); diff --git a/src/infra/shell-env.test.ts b/src/infra/shell-env.test.ts index 1a3449900be..0869dfec4f9 100644 --- a/src/infra/shell-env.test.ts +++ b/src/infra/shell-env.test.ts @@ -81,19 +81,14 @@ describe("shell env fallback", () => { const first = getShellPathFromLoginShell({ env: {} as NodeJS.ProcessEnv, exec: exec as unknown as Parameters[0]["exec"], + platform: "linux", }); const second = getShellPathFromLoginShell({ env: {} as NodeJS.ProcessEnv, exec: exec as unknown as Parameters[0]["exec"], + platform: "linux", }); - if (process.platform === "win32") { - expect(first).toBeNull(); - expect(second).toBeNull(); - expect(exec).not.toHaveBeenCalled(); - return; - } - expect(first).toBe("/usr/local/bin:/usr/bin"); expect(second).toBe("/usr/local/bin:/usr/bin"); expect(exec).toHaveBeenCalledOnce(); @@ -108,18 +103,36 @@ describe("shell env fallback", () => { const first = getShellPathFromLoginShell({ env: {} as NodeJS.ProcessEnv, exec: exec as unknown as Parameters[0]["exec"], + platform: "linux", }); const second = getShellPathFromLoginShell({ env: {} as NodeJS.ProcessEnv, exec: exec as unknown as Parameters[0]["exec"], + platform: "linux", }); expect(first).toBeNull(); expect(second).toBeNull(); - if (process.platform === "win32") { - expect(exec).not.toHaveBeenCalled(); - return; - } expect(exec).toHaveBeenCalledOnce(); }); + + it("returns null without invoking shell on win32", () => { + resetShellPathCacheForTests(); + const exec = vi.fn(() => Buffer.from("PATH=/usr/local/bin:/usr/bin\0HOME=/tmp\0")); + + const first = getShellPathFromLoginShell({ + env: {} as NodeJS.ProcessEnv, + exec: exec as unknown as Parameters[0]["exec"], + platform: "win32", + }); + const second = getShellPathFromLoginShell({ + env: {} as NodeJS.ProcessEnv, + exec: exec as unknown as Parameters[0]["exec"], + platform: "win32", + }); + + expect(first).toBeNull(); + expect(second).toBeNull(); + expect(exec).not.toHaveBeenCalled(); + }); }); diff --git a/src/infra/shell-env.ts b/src/infra/shell-env.ts index d1fa53fe01c..51839c66ea9 100644 --- a/src/infra/shell-env.ts +++ b/src/infra/shell-env.ts @@ -140,11 +140,13 @@ export function getShellPathFromLoginShell(opts: { env: NodeJS.ProcessEnv; timeoutMs?: number; exec?: typeof execFileSync; + platform?: NodeJS.Platform; }): string | null { if (cachedShellPath !== undefined) { return cachedShellPath; } - if (process.platform === "win32") { + const platform = opts.platform ?? process.platform; + if (platform === "win32") { cachedShellPath = null; return cachedShellPath; }