import { Sparkline } from "@chopin/visuals"; import type { SparklineProps } from "@chopin/visuals"; import { describe, expect, test } from "bun:test"; import { renderToStaticMarkup } from "react-dom/server"; test("exports Sparkline and its props from the public package entry", () => { let props: SparklineProps = { label: "Request trend", values: [1, 2, 3] }; expect(typeof Sparkline).toBe("function"); expect(props.values).toEqual([1, 2, 3]); }); describe("Sparkline geometry", () => { test("keeps an empty series as an accessible SVG and forwards SVG props", () => { let markup = renderToStaticMarkup( , ); expect(markup.startsWith(["<", "svg"].join(""))).toBe(true); expect(markup).toContain('role="img"'); expect(markup).toContain('aria-label="No request history"'); expect(markup).toContain('class="cv-semantic cv-sparkline custom-chart"'); expect(markup).toContain('data-tone="neutral"'); expect(markup).toContain('data-sample="empty"'); expect(markup).toContain('id="request-trend"'); expect(markup).not.toContain(" { let markup = renderToStaticMarkup( , ); expect(markup).toContain(' { let markup = renderToStaticMarkup( , ); expect(markup).toContain('viewBox="0 0 72 32"'); expect(markup).toContain(' { let markup = renderToStaticMarkup( , ); expect(markup).toContain(' { let markup = renderToStaticMarkup( , ); let empty = renderToStaticMarkup( , ); let extreme = renderToStaticMarkup( , ); expect(markup).toContain(" { let values = Array(1_000_000).fill(0); values[500_000] = 10; let markup = renderToStaticMarkup(); expect(markup).toContain(" { let css = await Bun.file(new URL("./sparkline.css", import.meta.url)).text(); let styles = await Bun.file(new URL("../styles.css", import.meta.url)).text(); expect(styles).toContain('@import "./ui/sparkline.css";'); expect(css).toContain("width: calc(var(--spacing) * 18);"); expect(css).toContain("height: calc(var(--spacing) * 8);"); expect(css).toContain("stroke: var(--cv-semantic-graphic);"); expect(css).toContain("fill: var(--cv-semantic-graphic);"); expect(css).toContain("stroke-linecap: round;"); expect(css).toContain("stroke-linejoin: round;"); expect(css).toContain("background: transparent;"); expect(css).not.toMatch(/#[\da-f]{3,8}|(?:oklch|rgb|hsl)\(/i); });