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 );
});
});
Messung V0.5 in Prozent C=98 H=100 G=98
¤ Dauer der Verarbeitung: 0.0 Sekunden
(vorverarbeitet am 2026-05-26)
¤
*© Formatika GbR, Deutschland