mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-17 22:05:50 +00:00
test: 新增测试代码文件
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { mock, describe, expect, test } from "bun:test";
|
||||
import { mock, describe, expect, test, beforeEach, afterEach } from "bun:test";
|
||||
|
||||
// Mock slowOperations to cut bootstrap/state dependency chain
|
||||
// (figures.js → env.js → fsOperations.js → slowOperations.js → bootstrap/state.js)
|
||||
@@ -57,6 +57,8 @@ describe("permissionModeFromString", () => {
|
||||
expect(permissionModeFromString("plan")).toBe("plan");
|
||||
expect(permissionModeFromString("default")).toBe("default");
|
||||
expect(permissionModeFromString("dontAsk")).toBe("dontAsk");
|
||||
expect(permissionModeFromString("acceptEdits")).toBe("acceptEdits");
|
||||
expect(permissionModeFromString("bypassPermissions")).toBe("bypassPermissions");
|
||||
});
|
||||
|
||||
test("returns 'default' for unknown string", () => {
|
||||
@@ -72,6 +74,8 @@ describe("permissionModeTitle", () => {
|
||||
expect(permissionModeTitle("default")).toBe("Default");
|
||||
expect(permissionModeTitle("plan")).toBe("Plan Mode");
|
||||
expect(permissionModeTitle("acceptEdits")).toBe("Accept edits");
|
||||
expect(permissionModeTitle("bypassPermissions")).toBe("Bypass Permissions");
|
||||
expect(permissionModeTitle("dontAsk")).toBe("Don't Ask");
|
||||
});
|
||||
|
||||
test("falls back to Default for unknown mode", () => {
|
||||
@@ -86,6 +90,8 @@ describe("permissionModeShortTitle", () => {
|
||||
expect(permissionModeShortTitle("default")).toBe("Default");
|
||||
expect(permissionModeShortTitle("plan")).toBe("Plan");
|
||||
expect(permissionModeShortTitle("bypassPermissions")).toBe("Bypass");
|
||||
expect(permissionModeShortTitle("dontAsk")).toBe("DontAsk");
|
||||
expect(permissionModeShortTitle("acceptEdits")).toBe("Accept");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -116,6 +122,14 @@ describe("getModeColor", () => {
|
||||
test("returns 'error' for bypassPermissions", () => {
|
||||
expect(getModeColor("bypassPermissions")).toBe("error");
|
||||
});
|
||||
|
||||
test("returns 'error' for dontAsk", () => {
|
||||
expect(getModeColor("dontAsk")).toBe("error");
|
||||
});
|
||||
|
||||
test("returns 'autoAccept' for acceptEdits", () => {
|
||||
expect(getModeColor("acceptEdits")).toBe("autoAccept");
|
||||
});
|
||||
});
|
||||
|
||||
// ─── isDefaultMode ─────────────────────────────────────────────────────
|
||||
@@ -149,6 +163,14 @@ describe("toExternalPermissionMode", () => {
|
||||
test("maps dontAsk to dontAsk", () => {
|
||||
expect(toExternalPermissionMode("dontAsk")).toBe("dontAsk");
|
||||
});
|
||||
|
||||
test("maps acceptEdits to acceptEdits", () => {
|
||||
expect(toExternalPermissionMode("acceptEdits")).toBe("acceptEdits");
|
||||
});
|
||||
|
||||
test("maps bypassPermissions to bypassPermissions", () => {
|
||||
expect(toExternalPermissionMode("bypassPermissions")).toBe("bypassPermissions");
|
||||
});
|
||||
});
|
||||
|
||||
// ─── isExternalPermissionMode ──────────────────────────────────────────
|
||||
@@ -159,4 +181,34 @@ describe("isExternalPermissionMode", () => {
|
||||
expect(isExternalPermissionMode("default")).toBe(true);
|
||||
expect(isExternalPermissionMode("plan")).toBe(true);
|
||||
});
|
||||
|
||||
describe("when USER_TYPE is 'ant'", () => {
|
||||
const savedUserType = process.env.USER_TYPE;
|
||||
|
||||
beforeEach(() => {
|
||||
process.env.USER_TYPE = "ant";
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
if (savedUserType !== undefined) {
|
||||
process.env.USER_TYPE = savedUserType;
|
||||
} else {
|
||||
delete process.env.USER_TYPE;
|
||||
}
|
||||
});
|
||||
|
||||
test("returns false for 'auto' (ant-only mode)", () => {
|
||||
expect(isExternalPermissionMode("auto")).toBe(false);
|
||||
});
|
||||
|
||||
test("returns false for 'bubble' (ant-only mode)", () => {
|
||||
expect(isExternalPermissionMode("bubble")).toBe(false);
|
||||
});
|
||||
|
||||
test("returns true for standard external modes", () => {
|
||||
expect(isExternalPermissionMode("default")).toBe(true);
|
||||
expect(isExternalPermissionMode("plan")).toBe(true);
|
||||
expect(isExternalPermissionMode("dontAsk")).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -28,6 +28,32 @@ describe("CROSS_PLATFORM_CODE_EXEC", () => {
|
||||
expect(CROSS_PLATFORM_CODE_EXEC).toContain("bash");
|
||||
expect(CROSS_PLATFORM_CODE_EXEC).toContain("sh");
|
||||
});
|
||||
|
||||
test("has no duplicate entries", () => {
|
||||
expect(new Set(CROSS_PLATFORM_CODE_EXEC).size).toBe(
|
||||
CROSS_PLATFORM_CODE_EXEC.length
|
||||
);
|
||||
});
|
||||
|
||||
test("contains expected interpreters", () => {
|
||||
const expected = [
|
||||
"node",
|
||||
"python",
|
||||
"python3",
|
||||
"ruby",
|
||||
"perl",
|
||||
"php",
|
||||
"lua",
|
||||
"deno",
|
||||
"npx",
|
||||
"bunx",
|
||||
"tsx",
|
||||
];
|
||||
const set = new Set(CROSS_PLATFORM_CODE_EXEC);
|
||||
for (const entry of expected) {
|
||||
expect(set.has(entry)).toBe(true);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe("DANGEROUS_BASH_PATTERNS", () => {
|
||||
@@ -52,4 +78,16 @@ describe("DANGEROUS_BASH_PATTERNS", () => {
|
||||
expect(typeof p).toBe("string");
|
||||
}
|
||||
});
|
||||
|
||||
test("has no duplicate entries", () => {
|
||||
expect(new Set(DANGEROUS_BASH_PATTERNS).size).toBe(
|
||||
DANGEROUS_BASH_PATTERNS.length
|
||||
);
|
||||
});
|
||||
|
||||
test("empty string does not match any pattern", () => {
|
||||
for (const pattern of DANGEROUS_BASH_PATTERNS) {
|
||||
expect("".startsWith(pattern)).toBe(false);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user