import { describe, expect, it } from "@suaveplan/testing/runner"; import { __testing_noDelay, retryRead } from "./retryable-read.js"; import type { RetryableReader } from "./retryable-read.types.js"; describe("PACKER-22 retry — internal no-retry fallback", () => { it("no-retry default delay returns 0", { timeout: 5000 }, () => { expect(__testing_noDelay()).toBe(0); }); }); describe("PACKER-22 retry spec conformance", () => { it("default policy is a single attempt with no retries", { timeout: 5000, }, async () => { let n = 0; const reader: RetryableReader = { read: async () => { n += 1; throw new Error("once"); }, }; let caught: unknown; try { await retryRead(reader); } catch (e) { caught = e; } expect(caught).toBeDefined(); expect(n).toBe(1); }); it("retryRead surfaces RetryAbortedError when signal fires before first read", { timeout: 5000, }, async () => { const reader: RetryableReader = { read: async () => ({ value: new Uint8Array([1]), done: false, }), }; const ctl = new AbortController(); ctl.abort(); let caught: unknown; try { await retryRead(reader, { signal: ctl.signal }); } catch (e) { caught = e; } expect(caught).toBeDefined(); }); });