Files
workinf_Blender_Wasm/web/tests/e2e/script-sandbox-cancellation.spec.ts
mes123456 380cbed4ff
Some checks are pending
M6 deployable RC / quick (push) Waiting to run
M6 deployable RC / chromium (push) Blocked by required conditions
M6 deployable RC / release (push) Blocked by required conditions
Checkpoint web parity through Chromium input tasks
2026-08-19 10:39:03 -04:00

28 lines
1.8 KiB
TypeScript

import { expect, test } from "@playwright/test";
test("M13-03E cancellation publishes neither a late message nor a cache entry", async ({ page }) => {
await page.goto("/");
const result = await page.evaluate(async () => {
const receipt = await new Promise<Record<string, any>>((resolve, reject) => {
const worker = new Worker("/src/workers/script-sandbox-cancellation-test.worker.ts", { type: "module" });
worker.onmessage = (event: MessageEvent<Record<string, any>>) => { worker.terminate(); resolve(event.data); };
worker.onerror = (event) => { worker.terminate(); reject(new Error(event.message)); };
worker.postMessage({ mode: "RECEIPT" });
});
const runtime = await new Promise<{ lateMessages: number; cacheWrites: number; cancelled: boolean }>((resolve, reject) => {
const worker = new Worker("/src/workers/script-sandbox-cancellation-test.worker.ts", { type: "module" });
let lateMessages = 0;
let cacheWrites = 0;
let cancelled = false;
worker.onmessage = () => { lateMessages += 1; if (!cancelled) cacheWrites += 1; };
worker.onerror = (event) => { worker.terminate(); reject(new Error(event.message)); };
worker.postMessage({ mode: "RUN" });
setTimeout(() => { cancelled = true; worker.terminate(); setTimeout(() => resolve({ lateMessages, cacheWrites, cancelled }), 80); }, 10);
});
return { receipt, runtime };
});
expect(result.receipt.cancelled).toMatchObject({ status: "CANCELLED", errorCode: "SCRIPT_SANDBOX_CANCELLED", mainRevisionBefore: 11, mainRevisionAfter: 11, temporaryBytes: 0, publishedResults: 0, lateResults: 0, committed: false });
expect(result.receipt.lateResult).toBe("SCRIPT_SANDBOX_LATE_RESULT");
expect(result.runtime).toEqual({ lateMessages: 0, cacheWrites: 0, cancelled: true });
});