mirror of https://github.com/lukechilds/node.git
Browse Source
Part of #8683, increase coverage of the internal state machine of streams. PR-URL: https://github.com/nodejs/node/pull/10249 See: https://github.com/nodejs/node/issues/8683 See: https://github.com/nodejs/node/issues/10230 Reviewed-By: Matteo Collina <matteo.collina@gmail.com>v6.x
Joyee Cheung
8 years ago
committed by
Myles Borins
1 changed files with 70 additions and 0 deletions
@ -0,0 +1,70 @@ |
|||
'use strict'; |
|||
const common = require('../common'); |
|||
const assert = require('assert'); |
|||
const Readable = require('stream').Readable; |
|||
|
|||
const readable = new Readable({ |
|||
read: () => {} |
|||
}); |
|||
|
|||
// Initialized to false.
|
|||
assert.strictEqual(readable._readableState.emittedReadable, false); |
|||
|
|||
readable.on('readable', common.mustCall(() => { |
|||
// emittedReadable should be true when the readable event is emitted
|
|||
assert.strictEqual(readable._readableState.emittedReadable, true); |
|||
readable.read(); |
|||
// emittedReadable is reset to false during read()
|
|||
assert.strictEqual(readable._readableState.emittedReadable, false); |
|||
}, 4)); |
|||
|
|||
// When the first readable listener is just attached,
|
|||
// emittedReadable should be false
|
|||
assert.strictEqual(readable._readableState.emittedReadable, false); |
|||
|
|||
// Each one of these should trigger a readable event.
|
|||
process.nextTick(common.mustCall(() => { |
|||
readable.push('foo'); |
|||
})); |
|||
process.nextTick(common.mustCall(() => { |
|||
readable.push('bar'); |
|||
})); |
|||
process.nextTick(common.mustCall(() => { |
|||
readable.push('quo'); |
|||
})); |
|||
process.nextTick(common.mustCall(() => { |
|||
readable.push(null); |
|||
})); |
|||
|
|||
const noRead = new Readable({ |
|||
read: () => {} |
|||
}); |
|||
|
|||
noRead.on('readable', common.mustCall(() => { |
|||
// emittedReadable should be true when the readable event is emitted
|
|||
assert.strictEqual(noRead._readableState.emittedReadable, true); |
|||
noRead.read(0); |
|||
// emittedReadable is not reset during read(0)
|
|||
assert.strictEqual(noRead._readableState.emittedReadable, true); |
|||
})); |
|||
|
|||
noRead.push('foo'); |
|||
noRead.push(null); |
|||
|
|||
const flowing = new Readable({ |
|||
read: () => {} |
|||
}); |
|||
|
|||
flowing.on('data', common.mustCall(() => { |
|||
// When in flowing mode, emittedReadable is always false.
|
|||
assert.strictEqual(flowing._readableState.emittedReadable, false); |
|||
flowing.read(); |
|||
assert.strictEqual(flowing._readableState.emittedReadable, false); |
|||
}, 3)); |
|||
|
|||
flowing.push('foooo'); |
|||
flowing.push('bar'); |
|||
flowing.push('quo'); |
|||
process.nextTick(common.mustCall(() => { |
|||
flowing.push(null); |
|||
})); |
Loading…
Reference in new issue