import { describe, it, expect, beforeAll, afterAll } from "vitest";
import { loadAllAppCss } from "../../test/cssFixture";
function effectivePxForFontSize(fontSize: string, rootPx: number): number {
if (fontSize.endsWith("rem")) {
return Number.parseFloat(fontSize) * rootPx;
}
return Number.parseFloat(fontSize);
}
describe("board font scale", () => {
let styleEl: HTMLStyleElement;
beforeAll(() => {
styleEl = document.createElement("style");
styleEl.textContent = loadAllAppCss();
document.head.appendChild(styleEl);
});
afterAll(() => {
styleEl.remove();
document.documentElement.style.fontSize = "";
document.body.innerHTML = "";
});
it("scales board typography when dashboard root font scale changes", () => {
document.body.innerHTML = `
Todo
3
work
FN-1
Task title
meta
Hint
`;
const titleEl = document.querySelector(".card-title") as Element;
const headerEl = document.querySelector(".column-header h2") as Element;
const quickEl = document.querySelector(".quick-entry-input") as Element;
const countEl = document.querySelector(".column-count") as Element;
const getPx = (el: Element): number => {
const fontSize = getComputedStyle(el).fontSize;
const rootInline = document.documentElement.style.fontSize;
const rootPx = rootInline.endsWith("%")
? (Number.parseFloat(rootInline) / 100) * 16
: Number.parseFloat(getComputedStyle(document.documentElement).fontSize);
return effectivePxForFontSize(fontSize, rootPx);
};
document.documentElement.style.fontSize = "85%";
const title85 = getPx(titleEl);
const header85 = getPx(headerEl);
const quick85 = getPx(quickEl);
document.documentElement.style.fontSize = "100%";
const title100 = getPx(titleEl);
const header100 = getPx(headerEl);
const quick100 = getPx(quickEl);
const count100 = getPx(countEl);
document.documentElement.style.fontSize = "125%";
const title125 = getPx(titleEl);
const header125 = getPx(headerEl);
const quick125 = getPx(quickEl);
expect(title100).toBeCloseTo(13, 2);
expect(header100).toBeCloseTo(14, 2);
expect(quick100).toBeCloseTo(13, 2);
expect(count100).toBeCloseTo(12, 2);
expect(title85).toBeCloseTo(11.05, 2);
expect(header85).toBeCloseTo(11.9, 2);
expect(quick85).toBeCloseTo(11.05, 2);
expect(title125).toBeCloseTo(16.25, 2);
expect(header125).toBeCloseTo(17.5, 2);
expect(quick125).toBeCloseTo(16.25, 2);
});
});