blob: 08269acfd3b015c1715cd57317c6f6b67ef82882 [file] [log] [blame]
'use strict';
const common = require('../common');
const stream = require('stream');
function test(throwCodeInbetween) {
// Check that a pipe does not stall if .read() is called unexpectedly
// (i.e. the stream is not resumed by the pipe).
const n = 1000;
let counter = n;
const rs = stream.Readable({
objectMode: true,
read: common.mustCallAtLeast(() => {
if (--counter >= 0)
rs.push({ counter });
else
rs.push(null);
}, n)
});
const ws = stream.Writable({
objectMode: true,
write: common.mustCall((data, enc, cb) => {
setImmediate(cb);
}, n)
});
setImmediate(() => throwCodeInbetween(rs, ws));
rs.pipe(ws);
}
test((rs) => rs.read());
test((rs) => rs.resume());
test(() => 0);