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