0
0
mirror of https://github.com/nodejs/node.git synced 2024-11-25 08:19:38 +01:00
nodejs/test/parallel/test-stream-readable-flow-recursion.js
isaacs 3e1b1dd4a9 Remove excessive copyright/license boilerplate
The copyright and license notice is already in the LICENSE file.  There
is no justifiable reason to also require that it be included in every
file, since the individual files are not individually distributed except
as part of the entire package.
2015-01-12 15:30:28 -08:00

56 lines
1.3 KiB
JavaScript

var common = require('../common');
var assert = require('assert');
// this test verifies that passing a huge number to read(size)
// will push up the highWaterMark, and cause the stream to read
// more data continuously, but without triggering a nextTick
// warning or RangeError.
var Readable = require('stream').Readable;
// throw an error if we trigger a nextTick warning.
process.throwDeprecation = true;
var stream = new Readable({ highWaterMark: 2 });
var reads = 0;
var total = 5000;
stream._read = function(size) {
reads++;
size = Math.min(size, total);
total -= size;
if (size === 0)
stream.push(null);
else
stream.push(new Buffer(size));
};
var depth = 0;
function flow(stream, size, callback) {
depth += 1;
var chunk = stream.read(size);
if (!chunk)
stream.once('readable', flow.bind(null, stream, size, callback));
else
callback(chunk);
depth -= 1;
console.log('flow(' + depth + '): exit');
}
flow(stream, 5000, function() {
console.log('complete (' + depth + ')');
});
process.on('exit', function(code) {
assert.equal(reads, 2);
// we pushed up the high water mark
assert.equal(stream._readableState.highWaterMark, 8192);
// length is 0 right now, because we pulled it all out.
assert.equal(stream._readableState.length, 0);
assert(!code);
assert.equal(depth, 0);
console.log('ok');
});