// packages/core/tests/components/text-field/text-field.test.tsx import { render, screen } from "@solidjs/testing-library"; import { describe, expect, it } from "vitest"; import { TextField } from "../../../src/components/text-field/index"; describe("TextField", () => { it("label is linked to input via htmlFor/id", () => { render(() => ( Name )); const label = screen.getByText("Name"); const input = screen.getByRole("textbox"); expect(label.getAttribute("for")).toBe(input.id); }); it("description is linked via aria-describedby", () => { render(() => ( Name Enter your full name )); const input = screen.getByRole("textbox"); const desc = screen.getByText("Enter your full name"); expect(input.getAttribute("aria-describedby")).toBe(desc.id); }); it("error message not shown when not invalid", () => { render(() => ( Required )); expect(screen.queryByText("Required")).toBeNull(); }); it("error message shown when invalid=true", () => { render(() => ( Required )); expect(screen.getByText("Required")).toBeTruthy(); }); it("input has aria-invalid when invalid=true", () => { render(() => ( )); expect(screen.getByRole("textbox").getAttribute("aria-invalid")).toBe("true"); }); it("input is disabled when disabled=true", () => { render(() => ( )); expect(screen.getByRole("textbox")).toBeDisabled(); }); it("input has aria-required when required=true", () => { render(() => ( )); expect(screen.getByRole("textbox").getAttribute("aria-required")).toBe("true"); }); });