71 lines · 2.5 KB · TypeScript
RawDownload
import { describe, expect, it } from "vite-plus/test"; import {  clampCodeFontSize,  clampInterfaceFontSize,  clampPromptFontSize,  DEFAULT_CODE_FONT_STACK,  DEFAULT_SANS_FONT_STACK,  appearanceFontStack,  cssFontFamilies,  resolveDefaultFamilyLabel,} from "./appearanceFonts"; describe("cssFontFamilies", () => {  it("returns null for effectively empty input", () => {    expect(cssFontFamilies("")).toBeNull();    expect(cssFontFamilies("   ")).toBeNull();    expect(cssFontFamilies(" , , ")).toBeNull();  });   it("quotes names with spaces and keeps single idents bare", () => {    expect(cssFontFamilies("Fira Code")).toBe('"Fira Code"');    expect(cssFontFamilies("monospace")).toBe("monospace");    expect(cssFontFamilies('"Comic Mono"')).toBe('"Comic Mono"');  });   it("normalizes comma-separated lists and strips embedded quotes", () => {    expect(cssFontFamilies(" Fira Code , Menlo ")).toBe('"Fira Code", Menlo');    expect(cssFontFamilies('Bad"Name')).toBe('"BadName"');  });   it("quotes names that are not single CSS idents", () => {    expect(cssFontFamilies("3270 Nerd Font")).toBe('"3270 Nerd Font"');    expect(cssFontFamilies("M+ 1m")).toBe('"M+ 1m"');  });}); describe("resolveDefaultFamilyLabel", () => {  it("skips generic keywords and returns null for a stack of only generics", () => {    expect(resolveDefaultFamilyLabel("system-ui, sans-serif")).toBeNull();    expect(resolveDefaultFamilyLabel("ui-monospace, monospace")).toBeNull();  });}); describe("appearanceFontStack", () => {  it("prepends the custom family to the default stack", () => {    expect(appearanceFontStack("Fira Code", DEFAULT_CODE_FONT_STACK)).toBe(      `"Fira Code", ${DEFAULT_CODE_FONT_STACK}`,    );  });   it("falls back to the default stack when unset", () => {    expect(appearanceFontStack("", DEFAULT_SANS_FONT_STACK)).toBe(DEFAULT_SANS_FONT_STACK);  });}); describe("font size clamping", () => {  it("keeps sizes inside the ranges the UI can absorb", () => {    expect(clampInterfaceFontSize(16)).toBe(16);    expect(clampInterfaceFontSize(2)).toBe(12);    expect(clampInterfaceFontSize(96)).toBe(20);    expect(clampPromptFontSize(40)).toBe(20);    expect(clampCodeFontSize(1)).toBe(10);  });   it("rounds fractional values and falls back for unusable input", () => {    expect(clampCodeFontSize(13.4)).toBe(13);    expect(clampInterfaceFontSize(Number.NaN)).toBe(16);    expect(clampPromptFontSize(Number.POSITIVE_INFINITY)).toBe(14);  });});