// packages/core/tests/components/tabs/tabs.test.tsx import { fireEvent, render, screen } from "@solidjs/testing-library"; import { describe, expect, it } from "vitest"; import { Tabs } from "../../../src/components/tabs/index"; describe("Tabs", () => { it("first tab is selected when defaultValue matches", () => { render(() => ( Tab A Tab B Panel A Panel B )); expect(screen.getByText("Tab A").getAttribute("aria-selected")).toBe("true"); expect(screen.getByText("Tab B").getAttribute("aria-selected")).toBe("false"); }); it("clicking a tab activates it", () => { render(() => ( Tab A Tab B Panel A Panel B )); fireEvent.click(screen.getByText("Tab B")); expect(screen.getByText("Tab B").getAttribute("aria-selected")).toBe("true"); expect(screen.getByText("Tab A").getAttribute("aria-selected")).toBe("false"); }); it("inactive panels are hidden", () => { render(() => ( Tab A Tab B Panel A Panel B )); expect(screen.getByTestId("panel-a")).not.toHaveAttribute("hidden"); expect(screen.getByTestId("panel-b")).toHaveAttribute("hidden"); }); it("tab has role=tab and panel has role=tabpanel", () => { render(() => ( Tab A Panel A )); expect(screen.getByRole("tab")).toBeTruthy(); expect(screen.getByRole("tabpanel")).toBeTruthy(); }); it("tab aria-controls matches panel id", () => { render(() => ( Tab A Panel A )); const tab = screen.getByRole("tab"); const panel = screen.getByTestId("panel"); expect(tab.getAttribute("aria-controls")).toBe(panel.id); }); it("ArrowRight moves to next tab", () => { render(() => ( Tab A Tab B Panel A Panel B )); const tabA = screen.getByText("Tab A"); tabA.focus(); fireEvent.keyDown(tabA, { key: "ArrowRight" }); expect(document.activeElement).toBe(screen.getByText("Tab B")); }); it("controlled value", () => { render(() => ( {}}> Tab A Tab B Panel A Panel B )); expect(screen.getByText("Tab B").getAttribute("aria-selected")).toBe("true"); }); });