creatrip-agent-rules-builder
Version:
Unified converter for AI coding agent rules across Cursor, Windsurf, and Claude
49 lines (40 loc) • 1.69 kB
text/typescript
import * as fs from "fs";
import * as path from "path";
import { parseAgentRulesFile, getDefaultRulesFilePath } from "../src/parser";
describe("Parser", () => {
const testFilePath = path.join(__dirname, "fixtures", "test-rules.md");
describe("parseAgentRulesFile", () => {
it("should parse markdown file with JSONC config", () => {
const result = parseAgentRulesFile(testFilePath);
expect(result.rules).toContain("# Test AI Rules");
expect(result.rules).toContain("## General Rules");
expect(result.rules).not.toContain("agent-rules-config");
expect(result.config.cursor).toBeDefined();
expect(result.config.cursor?.globs).toEqual(["*.ts", "*.tsx"]);
expect(result.config.cursor?.description).toBe("Test rules for cursor");
});
it("should throw error for non-existent file", () => {
expect(() => {
parseAgentRulesFile("non-existent-file.md");
}).toThrow("파일을 찾을 수 없습니다");
});
it("should handle file without config", () => {
const tempFile = path.join(__dirname, "temp-no-config.md");
fs.writeFileSync(tempFile, "# Simple Rules\n- Rule 1\n- Rule 2");
try {
const result = parseAgentRulesFile(tempFile);
expect(result.rules).toBe("# Simple Rules\n- Rule 1\n- Rule 2");
expect(result.config).toEqual({});
} finally {
fs.unlinkSync(tempFile);
}
});
});
describe("getDefaultRulesFilePath", () => {
it("should return correct default path", () => {
const result = getDefaultRulesFilePath();
expect(result).toContain("AGENTS.md");
expect(path.isAbsolute(result)).toBe(true);
});
});
});