Something went wrong. Try again.
This repository has no description
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152import { describe, expect, it } from "vitest";import { parseTimeParam } from "./time-param";
describe("parseTimeParam", () => { it("parses a bare number of seconds", () => { expect(parseTimeParam("151")).toBe(151); expect(parseTimeParam("0")).toBe(0); expect(parseTimeParam("90.5")).toBe(90.5); expect(parseTimeParam(42)).toBe(42); });
it("parses h/m/s duration strings", () => { expect(parseTimeParam("1h2m3s")).toBe(3723); expect(parseTimeParam("2m30s")).toBe(150); expect(parseTimeParam("90s")).toBe(90); expect(parseTimeParam("1h")).toBe(3600); expect(parseTimeParam("5m")).toBe(300); });
it("rejects string conversion and duration arithmetic overflow", () => { const overflow = "9".repeat(400); expect(parseTimeParam(overflow)).toBeNull(); expect(parseTimeParam(`${overflow}s`)).toBeNull(); // Each component is finite, but multiplying or summing can overflow. const finite = `1${"0".repeat(308)}`; expect(parseTimeParam(finite)).toBe(1e308); expect(parseTimeParam(`${finite}h`)).toBeNull(); expect(parseTimeParam(`${finite}m`)).toBeNull(); const hours = `3${"0".repeat(304)}`; expect(parseTimeParam(`${hours}h${finite}s`)).toBeNull(); });
it("returns null for missing or malformed values", () => { expect(parseTimeParam(undefined)).toBeNull(); expect(parseTimeParam(null)).toBeNull(); expect(parseTimeParam("")).toBeNull(); expect(parseTimeParam(" ")).toBeNull(); expect(parseTimeParam("abc")).toBeNull(); expect(parseTimeParam("12x")).toBeNull(); expect(parseTimeParam("-5")).toBeNull(); expect(parseTimeParam(-5)).toBeNull(); expect(parseTimeParam("m")).toBeNull(); expect(parseTimeParam("1m30")).toBeNull(); expect(parseTimeParam(NaN)).toBeNull(); expect(parseTimeParam(Infinity)).toBeNull(); // Runtime-untyped inputs a URL can produce. expect(parseTimeParam(["1"])).toBeNull(); expect(parseTimeParam({ t: 1 })).toBeNull(); expect(parseTimeParam(true)).toBeNull(); });});