import { cn } from "@/lib/cn"; import { describe, expect, it } from "vitest"; describe("cn", () => { it("merges simple class names", () => { expect(cn("foo", "bar")).toBe("foo bar"); }); it("handles conditional classes", () => { expect(cn("base", true && "active", false && "hidden")).toBe("base active"); }); it("handles undefined and null", () => { expect(cn("base", undefined, null, "end")).toBe("base end"); }); it("handles empty string", () => { expect(cn("")).toBe(""); }); it("handles no arguments", () => { expect(cn()).toBe(""); }); it("merges tailwind classes correctly", () => { // twMerge should handle conflicting tailwind classes const result = cn("px-2 py-1", "px-4"); expect(result).toContain("px-4"); expect(result).not.toContain("px-2"); }); it("handles array input", () => { const result = cn(["foo", "bar"]); expect(result).toContain("foo"); expect(result).toContain("bar"); }); it("handles object input", () => { const result = cn({ active: true, hidden: false, visible: true }); expect(result).toContain("active"); expect(result).toContain("visible"); expect(result).not.toContain("hidden"); }); });