import { describe, expect, test } from "bun:test";
import { formatWrn, parse } from "../src/index.ts";
const options = {
insertSpaces: true,
tabSize: 2,
printWidth: 70,
multilineAttributes: true,
} as const;
describe("canonical WRN formatter", () => {
test("formats declarations, structured values, markup, and imports idempotently", () => {
const source = `import Card from "@/components/Card.wrn"
component Demo {
props { title: string = "Hello" items = [{ id: 1, label: "One" }] }
view {
{title}
}
}`;
const formatted = formatWrn(source, options);
expect(formatted).toContain('import Card from "@/components/Card.wrn"');
expect(formatted).toContain('props {\n title: string = "Hello"');
expect(formatted).toContain('items = [{ id: 1, label: "One" }]');
expect(formatted).toContain(" parse(formatted)).not.toThrow();
});
test("preserves comments and normalizes the final newline", () => {
const source = `// leading comment\r\npage Home {\r\nview { Home
}\r\n}`;
const formatted = formatWrn(source, options);
expect(formatted.startsWith("// leading comment\n")).toBe(true);
expect(formatted).toContain("");
expect(formatted.endsWith("\n")).toBe(true);
expect(formatted).not.toContain("\r");
});
});