mirror of
https://github.com/nodejs/node.git
synced 2024-11-25 08:19:38 +01:00
3e1b1dd4a9
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.
56 lines
1.3 KiB
JavaScript
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');
|
|
});
|