test.social/core/evaluators/page.evaluator.test.ts
test.social/core/evaluators/page.evaluator.test.ts is a file in Codebase Testing. 53 lines of code and 0 definitions.
import type { ColumnEntry, ColumnSpec, FrameContext } from "@banes-lab/social-share/types/card.types.ts";
import { columnOf, wrapCount } from "@banes-lab/social-share/core/evaluators/page.evaluator.ts";
import { describe, expect, it } from "vitest";
const WIDE: FrameContext = { frame: 0, frames: 10, profile: { height: 600, id: "p", width: 1000 }, progress: 0, t: 0 };
const COLUMN: ColumnSpec = {
align: "center",
rows: {
kicker: { gap: 0, leading: 1, size: 0.02 },
rule: { gap: 0.05, leading: 1, size: 0.006, width: 0.2 },
subtitle: { gap: 0.05, leading: 1.5, size: 0.02 },
title: { gap: 0.02, leading: 1, size: 0.05 },
},
width: 0.6,
x: 0.2,
y: 0.5,
};
describe("wrapCount", () => {
it("counts the lines a monospace text wraps to at a column count", () => {
expect(wrapCount("one two three", 20)).toBe(1);
expect(wrapCount("one two three", 7)).toBe(2);
expect(wrapCount("one two three", 3)).toBe(3);
expect(wrapCount("unbreakable", 4)).toBe(1);
expect(wrapCount("", 0)).toBe(1);
});
});
describe("columnOf", () => {
it("stacks the rows downward, centers the block on the column's anchor and centers narrow rows", () => {
const entries: readonly ColumnEntry[] = [
{ row: "title", text: "A title" },
{ row: "subtitle", text: "A tagline" },
{ row: "rule", text: "" },
];
const boxes = columnOf(COLUMN, entries, WIDE);
const title = boxes.get("title");
const subtitle = boxes.get("subtitle");
const rule = boxes.get("rule");
expect(title?.height).toBeCloseTo(50 / 600);
expect(subtitle?.y).toBeCloseTo((title?.y ?? 0) + (title?.height ?? 0) + 0.05);
expect(rule?.x).toBeCloseTo(0.4);
expect(rule?.height).toBeCloseTo(6 / 600);
const bottom = (rule?.y ?? 0) + (rule?.height ?? 0);
expect(((title?.y ?? 0) + bottom) / 2).toBeCloseTo(0.5);
expect(boxes.has("kicker")).toBe(false);
});
it("grows a title that wraps and places a left-aligned column at its own edge", () => {
const narrow = { ...COLUMN, align: "left" as const, width: 0.1 };
const boxes = columnOf(narrow, [{ row: "title", text: "A long wrapping title" }], WIDE);
expect(boxes.get("title")?.height).toBeGreaterThan(50 / 600);
expect(boxes.get("title")?.x).toBeCloseTo(0.2);
const right = columnOf({ ...COLUMN, align: "right" }, [{ row: "rule", text: "" }], WIDE);
expect(right.get("rule")?.x).toBeCloseTo(0.6);
});
});