Skip to content

Commit 271f578

Browse files
joyeecheungMylesBorins
authored andcommitted
stream, test: test _readableState.emittedReadable
Part of #8683, increase coverage of the internal state machine of streams. PR-URL: #10249 See: #8683 See: #10230 Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
1 parent 3f29cbb commit 271f578

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
'use strict';
2+
constcommon=require('../common');
3+
constassert=require('assert');
4+
constReadable=require('stream').Readable;
5+
6+
constreadable=newReadable({
7+
read: ()=>{}
8+
});
9+
10+
// Initialized to false.
11+
assert.strictEqual(readable._readableState.emittedReadable,false);
12+
13+
readable.on('readable',common.mustCall(()=>{
14+
// emittedReadable should be true when the readable event is emitted
15+
assert.strictEqual(readable._readableState.emittedReadable,true);
16+
readable.read();
17+
// emittedReadable is reset to false during read()
18+
assert.strictEqual(readable._readableState.emittedReadable,false);
19+
},4));
20+
21+
// When the first readable listener is just attached,
22+
// emittedReadable should be false
23+
assert.strictEqual(readable._readableState.emittedReadable,false);
24+
25+
// Each one of these should trigger a readable event.
26+
process.nextTick(common.mustCall(()=>{
27+
readable.push('foo');
28+
}));
29+
process.nextTick(common.mustCall(()=>{
30+
readable.push('bar');
31+
}));
32+
process.nextTick(common.mustCall(()=>{
33+
readable.push('quo');
34+
}));
35+
process.nextTick(common.mustCall(()=>{
36+
readable.push(null);
37+
}));
38+
39+
constnoRead=newReadable({
40+
read: ()=>{}
41+
});
42+
43+
noRead.on('readable',common.mustCall(()=>{
44+
// emittedReadable should be true when the readable event is emitted
45+
assert.strictEqual(noRead._readableState.emittedReadable,true);
46+
noRead.read(0);
47+
// emittedReadable is not reset during read(0)
48+
assert.strictEqual(noRead._readableState.emittedReadable,true);
49+
}));
50+
51+
noRead.push('foo');
52+
noRead.push(null);
53+
54+
constflowing=newReadable({
55+
read: ()=>{}
56+
});
57+
58+
flowing.on('data',common.mustCall(()=>{
59+
// When in flowing mode, emittedReadable is always false.
60+
assert.strictEqual(flowing._readableState.emittedReadable,false);
61+
flowing.read();
62+
assert.strictEqual(flowing._readableState.emittedReadable,false);
63+
},3));
64+
65+
flowing.push('foooo');
66+
flowing.push('bar');
67+
flowing.push('quo');
68+
process.nextTick(common.mustCall(()=>{
69+
flowing.push(null);
70+
}));

0 commit comments

Comments
 (0)