aboutsummaryrefslogtreecommitdiff
path: root/test/parallel/test-stream-readable-emit-readable-short-stream.js
diff options
context:
space:
mode:
authorMatteo Collina <hello@matteocollina.com>2019-02-11 13:20:26 +0100
committerMatteo Collina <hello@matteocollina.com>2019-03-06 08:38:29 +0000
commite95e7f9af540c88e93701ff6ca2f38986deb8e99 (patch)
tree26ae5c394ee060abd4437b54ca160a11a5a9f1e2 /test/parallel/test-stream-readable-emit-readable-short-stream.js
parentd38cd82513584c9d7c463aa809e5ee483a66eae3 (diff)
downloadandroid-node-v8-e95e7f9af540c88e93701ff6ca2f38986deb8e99.tar.gz
android-node-v8-e95e7f9af540c88e93701ff6ca2f38986deb8e99.tar.bz2
android-node-v8-e95e7f9af540c88e93701ff6ca2f38986deb8e99.zip
stream: make sure 'readable' is emitted before ending the stream
Fixes: https://github.com/nodejs/node/issues/25810 PR-URL: https://github.com/nodejs/node/pull/26059 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Diffstat (limited to 'test/parallel/test-stream-readable-emit-readable-short-stream.js')
-rw-r--r--test/parallel/test-stream-readable-emit-readable-short-stream.js146
1 files changed, 146 insertions, 0 deletions
diff --git a/test/parallel/test-stream-readable-emit-readable-short-stream.js b/test/parallel/test-stream-readable-emit-readable-short-stream.js
new file mode 100644
index 0000000000..2f4f43baf5
--- /dev/null
+++ b/test/parallel/test-stream-readable-emit-readable-short-stream.js
@@ -0,0 +1,146 @@
+'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');
+ }
+ }, 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.write('content');
+ t.end();
+
+ 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.Readable({
+ read() {
+ }
+ });
+
+ t.on('readable', common.mustCall(function() {
+ while (true) {
+ const chunk = t.read();
+ if (!chunk)
+ break;
+ assert.strictEqual(chunk.toString(), 'content');
+ }
+ }, 2));
+
+ 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();
+}