node/test/parallel/test-stream-readable-emit-readable-short-stream.js
Matteo Collina 269103a0e5 stream: fix regression introduced in #26059
In #26059, we introduced a bug that caused 'readable' to be nextTicked
on EOF of a ReadableStream. This breaks the dicer module on CITGM.
That change was partially reverted to still fix the bug in #25810 and
not break dicer.

See: https://github.com/nodejs/node/pull/26059
Fixes: https://github.com/nodejs/node/issues/25810

PR-URL: https://github.com/nodejs/node/pull/26643
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
2019-03-16 11:58:12 +01:00

147 lines
2.7 KiB
JavaScript

'use strict';
const common = require('../common');
const stream = require('stream');
const assert = require('assert');
{
const r = new stream.Readable({
read: common.mustCall(function() {
this.push('content');
this.push(null);
})
});
const t = new stream.Transform({
transform: common.mustCall(function(chunk, encoding, callback) {
this.push(chunk);
return callback();
}),
flush: common.mustCall(function(callback) {
return callback();
})
});
r.pipe(t);
t.on('readable', common.mustCall(function() {
while (true) {
const chunk = t.read();
if (!chunk)
break;
assert.strictEqual(chunk.toString(), 'content');
}
}, 2));
}
{
const t = new stream.Transform({
transform: common.mustCall(function(chunk, encoding, callback) {
this.push(chunk);
return callback();
}),
flush: common.mustCall(function(callback) {
return callback();
})
});
t.end('content');
t.on('readable', common.mustCall(function() {
while (true) {
const chunk = t.read();
if (!chunk)
break;
assert.strictEqual(chunk.toString(), 'content');
}
}));
}
{
const t = new stream.Transform({
transform: common.mustCall(function(chunk, encoding, callback) {
this.push(chunk);
return callback();
}),
flush: common.mustCall(function(callback) {
return callback();
})
});
t.write('content');
t.end();
t.on('readable', common.mustCall(function() {
while (true) {
const chunk = t.read();
if (!chunk)
break;
assert.strictEqual(chunk.toString(), 'content');
}
}));
}
{
const t = new stream.Readable({
read() {
}
});
t.on('readable', common.mustCall(function() {
while (true) {
const chunk = t.read();
if (!chunk)
break;
assert.strictEqual(chunk.toString(), 'content');
}
}));
t.push('content');
t.push(null);
}
{
const t = new stream.Readable({
read() {
}
});
t.on('readable', common.mustCall(function() {
while (true) {
const chunk = t.read();
if (!chunk)
break;
assert.strictEqual(chunk.toString(), 'content');
}
}, 2));
process.nextTick(() => {
t.push('content');
t.push(null);
});
}
{
const t = new stream.Transform({
transform: common.mustCall(function(chunk, encoding, callback) {
this.push(chunk);
return callback();
}),
flush: common.mustCall(function(callback) {
return callback();
})
});
t.on('readable', common.mustCall(function() {
while (true) {
const chunk = t.read();
if (!chunk)
break;
assert.strictEqual(chunk.toString(), 'content');
}
}, 2));
t.write('content');
t.end();
}