| 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); |
| }); |
| }); |
|
|