mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-11-07 23:36:59 +00:00
57 lines
2.0 KiB
TypeScript
57 lines
2.0 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import {
|
|
findObjectArrayKeyframeIndex,
|
|
getCompatibleObjectArrayKeyframeTiming,
|
|
getObjectArrayKeyframeTiming,
|
|
} from "./gsapObjectArrayTiming.js";
|
|
|
|
describe("getObjectArrayKeyframeTiming", () => {
|
|
it("preserves tenth-percent precision for evenly distributed arrays", () => {
|
|
expect(getObjectArrayKeyframeTiming([undefined, undefined, undefined, undefined])).toEqual({
|
|
percentages: [0, 33.3, 66.7, 100],
|
|
});
|
|
});
|
|
|
|
it("maps positive authored durations to cumulative percentages", () => {
|
|
expect(getObjectArrayKeyframeTiming([1, 2, 1])).toEqual({
|
|
percentages: [25, 75, 100],
|
|
totalDuration: 4,
|
|
});
|
|
});
|
|
|
|
it.each([
|
|
[[0, 1, 1], "zero"],
|
|
[[1, -1, 1], "negative"],
|
|
[[1, Number.NaN, 1], "non-finite"],
|
|
[[1, "__raw:total * 0.5", 1], "expression"],
|
|
[[1, undefined, 1], "partial"],
|
|
])("rejects %s duration timing (%s)", (durations) => {
|
|
expect(getObjectArrayKeyframeTiming(durations)).toBeNull();
|
|
});
|
|
});
|
|
|
|
describe("findObjectArrayKeyframeIndex", () => {
|
|
it("falls back to the nearest array entry for an in-range percentage", () => {
|
|
expect(
|
|
findObjectArrayKeyframeIndex([undefined, undefined, undefined, undefined], 50, {
|
|
fallbackToNearest: true,
|
|
}),
|
|
).toBe(1);
|
|
});
|
|
|
|
it("rejects out-of-range and unresolved timing", () => {
|
|
expect(findObjectArrayKeyframeIndex([undefined, undefined], -1)).toBeNull();
|
|
expect(findObjectArrayKeyframeIndex([undefined, undefined], 101)).toBeNull();
|
|
expect(findObjectArrayKeyframeIndex([1, 0, 1], 50)).toBeNull();
|
|
});
|
|
});
|
|
|
|
describe("getCompatibleObjectArrayKeyframeTiming", () => {
|
|
it("accepts absent or matching outer durations and rejects conflicts", () => {
|
|
expect(getCompatibleObjectArrayKeyframeTiming([0.25, 0.75], undefined)).not.toBeNull();
|
|
expect(getCompatibleObjectArrayKeyframeTiming([0.25, 0.75], 1)).not.toBeNull();
|
|
expect(getCompatibleObjectArrayKeyframeTiming([0.25, 0.75], 2)).toBeNull();
|
|
expect(getCompatibleObjectArrayKeyframeTiming([0.25, 0.75], "1")).toBeNull();
|
|
});
|
|
});
|