diff --git a/packages/core/src/compiler/timingCompiler.test.ts b/packages/core/src/compiler/timingCompiler.test.ts index b7dcf044c..0907894fe 100644 --- a/packages/core/src/compiler/timingCompiler.test.ts +++ b/packages/core/src/compiler/timingCompiler.test.ts @@ -4,6 +4,7 @@ import { injectDurations, extractResolvedMedia, clampDurations, + parseTimingAttr, } from "./timingCompiler.js"; describe("compileTimingAttrs", () => { @@ -185,3 +186,63 @@ describe("clampDurations", () => { expect(result).toContain('data-end="7"'); }); }); + +// ── Unparsable timing attributes ── +// +// A typo like data-start="abc" must not reach the compiled output: it would +// otherwise be serialized as data-end="NaN" and parsed downstream as a NaN +// duration. Unparsable values are treated as missing (data-start → 0, +// data-duration/data-end → resolver path), mirroring the Number.isFinite +// guard extractResolvedMedia already applies to data-duration. + +describe("unparsable timing attributes", () => { + it("normalizes an unparsable data-start to 0 and computes data-end from it", () => { + const html = '