Files
hyperframes/packages/core/src/runtime/timelineRebindPolicy.test.ts
T

58 lines
1.6 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
PLAY_REBIND_HOLD_SECONDS,
TIMELINE_REBIND_INTERVAL_FRAMES,
shouldAttemptPeriodicTimelineBind,
} from "./timelineRebindPolicy";
describe("shouldAttemptPeriodicTimelineBind", () => {
it("only checks for replacements at the periodic boundary", () => {
expect(
shouldAttemptPeriodicTimelineBind({
tick: TIMELINE_REBIND_INTERVAL_FRAMES - 1,
isPlaying: false,
hasCapturedTimeline: true,
currentTimeSeconds: 0,
}),
).toBe(false);
expect(
shouldAttemptPeriodicTimelineBind({
tick: TIMELINE_REBIND_INTERVAL_FRAMES,
isPlaying: false,
hasCapturedTimeline: true,
currentTimeSeconds: 0,
}),
).toBe(true);
});
it("holds a captured timeline during the first playback seconds", () => {
expect(
shouldAttemptPeriodicTimelineBind({
tick: TIMELINE_REBIND_INTERVAL_FRAMES,
isPlaying: true,
hasCapturedTimeline: true,
currentTimeSeconds: PLAY_REBIND_HOLD_SECONDS - 0.001,
}),
).toBe(false);
expect(
shouldAttemptPeriodicTimelineBind({
tick: TIMELINE_REBIND_INTERVAL_FRAMES,
isPlaying: true,
hasCapturedTimeline: true,
currentTimeSeconds: PLAY_REBIND_HOLD_SECONDS,
}),
).toBe(true);
});
it("does not hold when no timeline has bound yet", () => {
expect(
shouldAttemptPeriodicTimelineBind({
tick: TIMELINE_REBIND_INTERVAL_FRAMES,
isPlaying: true,
hasCapturedTimeline: false,
currentTimeSeconds: 0,
}),
).toBe(true);
});
});