mirror of
https://github.com/nodejs/node.git
synced 2025-05-09 07:27:32 +00:00

Adds destroy() and _destroy() methods to Readable, Writable, Duplex and Transform. It also standardizes the behavior and the implementation of destroy(), which has been inconsistent in userland and core. This PR also updates all the subsystems of core to use the new destroy(). PR-URL: https://github.com/nodejs/node/pull/12925 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Calvin Metcalf <calvin.metcalf@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
144 lines
3.2 KiB
JavaScript
144 lines
3.2 KiB
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
const { Transform } = require('stream');
|
|
const assert = require('assert');
|
|
|
|
{
|
|
const transform = new Transform({
|
|
transform(chunk, enc, cb) {}
|
|
});
|
|
|
|
transform.resume();
|
|
|
|
transform.on('end', common.mustCall());
|
|
transform.on('close', common.mustCall());
|
|
transform.on('finish', common.mustCall());
|
|
|
|
transform.destroy();
|
|
}
|
|
|
|
{
|
|
const transform = new Transform({
|
|
transform(chunk, enc, cb) {}
|
|
});
|
|
transform.resume();
|
|
|
|
const expected = new Error('kaboom');
|
|
|
|
transform.on('end', common.mustCall());
|
|
transform.on('finish', common.mustCall());
|
|
transform.on('close', common.mustCall());
|
|
transform.on('error', common.mustCall((err) => {
|
|
assert.strictEqual(err, expected);
|
|
}));
|
|
|
|
transform.destroy(expected);
|
|
}
|
|
|
|
{
|
|
const transform = new Transform({
|
|
transform(chunk, enc, cb) {}
|
|
});
|
|
|
|
transform._destroy = common.mustCall(function(err, cb) {
|
|
assert.strictEqual(err, expected);
|
|
cb(err);
|
|
}, 1);
|
|
|
|
const expected = new Error('kaboom');
|
|
|
|
transform.on('finish', common.mustNotCall('no finish event'));
|
|
transform.on('close', common.mustNotCall('no close event'));
|
|
transform.on('error', common.mustCall((err) => {
|
|
assert.strictEqual(err, expected);
|
|
}));
|
|
|
|
transform.destroy(expected);
|
|
}
|
|
|
|
{
|
|
const expected = new Error('kaboom');
|
|
const transform = new Transform({
|
|
transform(chunk, enc, cb) {},
|
|
destroy: common.mustCall(function(err, cb) {
|
|
assert.strictEqual(err, expected);
|
|
cb();
|
|
}, 1)
|
|
});
|
|
transform.resume();
|
|
|
|
transform.on('end', common.mustNotCall('no end event'));
|
|
transform.on('close', common.mustNotCall('no close event'));
|
|
transform.on('finish', common.mustNotCall('no finish event'));
|
|
|
|
// error is swallowed by the custom _destroy
|
|
transform.on('error', common.mustNotCall('no error event'));
|
|
|
|
transform.destroy(expected);
|
|
}
|
|
|
|
{
|
|
const transform = new Transform({
|
|
transform(chunk, enc, cb) {}
|
|
});
|
|
|
|
transform._destroy = common.mustCall(function(err, cb) {
|
|
assert.strictEqual(err, null);
|
|
cb();
|
|
}, 1);
|
|
|
|
transform.destroy();
|
|
}
|
|
|
|
{
|
|
const transform = new Transform({
|
|
transform(chunk, enc, cb) {}
|
|
});
|
|
transform.resume();
|
|
|
|
transform._destroy = common.mustCall(function(err, cb) {
|
|
assert.strictEqual(err, null);
|
|
process.nextTick(() => {
|
|
this.push(null);
|
|
this.end();
|
|
cb();
|
|
});
|
|
}, 1);
|
|
|
|
const fail = common.mustNotCall('no event');
|
|
|
|
transform.on('finish', fail);
|
|
transform.on('end', fail);
|
|
transform.on('close', fail);
|
|
|
|
transform.destroy();
|
|
|
|
transform.removeListener('end', fail);
|
|
transform.removeListener('finish', fail);
|
|
transform.on('end', common.mustCall());
|
|
transform.on('finish', common.mustCall());
|
|
}
|
|
|
|
{
|
|
const transform = new Transform({
|
|
transform(chunk, enc, cb) {}
|
|
});
|
|
|
|
const expected = new Error('kaboom');
|
|
|
|
transform._destroy = common.mustCall(function(err, cb) {
|
|
assert.strictEqual(err, null);
|
|
cb(expected);
|
|
}, 1);
|
|
|
|
transform.on('close', common.mustNotCall('no close event'));
|
|
transform.on('finish', common.mustNotCall('no finish event'));
|
|
transform.on('end', common.mustNotCall('no end event'));
|
|
transform.on('error', common.mustCall((err) => {
|
|
assert.strictEqual(err, expected);
|
|
}));
|
|
|
|
transform.destroy();
|
|
}
|