mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-14 18:01:06 +00:00
120 lines
3.3 KiB
TypeScript
120 lines
3.3 KiB
TypeScript
import { render, screen } from "@testing-library/svelte";
|
|
import { user } from "../setup-tests";
|
|
import TooltipIcon from "./TooltipIcon.test.svelte";
|
|
|
|
describe("TooltipIcon", () => {
|
|
it("should render with default props", () => {
|
|
render(TooltipIcon);
|
|
|
|
expect(screen.getByText("Test tooltip text")).toBeInTheDocument();
|
|
});
|
|
|
|
it("should show and hide the tooltip", async () => {
|
|
render(TooltipIcon);
|
|
|
|
const trigger = screen.getByRole("button");
|
|
await user.hover(trigger);
|
|
|
|
expect(trigger).not.toHaveClass("bx--tooltip--hidden");
|
|
|
|
await user.keyboard("{Escape}");
|
|
expect(screen.getByRole("button")).toHaveClass("bx--tooltip--hidden");
|
|
});
|
|
|
|
it("should show tooltip on focus", async () => {
|
|
render(TooltipIcon);
|
|
|
|
const trigger = screen.getByRole("button");
|
|
await user.tab();
|
|
|
|
expect(trigger).not.toHaveClass("bx--tooltip--hidden");
|
|
});
|
|
|
|
it("should hide tooltip on Escape key", async () => {
|
|
render(TooltipIcon);
|
|
|
|
const trigger = screen.getByRole("button");
|
|
await user.hover(trigger);
|
|
await user.keyboard("{Escape}");
|
|
|
|
expect(trigger).toHaveClass("bx--tooltip--hidden");
|
|
});
|
|
|
|
describe("tooltip positioning", () => {
|
|
test.each([
|
|
["top", "bx--tooltip--top"],
|
|
["right", "bx--tooltip--right"],
|
|
["bottom", "bx--tooltip--bottom"],
|
|
["left", "bx--tooltip--left"],
|
|
] as const)("should support %s direction", (direction, expectedClass) => {
|
|
render(TooltipIcon, {
|
|
props: { direction },
|
|
});
|
|
|
|
const trigger = screen.getByRole("button");
|
|
expect(trigger).toHaveClass(expectedClass);
|
|
});
|
|
|
|
test.each([
|
|
["start", "bx--tooltip--align-start"],
|
|
["center", "bx--tooltip--align-center"],
|
|
["end", "bx--tooltip--align-end"],
|
|
] as const)("should support %s alignment", (align, expectedClass) => {
|
|
render(TooltipIcon, {
|
|
props: { align },
|
|
});
|
|
|
|
const trigger = screen.getByRole("button");
|
|
expect(trigger).toHaveClass(expectedClass);
|
|
});
|
|
});
|
|
|
|
it("should support disabled state", () => {
|
|
render(TooltipIcon, {
|
|
props: { disabled: true },
|
|
});
|
|
|
|
const trigger = screen.getByRole("button");
|
|
expect(trigger).toBeDisabled();
|
|
expect(trigger).toHaveStyle({ cursor: "not-allowed" });
|
|
expect(trigger).toHaveClass("bx--tooltip--hidden");
|
|
});
|
|
|
|
it("should not show tooltip when disabled", async () => {
|
|
render(TooltipIcon, {
|
|
props: { disabled: true },
|
|
});
|
|
|
|
const trigger = screen.getByRole("button");
|
|
await user.hover(trigger);
|
|
|
|
expect(trigger).toHaveClass("bx--tooltip--hidden");
|
|
});
|
|
|
|
it("should support custom tooltip text", () => {
|
|
render(TooltipIcon, {
|
|
props: { tooltipText: "Custom tooltip" },
|
|
});
|
|
|
|
expect(screen.getByText("Custom tooltip")).toBeInTheDocument();
|
|
});
|
|
|
|
it("should use provided id for tooltip", () => {
|
|
render(TooltipIcon, {
|
|
props: { id: "custom-id" },
|
|
});
|
|
|
|
const tooltip = screen.getByRole("button");
|
|
expect(tooltip).toHaveAttribute("aria-describedby", "custom-id");
|
|
});
|
|
|
|
it("should have correct ARIA attributes", () => {
|
|
render(TooltipIcon);
|
|
|
|
const trigger = screen.getByRole("button");
|
|
const tooltip = screen.getByText("Test tooltip text");
|
|
|
|
expect(trigger).toHaveAttribute("aria-describedby", "test-tooltip");
|
|
expect(tooltip).toHaveClass("bx--assistive-text");
|
|
});
|
|
});
|