* refactor(process): separate capture implementation from analyst workflows * fix(ci): generate source catalog before shard tests
39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { scheduleProcessDelay } from "./ProcessTimer.js";
|
|
|
|
describe("process delay scheduling", () => {
|
|
it("splits long delays into timer-sized chunks and can cancel the next chunk", () => {
|
|
const scheduled: Array<{
|
|
readonly delayMs: number;
|
|
readonly callback: () => void;
|
|
cancelled: boolean;
|
|
}> = [];
|
|
const schedule = (callback: () => void, delayMs: number) => {
|
|
const entry = { delayMs, callback, cancelled: false };
|
|
scheduled.push(entry);
|
|
return { cancel: () => (entry.cancelled = true) };
|
|
};
|
|
let fired = false;
|
|
const timer = scheduleProcessDelay(
|
|
2_147_483_647 + 25,
|
|
() => {
|
|
fired = true;
|
|
},
|
|
schedule,
|
|
);
|
|
|
|
expect(scheduled.map(({ delayMs }) => delayMs)).toEqual([2_147_483_647]);
|
|
scheduled[0]?.callback();
|
|
expect(scheduled.map(({ delayMs }) => delayMs)).toEqual([
|
|
2_147_483_647, 25,
|
|
]);
|
|
expect(fired).toBe(false);
|
|
|
|
timer.cancel();
|
|
expect(scheduled[1]?.cancelled).toBe(true);
|
|
scheduled[1]?.callback();
|
|
expect(fired).toBe(false);
|
|
});
|
|
});
|