Spaces:
Running
Running
| import { describe, expect, it, vi } from "vitest"; | |
| import { createSafeStreamWriter } from "./stream-writer.js"; | |
| describe("createSafeStreamWriter", () => { | |
| it("signals broken pipes and closes the writer", () => { | |
| const onBrokenPipe = vi.fn(); | |
| const writer = createSafeStreamWriter({ onBrokenPipe }); | |
| const stream = { | |
| write: vi.fn(() => { | |
| const err = new Error("EPIPE") as NodeJS.ErrnoException; | |
| err.code = "EPIPE"; | |
| throw err; | |
| }), | |
| } as unknown as NodeJS.WriteStream; | |
| expect(writer.writeLine(stream, "hello")).toBe(false); | |
| expect(writer.isClosed()).toBe(true); | |
| expect(onBrokenPipe).toHaveBeenCalledTimes(1); | |
| onBrokenPipe.mockClear(); | |
| expect(writer.writeLine(stream, "again")).toBe(false); | |
| expect(onBrokenPipe).toHaveBeenCalledTimes(0); | |
| }); | |
| it("treats broken pipes from beforeWrite as closed", () => { | |
| const onBrokenPipe = vi.fn(); | |
| const writer = createSafeStreamWriter({ | |
| onBrokenPipe, | |
| beforeWrite: () => { | |
| const err = new Error("EIO") as NodeJS.ErrnoException; | |
| err.code = "EIO"; | |
| throw err; | |
| }, | |
| }); | |
| const stream = { write: vi.fn(() => true) } as unknown as NodeJS.WriteStream; | |
| expect(writer.write(stream, "hi")).toBe(false); | |
| expect(writer.isClosed()).toBe(true); | |
| expect(onBrokenPipe).toHaveBeenCalledTimes(1); | |
| }); | |
| }); | |