import { expect, test } from "@playwright/test"; import fs from "node:fs"; import path from "node:path"; const root = path.resolve(import.meta.dirname, "../../.."); const expected = JSON.parse(fs.readFileSync(path.join(root, "tests/golden/M10-14/physics-cache-family.json"), "utf8")); test("M10-14 verifies every Physics family cache before playback", async ({ page }) => { await page.goto("/"); const result = await page.evaluate(() => new Promise>((resolve, reject) => { const worker = new Worker("/src/workers/physics-cache-family-test.worker.ts", { type: "module" }); worker.onmessage = (event: MessageEvent>) => { worker.terminate(); resolve(event.data); }; worker.onerror = (event) => { worker.terminate(); reject(new Error(event.message)); }; worker.postMessage({}); })) as { verified: Array<{ family: string; source: string; bytes: number; frames: number }>; sourceMismatch: string; payloadMismatch: string; versionMismatch: string; budgetExceeded: string; }; expect(result.verified.map((entry) => entry.family)).toEqual(expected.families); expect(result.verified.map((entry) => entry.source)).toEqual(expected.sources); expect(result.verified.every((entry) => entry.bytes === expected.byteLength)).toBe(true); expect(result.verified.every((entry) => entry.frames === expected.frameCount)).toBe(true); expect(result.sourceMismatch).toBe(expected.sourceMismatch); expect(result.payloadMismatch).toBe(expected.payloadMismatch); expect(result.versionMismatch).toBe(expected.versionMismatch); expect(result.budgetExceeded).toBe(expected.budgetExceeded); });