23 lines
1.1 KiB
TypeScript
23 lines
1.1 KiB
TypeScript
import { expect, test } from "bun:test";
|
|
import { countdownLabel, renderCountdownGif } from "../src/countdown.ts";
|
|
|
|
test("countdown ticks across boundaries and stops at zero", () => {
|
|
expect(countdownLabel(86401000, 0)).toBe("001D 00H 00M 01S");
|
|
expect(countdownLabel(86401000, 2000)).toBe("000D 23H 59M 59S");
|
|
expect(countdownLabel(1000, 2000)).toBe("000D 00H 00M 00S");
|
|
expect(() => countdownLabel(NaN, 0)).toThrow();
|
|
expect(() => renderCountdownGif(1000, 0, 61)).toThrow();
|
|
});
|
|
|
|
test("countdown generates deterministic bounded non-looping GIF output", () => {
|
|
const first = renderCountdownGif(60000, 0);
|
|
expect(first).toEqual(renderCountdownGif(60000, 0));
|
|
expect(new TextDecoder().decode(first.subarray(0, 6))).toBe("GIF89a");
|
|
expect(first[6]! + first[7]! * 256).toBe(320);
|
|
expect(first[8]! + first[9]! * 256).toBe(64);
|
|
expect(first.at(-1)).toBe(0x3b);
|
|
expect(first.byteLength).toBeLessThan(100_000);
|
|
expect(new TextDecoder().decode(first)).not.toContain("NETSCAPE2.0");
|
|
expect(renderCountdownGif(0, 1000).byteLength).toBeLessThan(first.byteLength);
|
|
});
|