diff --git a/packages/cli/src/commands/validate.test.ts b/packages/cli/src/commands/validate.test.ts index 3fe07fbfb..f706181ef 100644 --- a/packages/cli/src/commands/validate.test.ts +++ b/packages/cli/src/commands/validate.test.ts @@ -11,6 +11,7 @@ import { runAndParseJsonEnvelope, } from "./deprecationTestHarness.js"; import { + auditClipDurations, extractCompositionErrorsFromLint, navigationTimeoutHint, raceMediaReady, @@ -49,6 +50,58 @@ vi.mock("../utils/producer.js", () => ({ vi.mock("../utils/project.js", () => resolveProjectMock()); vi.mock("../utils/lintProject.js", () => lintProjectFailureMock()); +describe("auditClipDurations", () => { + it("audits audio only because explicit video slots hold their final frame", async () => { + let selector = ""; + const originalDocument = globalThis.document; + const audio = { + duration: 1, + id: "voice", + loop: false, + tagName: "AUDIO", + getAttribute: (name: string) => + name === "data-duration" ? "5" : name === "data-media-start" ? "0" : null, + }; + const page = { + evaluate: async (fn: (waitMs: number) => unknown, waitMs: number) => { + Object.defineProperty(globalThis, "document", { + configurable: true, + value: { + querySelectorAll: (query: string) => { + selector = query; + return [audio]; + }, + }, + }); + return fn(waitMs); + }, + }; + + try { + const warnings = await auditClipDurations( + page as never, + ({ slotSeconds, mediaSeconds }) => ({ + shortfallSeconds: slotSeconds - mediaSeconds, + toleranceSeconds: 0.05, + }), + 10, + ); + expect(selector).toBe("audio[data-duration]"); + expect(warnings).toHaveLength(1); + expect(warnings[0]?.text).toContain('Audio "voice"'); + } finally { + if (originalDocument === undefined) { + Reflect.deleteProperty(globalThis, "document"); + } else { + Object.defineProperty(globalThis, "document", { + configurable: true, + value: originalDocument, + }); + } + } + }); +}); + // Regression for the validate audio-duration-probe timeout: a slow-loading // media element's duration was snapshotted once, at a fixed point in time, // and any element still mid-load was permanently misreported as unreadable. diff --git a/packages/cli/src/commands/validate.ts b/packages/cli/src/commands/validate.ts index 2610aa725..3973e422c 100644 --- a/packages/cli/src/commands/validate.ts +++ b/packages/cli/src/commands/validate.ts @@ -127,8 +127,9 @@ export function raceMediaReady( } /** - * Flag ` diff --git a/packages/producer/tests/style-18-prod/src/index.html b/packages/producer/tests/style-18-prod/src/index.html index f7d9b3548..adc59818d 100644 --- a/packages/producer/tests/style-18-prod/src/index.html +++ b/packages/producer/tests/style-18-prod/src/index.html @@ -87,7 +87,6 @@ id="a-roll" class="full-screen" data-start="0" - data-duration="14" data-track-index="1" src="https://gen-os-static.s3.us-east-2.amazonaws.com/astral_assets/uploaded_assets/1dd17e4d_2c60a8b3482744e29584975d2b84164a.mp4" > diff --git a/packages/producer/tests/style-2-prod/src/index.html b/packages/producer/tests/style-2-prod/src/index.html index 8168fed82..4aca4629f 100644 --- a/packages/producer/tests/style-2-prod/src/index.html +++ b/packages/producer/tests/style-2-prod/src/index.html @@ -130,7 +130,6 @@ id="aroll" src="https://gen-os-static.s3.us-east-2.amazonaws.com/astral_assets/uploaded_assets/57704cd3_8424a748578a497084fd1278949184fc.mp4" data-start="0" - data-duration="17" data-track-index="1" > diff --git a/packages/producer/tests/style-4-prod/src/index.html b/packages/producer/tests/style-4-prod/src/index.html index a3f6ac786..563caf8ca 100644 --- a/packages/producer/tests/style-4-prod/src/index.html +++ b/packages/producer/tests/style-4-prod/src/index.html @@ -127,7 +127,6 @@ id="a-roll" src="https://gen-os-static.s3.us-east-2.amazonaws.com/astral_assets/uploaded_assets/2111e840_0579531a2ffe4c3ea8295b42051fb394.mp4" data-start="0" - data-duration="17" data-track-index="0" > diff --git a/packages/producer/tests/style-7-prod/src/compositions/main.html b/packages/producer/tests/style-7-prod/src/compositions/main.html index 7f4a9df48..e7424b263 100644 --- a/packages/producer/tests/style-7-prod/src/compositions/main.html +++ b/packages/producer/tests/style-7-prod/src/compositions/main.html @@ -5,7 +5,6 @@ id="aroll" src="https://gen-os-static.s3.us-east-2.amazonaws.com/astral_assets/uploaded_assets/70648f53_abe84fb9991841ae8ba82ee21ba6d37e.mp4" data-start="0" - data-duration="16.7" data-track-index="1" muted crossorigin="anonymous"