import test from 'node:test'; import assert from 'node:assert/strict'; import { EventEmitter } from 'node:events'; import policyModule from '../src/main/process-error-policy.cjs'; const { installOutputPipeGuards, isBrokenPipeError } = policyModule; test('broken output pipes are recognized without treating unrelated failures as EPIPE', () => { assert.equal(isBrokenPipeError(Object.assign(new Error('closed'), { code: 'EPIPE' })), true); assert.equal(isBrokenPipeError(Object.assign(new Error('denied'), { code: 'EACCES' })), false); assert.equal(isBrokenPipeError(null), false); }); test('output pipe guard absorbs EPIPE and can be cleanly removed', () => { const stdout = new EventEmitter(); const stderr = new EventEmitter(); const observed = []; const remove = installOutputPipeGuards({ stdout, stderr, onBrokenPipe: (error) => observed.push(error.code) }); stdout.emit('error', Object.assign(new Error('closed'), { code: 'EPIPE' })); stderr.emit('error', Object.assign(new Error('closed'), { code: 'EPIPE' })); assert.deepEqual(observed, ['EPIPE', 'EPIPE']); remove(); assert.equal(stdout.listenerCount('error'), 0); assert.equal(stderr.listenerCount('error'), 0); });