From f4227042a7249967b11ac2a4e1a5c2bb074297e1 Mon Sep 17 00:00:00 2001 From: "Italo A. Casas" Date: Wed, 21 Sep 2016 21:43:16 -0400 Subject: [PATCH 1/2] stream: adding description about needDrain state for Writable Stream --- lib/_stream_writable.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js index 88c19cddbfa490..01ae33aa4c4dc4 100644 --- a/lib/_stream_writable.js +++ b/lib/_stream_writable.js @@ -43,6 +43,7 @@ function WritableState(options, stream) { // cast to ints. this.highWaterMark = ~~this.highWaterMark; + // drain event flag this.needDrain = false; // at the start of calling end() this.ending = false; From 06191da949db1dc910a3ea0d5cfe012ad8e4e322 Mon Sep 17 00:00:00 2001 From: "Italo A. Casas" Date: Mon, 26 Sep 2016 22:53:13 -0400 Subject: [PATCH 2/2] test: writable stream ending state --- lib/_stream_writable.js | 2 +- .../test-stream-writableState-ending.js | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 test/parallel/test-stream-writableState-ending.js diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js index 01ae33aa4c4dc4..dd49dfbf1d1883 100644 --- a/lib/_stream_writable.js +++ b/lib/_stream_writable.js @@ -43,7 +43,7 @@ function WritableState(options, stream) { // cast to ints. this.highWaterMark = ~~this.highWaterMark; - // drain event flag + // drain event flag. this.needDrain = false; // at the start of calling end() this.ending = false; diff --git a/test/parallel/test-stream-writableState-ending.js b/test/parallel/test-stream-writableState-ending.js new file mode 100644 index 00000000000000..06d62a9ae2ed2b --- /dev/null +++ b/test/parallel/test-stream-writableState-ending.js @@ -0,0 +1,34 @@ +'use strict'; + +const common = require('../common'); + +const assert = require('assert'); +const stream = require('stream'); + +const writable = new stream.Writable(); + +function testStates(ending, finished, ended) { + assert.strictEqual(writable._writableState.ending, ending); + assert.strictEqual(writable._writableState.finished, finished); + assert.strictEqual(writable._writableState.ended, ended); +} + +writable._write = (chunk, encoding, cb) => { + // ending, finished, ended start in false. + testStates(false, false, false); + cb(); +}; + +writable.on('finish', () => { + // ending, finished, ended = true. + testStates(true, true, true); +}); + +writable.end('testing function end()', () => { + // ending, finished, ended = true. + testStates(true, true, true); +}); + +// ending, ended = true. +// finished = false. +testStates(true, false, true);