35 lines
1.6 KiB
TypeScript
35 lines
1.6 KiB
TypeScript
import { describe, expect, it, vi } from "vitest";
|
|
|
|
import { ArchivedFontLoader, fontFamilyName } from "../../apps/web/src/text-font-loader.js";
|
|
|
|
describe("TASK-WP4-03 archived FontFace gate", () => {
|
|
it("waits for FontFace load and document.fonts ready before exposing a family", async () => {
|
|
const add = vi.fn();
|
|
const load = vi.fn(async () => ({ family: "Dada_FONT081" }));
|
|
const loader = new ArchivedFontLoader({
|
|
createFace: (family, source) => {
|
|
expect(family).toBe("Dada_FONT081");
|
|
expect(source).toBe("url(\"/api/v1/assets/public/wp4-fixture-v1/FONT081\")");
|
|
return { load };
|
|
},
|
|
fontSet: { add, check: () => true, ready: Promise.resolve() },
|
|
});
|
|
await expect(loader.ensure({ fontId: "FONT081", url: "/api/v1/assets/public/wp4-fixture-v1/FONT081" })).resolves.toBe("ready");
|
|
expect(load).toHaveBeenCalledOnce();
|
|
expect(add).toHaveBeenCalledOnce();
|
|
expect(loader.status("FONT081")).toBe("ready");
|
|
expect(fontFamilyName("FONT081")).toBe("Dada_FONT081");
|
|
});
|
|
|
|
it("marks a missing archived font unavailable without a fallback family", async () => {
|
|
const loader = new ArchivedFontLoader({
|
|
createFace: () => ({ load: async () => { throw new Error("404"); } }),
|
|
fontSet: { add: vi.fn(), check: () => false, ready: Promise.resolve() },
|
|
});
|
|
await expect(loader.ensure({ fontId: "FONT404", url: "/missing.ttf" })).resolves.toBe("unavailable");
|
|
expect(loader.status("FONT404")).toBe("unavailable");
|
|
expect(fontFamilyName("FONT404")).not.toContain(",");
|
|
expect(fontFamilyName("FONT404")).not.toMatch(/Arial|sans-serif|YaHei/i);
|
|
});
|
|
});
|