import { describe, expect, it } from "vitest"; import { transformTailwind } from "./tailwind"; describe("transformTailwind — v3 -> v4 class renames", () => { it("renames the flex-grow/shrink family", () => { const r = transformTailwind(`
`); expect(r.content).toContain('className="grow-0 shrink"'); }); it("removes transform/filter (v4 applies them automatically)", () => { const r = transformTailwind(`
`); expect(r.content).toContain('className="scale-105"'); }); it("bumps the default ring width (v3 3px -> v4 ring-3)", () => { const r = transformTailwind(`
`); expect(r.content).toContain("ring-3 ring-blue-500"); }); it("shifts the shadow scale down one step without cascading (single-pass map lookup)", () => { const r = transformTailwind(`
`); expect(r.content).toContain('className="shadow-xs"'); }); it("shifts shadow, blur, rounded, and drop-shadow scales independently", () => { const r = transformTailwind( `
`, ); expect(r.content).toContain("shadow-sm"); expect(r.content).toContain("blur-sm"); expect(r.content).toContain("rounded-sm"); expect(r.content).toContain("drop-shadow-sm"); }); it("renames outline-none to outline-hidden", () => { const r = transformTailwind(`
`); expect(r.content).toContain('className="outline-hidden"'); }); it("renames bg-gradient-to-* to bg-linear-to-*", () => { const r = transformTailwind(`
`); expect(r.content).toContain("bg-linear-to-r"); }); it("renames known daisyUI v4 -> v5 classes", () => { const r = transformTailwind(`
`); expect(r.content).toContain("badge-soft"); expect(r.content).toContain("card-sm"); }); }); describe("transformTailwind — gotcha detection (flag, don't auto-fix)", () => { it("flags DaisyUI .collapse usage as a manual-review finding", () => { const r = transformTailwind( `
`, ); expect(r.notes.some((n) => n.startsWith("MANUAL:") && n.includes("collapse"))).toBe(true); }); it("flags btn-group and form-control as removed-in-v5", () => { const r = transformTailwind(`
`); expect(r.notes.filter((n) => n.startsWith("MANUAL:")).length).toBeGreaterThanOrEqual(2); }); it("flags a shorthand/longhand spacing conflict (px-* mixed with pl-*/pr-*)", () => { const r = transformTailwind(`
`); expect(r.notes.some((n) => n.startsWith("MANUAL:") && n.includes("padding-inline"))).toBe(true); }); it("does not flag px-* used alone (no mixed longhand)", () => { const r = transformTailwind(`
`); expect(r.notes.some((n) => n.includes("padding-inline"))).toBe(false); }); });