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);
});