Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 1fac431

Browse filesBrowse files
captainsafiaMylesBorins
authored andcommitted
test: add tests for clearBuffer state machine
This checks to see that clearBuffer appropriately decrements the correct values in _writableState when clearBuffer is invoked in end. Fixes: #8687 PR-URL: #9922 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Italo A. Casas <me@italoacasas.com>
1 parent 37a3622 commit 1fac431
Copy full SHA for 1fac431

File tree

Expand file treeCollapse file tree

1 file changed

+57
-0
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

1 file changed

+57
-0
lines changed
Open diff view settings
Collapse file
+57Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
'use strict';
2+
3+
const common = require('../common');
4+
const assert = require('assert');
5+
const stream = require('stream');
6+
7+
const writable = new stream.Writable();
8+
9+
writable._writev = common.mustCall((chunks, cb) => {
10+
assert.equal(chunks.length, 2, 'two chunks to write');
11+
cb();
12+
}, 1);
13+
14+
writable._write = common.mustCall((chunk, encoding, cb) => {
15+
cb();
16+
}, 1);
17+
18+
// first cork
19+
writable.cork();
20+
assert.strictEqual(writable._writableState.corked, 1);
21+
assert.strictEqual(writable._writableState.bufferedRequestCount, 0);
22+
23+
// cork again
24+
writable.cork();
25+
assert.strictEqual(writable._writableState.corked, 2);
26+
27+
// the first chunk is buffered
28+
writable.write('first chunk');
29+
assert.strictEqual(writable._writableState.bufferedRequestCount, 1);
30+
31+
// first uncork does nothing
32+
writable.uncork();
33+
assert.strictEqual(writable._writableState.corked, 1);
34+
assert.strictEqual(writable._writableState.bufferedRequestCount, 1);
35+
36+
process.nextTick(uncork);
37+
38+
// the second chunk is buffered, because we uncork at the end of tick
39+
writable.write('second chunk');
40+
assert.strictEqual(writable._writableState.corked, 1);
41+
assert.strictEqual(writable._writableState.bufferedRequestCount, 2);
42+
43+
function uncork() {
44+
// second uncork flushes the buffer
45+
writable.uncork();
46+
assert.strictEqual(writable._writableState.corked, 0);
47+
assert.strictEqual(writable._writableState.bufferedRequestCount, 0);
48+
49+
// verify that end() uncorks correctly
50+
writable.cork();
51+
writable.write('third chunk');
52+
writable.end();
53+
54+
// end causes an uncork() as well
55+
assert.strictEqual(writable._writableState.corked, 0);
56+
assert.strictEqual(writable._writableState.bufferedRequestCount, 0);
57+
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.