import { createRawSnippet } from "svelte"; import { describe, expect, it } from "vitest"; import { GRID_LIST_COLUMNS, GridList, gridList, list, } from "./fixtures/collection-structure-consumer"; import CollectionStructureConsumer from "./fixtures/CollectionStructureConsumer.svelte"; import { classes, classesOf, render, rendered } from "./mount"; describe("the Base GridList", () => { it("is available through Base", () => { expect(GridList).toBeDefined(); }); it("renders a plain div grid without list semantics when list is false (wave 5A)", () => { const element = rendered(render(GridList, { columns: 2, gap: "lg", list: false, children: createRawSnippet(() => ({ render: () => "
KPI
" })), })); expect(element.tagName).toBe("DIV"); expect(element.hasAttribute("role")).toBe(false); expect(element.hasAttribute("data-grid-list")).toBe(true); expect(classes(element)).toEqual(classesOf(list({ gap: "lg", class: gridList({ columns: 2 }) }))); }); it("composes List semantics with a caller-selected responsive grid", () => { expect(GRID_LIST_COLUMNS).toEqual([1, 2, 3, 4]); const element = rendered(render(GridList, { columns: 3, gap: "sm", class: "min-w-0", "aria-label": "Services", children: createRawSnippet(() => ({ render: () => '
  • API
  • ', })), })); expect(element.tagName).toBe("UL"); expect(element.hasAttribute("data-list")).toBe(true); expect(element.getAttribute("aria-label")).toBe("Services"); expect(classes(element)).toEqual(classesOf(list({ gap: "sm", class: gridList({ columns: 3, class: "min-w-0" }), }))); expect([...element.querySelectorAll("a, button")].map((item) => item.textContent)) .toEqual(["API", "Restart"]); expect(element.tabIndex).toBe(-1); expect(element.hasAttribute("data-density")).toBe(false); }); it("inherits every nested appearance axis", () => { const element = render(CollectionStructureConsumer) .querySelector("[data-nested-grid-list]")!; expect(element.hasAttribute("data-theme")).toBe(false); expect(element.hasAttribute("data-color-scheme")).toBe(false); expect(element.hasAttribute("data-density")).toBe(false); }); });