mirror of https://github.com/lukechilds/node.git
Browse Source
This checks to see that clearBuffer appropriately decrements the correct values in _writableState when clearBuffer is invoked in end. Fixes: https://github.com/nodejs/node/issues/8687 PR-URL: https://github.com/nodejs/node/pull/9922 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Italo A. Casas <me@italoacasas.com>v6.x
Safia Abdalla
8 years ago
committed by
Myles Borins
1 changed files with 57 additions and 0 deletions
@ -0,0 +1,57 @@ |
|||
'use strict'; |
|||
|
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
const stream = require('stream'); |
|||
|
|||
const writable = new stream.Writable(); |
|||
|
|||
writable._writev = common.mustCall((chunks, cb) => { |
|||
assert.equal(chunks.length, 2, 'two chunks to write'); |
|||
cb(); |
|||
}, 1); |
|||
|
|||
writable._write = common.mustCall((chunk, encoding, cb) => { |
|||
cb(); |
|||
}, 1); |
|||
|
|||
// first cork
|
|||
writable.cork(); |
|||
assert.strictEqual(writable._writableState.corked, 1); |
|||
assert.strictEqual(writable._writableState.bufferedRequestCount, 0); |
|||
|
|||
// cork again
|
|||
writable.cork(); |
|||
assert.strictEqual(writable._writableState.corked, 2); |
|||
|
|||
// the first chunk is buffered
|
|||
writable.write('first chunk'); |
|||
assert.strictEqual(writable._writableState.bufferedRequestCount, 1); |
|||
|
|||
// first uncork does nothing
|
|||
writable.uncork(); |
|||
assert.strictEqual(writable._writableState.corked, 1); |
|||
assert.strictEqual(writable._writableState.bufferedRequestCount, 1); |
|||
|
|||
process.nextTick(uncork); |
|||
|
|||
// the second chunk is buffered, because we uncork at the end of tick
|
|||
writable.write('second chunk'); |
|||
assert.strictEqual(writable._writableState.corked, 1); |
|||
assert.strictEqual(writable._writableState.bufferedRequestCount, 2); |
|||
|
|||
function uncork() { |
|||
// second uncork flushes the buffer
|
|||
writable.uncork(); |
|||
assert.strictEqual(writable._writableState.corked, 0); |
|||
assert.strictEqual(writable._writableState.bufferedRequestCount, 0); |
|||
|
|||
// verify that end() uncorks correctly
|
|||
writable.cork(); |
|||
writable.write('third chunk'); |
|||
writable.end(); |
|||
|
|||
// end causes an uncork() as well
|
|||
assert.strictEqual(writable._writableState.corked, 0); |
|||
assert.strictEqual(writable._writableState.bufferedRequestCount, 0); |
|||
} |
Loading…
Reference in new issue