import { fileBlockParser } from "./fileBlockParser.js"; const FILE_PATH_PREFIX = "File path:"; describe("fileBlockParser", () => { describe("XML format", () => { const xmlElement = "code"; it("parses a single code block with space after File path:", async () => { const input = ` File path: src/files/readJson.ts export function readJson() {} `; const result = await fileBlockParser(input, FILE_PATH_PREFIX, xmlElement); expect(result).toEqual([ { path: "src/files/readJson.ts", content: "export function readJson() {}", }, ]); }); it("parses a single code block without space after File path:", async () => { const input = ` File path: src/files/readJson.ts export function readJson() {} `; const result = await fileBlockParser(input,FILE_PATH_PREFIX, xmlElement); expect(result).toEqual([ { path: "src/files/readJson.ts", content: "export function readJson() {}", }, ]); }); it("parses multiple code blocks with and without spaces", async () => { const input = ` File path: src/files/readJson.ts export function readJson() {} File path: src/files/writeJson.ts export function writeJson() {} `; const result = await fileBlockParser(input, FILE_PATH_PREFIX, xmlElement); expect(result).toEqual([ { path: "src/files/readJson.ts", content: "export function readJson() {}", }, { path: "src/files/writeJson.ts", content: "export function writeJson() {}", }, ]); }); it("handles empty input gracefully", async () => { const input = ``; const result = await fileBlockParser(input, FILE_PATH_PREFIX, xmlElement); expect(result).toEqual([]); }); it("ignores content between code blocks", async () => { const input = ` File path: src/files/readJson.ts export function readJson() {} Some content here which should be ignored. File path: src/files/writeJson.ts export function writeJson() {} `; const result = await fileBlockParser(input, FILE_PATH_PREFIX, xmlElement); expect(result).toEqual([ { path: "src/files/readJson.ts", content: "export function readJson() {}", }, { path: "src/files/writeJson.ts", content: "export function writeJson() {}", }, ]); }); it("ignores content between and after code blocks", async () => { const input = ` File path: src/files/readJson.ts export function readJson() {} Some content here which should be ignored. File path: src/files/writeJson.ts export function writeJson() {} More content here to be ignored. `; const result = await fileBlockParser(input, FILE_PATH_PREFIX, xmlElement); expect(result).toEqual([ { path: "src/files/readJson.ts", content: "export function readJson() {}", }, { path: "src/files/writeJson.ts", content: "export function writeJson() {}", }, ]); }); it("ignores incomplete code blocks missing closing tags", async () => { const input = ` File path: src/files/readJson.ts file 1 contents File path: src/files/another.ts file 2 partial File 2 should not be parsed since the closing tag is missing. `; const result = await fileBlockParser(input, FILE_PATH_PREFIX, xmlElement); expect(result).toEqual([ { path: "src/files/readJson.ts", content: "file 1 contents", }, // No entry for src/files/another.ts because it's missing closing tag ]); }); it("ignores XML blocks without a preceding file path", async () => { const input = ` Some random content export function readJson() {} File path: src/files/writeJson.ts export function writeJson() {} `; const result = await fileBlockParser(input, FILE_PATH_PREFIX, xmlElement); expect(result).toEqual([ { path: "src/files/writeJson.ts", content: "export function writeJson() {}", }, ]); }); it("handles self-closing and empty XML tags", async () => { const input = ` File path: src/files/empty1.ts File path: src/files/empty2.ts File path: src/files/content.ts actual content `; const result = await fileBlockParser(input, FILE_PATH_PREFIX, xmlElement); expect(result).toEqual([ { path: "src/files/content.ts", content: "actual content", }, ]); }); it("works with different XML element names", async () => { const customElement = "source"; const input = ` File path: src/files/test.ts export function test() {} `; const result = await fileBlockParser(input, FILE_PATH_PREFIX, customElement); expect(result).toEqual([ { path: "src/files/test.ts", content: "export function test() {}", }, ]); }); }); });