'use strict'; const common = require('../common'); const assert = require('assert'); const { duplexPair } = require('stream'); const [sideA, sideB] = duplexPair(); // Side A should receive the error because we called .destroy(err) on it. sideA.on('error', common.mustCall((err) => { assert.strictEqual(err.message, 'Simulated error'); })); // Side B should NOT necessarily emit an error (to avoid crashing // existing code), but it MUST be destroyed. sideB.on('error', common.mustNotCall('Side B should not emit an error event')); sideB.on('close', common.mustCall(() => { assert.strictEqual(sideB.destroyed, true); })); sideA.resume(); sideB.resume(); // Trigger the destruction sideA.destroy(new Error('Simulated error')); // Check the state in the next tick to allow nextTick/microtasks to run setImmediate(common.mustCall(() => { assert.strictEqual(sideA.destroyed, true); assert.strictEqual(sideB.destroyed, true); }));