test(engine): add regression tests for video hold-last-frame fix

Add getFrameAtTime regression test covering source shorter than
data-duration: verifies last frame is returned (not null) when
seeking past source end for non-looping videos.

Strengthens the FrameLookupTable test to check at both 1.5s and
4.9s (near timeline end) to guard against future regressions.
This commit is contained in:
Miguel Ángel
2026-05-23 11:43:04 -04:00
parent ee01062e7d
commit 97850310d8
@@ -17,6 +17,7 @@ import {
parseImageElements,
extractAllVideoFrames,
createFrameLookupTable,
getFrameAtTime,
resolveProjectRelativeSrc,
codecMayHaveAlpha,
decoderForCodec,
@@ -259,6 +260,17 @@ describe("FrameLookupTable", () => {
const pastEnd = table.getActiveFramePayloads(1.5);
expect(pastEnd.has("hero")).toBe(true);
expect(pastEnd.get("hero")!.frameIndex).toBe(29);
const nearTimelineEnd = table.getActiveFramePayloads(4.9);
expect(nearTimelineEnd.has("hero")).toBe(true);
expect(nearTimelineEnd.get("hero")!.frameIndex).toBe(29);
});
it("getFrameAtTime returns last frame for non-looping video past source end", () => {
const extracted = fakeExtracted(90, 30); // 3s @ 30fps
expect(getFrameAtTime(extracted, 1.0, 0, false, 0)).toBe("frame-30.jpg");
expect(getFrameAtTime(extracted, 5.0, 0, false, 0)).toBe("frame-89.jpg");
expect(getFrameAtTime(extracted, 10.0, 0, false, 0)).toBe("frame-89.jpg");
expect(getFrameAtTime(extracted, -1.0, 0, false, 0)).toBeNull();
});
});