node/test/parallel/test-stream-once-readable-pipe.js
Matteo Collina 98cf84f2c9 stream: restore flow if there are 'data' handlers after once('readable')
Fixes: https://github.com/nodejs/node/issues/21398
See: https://github.com/nodejs/node/pull/21696

PR-URL: https://github.com/nodejs/node/pull/22209
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Mathias Buus <mathiasbuus@gmail.com>
2018-08-21 22:36:13 -07:00

62 lines
1.2 KiB
JavaScript

'use strict';
const common = require('../common');
const assert = require('assert');
const { Readable, Writable } = require('stream');
// This test ensures that if have 'readable' listener
// on Readable instance it will not disrupt the pipe.
{
let receivedData = '';
const w = new Writable({
write: (chunk, env, callback) => {
receivedData += chunk;
callback();
},
});
const data = ['foo', 'bar', 'baz'];
const r = new Readable({
read: () => {},
});
r.once('readable', common.mustCall());
r.pipe(w);
r.push(data[0]);
r.push(data[1]);
r.push(data[2]);
r.push(null);
w.on('finish', common.mustCall(() => {
assert.strictEqual(receivedData, data.join(''));
}));
}
{
let receivedData = '';
const w = new Writable({
write: (chunk, env, callback) => {
receivedData += chunk;
callback();
},
});
const data = ['foo', 'bar', 'baz'];
const r = new Readable({
read: () => {},
});
r.pipe(w);
r.push(data[0]);
r.push(data[1]);
r.push(data[2]);
r.push(null);
r.once('readable', common.mustCall());
w.on('finish', common.mustCall(() => {
assert.strictEqual(receivedData, data.join(''));
}));
}