82 lines
2.7 KiB
TypeScript
82 lines
2.7 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import { buildShellLaunchers } from "../../tools/impl/shellLaunchers";
|
|
|
|
describe("Shell Launchers", () => {
|
|
test("builds launchers for a command", () => {
|
|
const launchers = buildShellLaunchers("echo hello");
|
|
expect(launchers.length).toBeGreaterThan(0);
|
|
expect(launchers[0]).toBeDefined();
|
|
});
|
|
|
|
test("returns empty array for empty command", () => {
|
|
const launchers = buildShellLaunchers("");
|
|
expect(launchers).toEqual([]);
|
|
});
|
|
|
|
test("returns empty array for whitespace-only command", () => {
|
|
const launchers = buildShellLaunchers(" ");
|
|
expect(launchers).toEqual([]);
|
|
});
|
|
|
|
if (process.platform === "win32") {
|
|
describe("Windows-specific", () => {
|
|
test("PowerShell is tried before cmd.exe", () => {
|
|
const launchers = buildShellLaunchers("echo test");
|
|
|
|
// Find indices of PowerShell and cmd.exe
|
|
const powershellIndex = launchers.findIndex(
|
|
(l) =>
|
|
l[0]?.toLowerCase().includes("powershell") ||
|
|
l[0]?.toLowerCase() === "pwsh",
|
|
);
|
|
const cmdIndex = launchers.findIndex(
|
|
(l) =>
|
|
l[0]?.toLowerCase().includes("cmd") ||
|
|
l[0]?.toLowerCase() === process.env.ComSpec?.toLowerCase(),
|
|
);
|
|
|
|
expect(powershellIndex).toBeGreaterThanOrEqual(0);
|
|
expect(cmdIndex).toBeGreaterThanOrEqual(0);
|
|
// PowerShell should come before cmd.exe
|
|
expect(powershellIndex).toBeLessThan(cmdIndex);
|
|
});
|
|
|
|
test("includes PowerShell with -NoProfile flag", () => {
|
|
const launchers = buildShellLaunchers("echo test");
|
|
const powershellLauncher = launchers.find((l) =>
|
|
l[0]?.toLowerCase().includes("powershell"),
|
|
);
|
|
|
|
expect(powershellLauncher).toBeDefined();
|
|
expect(powershellLauncher).toContain("-NoProfile");
|
|
expect(powershellLauncher).toContain("-Command");
|
|
});
|
|
});
|
|
} else {
|
|
describe("Unix-specific", () => {
|
|
test("includes bash with -lc flag", () => {
|
|
const launchers = buildShellLaunchers("echo test");
|
|
const bashLauncher = launchers.find(
|
|
(l) => l[0]?.includes("bash") && l[1] === "-lc",
|
|
);
|
|
|
|
expect(bashLauncher).toBeDefined();
|
|
});
|
|
|
|
test("prefers user SHELL environment", () => {
|
|
const originalShell = process.env.SHELL;
|
|
process.env.SHELL = "/bin/zsh";
|
|
|
|
try {
|
|
const launchers = buildShellLaunchers("echo test");
|
|
// User's shell should be first
|
|
expect(launchers[0]?.[0]).toBe("/bin/zsh");
|
|
} finally {
|
|
if (originalShell === undefined) delete process.env.SHELL;
|
|
else process.env.SHELL = originalShell;
|
|
}
|
|
});
|
|
});
|
|
}
|
|
});
|