|
|
|
'use strict';
|
|
|
|
require('../common');
|
|
|
|
var assert = require('assert');
|
|
|
|
|
|
|
|
var Readable = require('_stream_readable');
|
|
|
|
var Writable = require('_stream_writable');
|
|
|
|
var EE = require('events').EventEmitter;
|
|
|
|
|
|
|
|
var testRuns = 0, completedRuns = 0;
|
|
|
|
function runTest(highWaterMark, objectMode, produce) {
|
|
|
|
testRuns++;
|
|
|
|
|
|
|
|
var old = new EE();
|
|
|
|
var r = new Readable({ highWaterMark: highWaterMark,
|
|
|
|
objectMode: objectMode });
|
|
|
|
assert.equal(r, r.wrap(old));
|
|
|
|
|
|
|
|
var ended = false;
|
|
|
|
r.on('end', function() {
|
|
|
|
ended = true;
|
|
|
|
});
|
|
|
|
|
|
|
|
old.pause = function() {
|
stream: Simplify flowing, passive data listening
Closes #5860
In streams2, there is an "old mode" for compatibility. Once switched
into this mode, there is no going back.
With this change, there is a "flowing mode" and a "paused mode". If you
add a data listener, then this will start the flow of data. However,
hitting the `pause()` method will switch *back* into a non-flowing mode,
where the `read()` method will pull data out.
Every time `read()` returns a data chunk, it also emits a `data` event.
In this way, a passive data listener can be added, and the stream passed
off to some other reader, for use with progress bars and the like.
There is no API change beyond this added flexibility.
12 years ago
|
|
|
console.error('old.pause()');
|
|
|
|
old.emit('pause');
|
|
|
|
flowing = false;
|
|
|
|
};
|
|
|
|
|
|
|
|
old.resume = function() {
|
stream: Simplify flowing, passive data listening
Closes #5860
In streams2, there is an "old mode" for compatibility. Once switched
into this mode, there is no going back.
With this change, there is a "flowing mode" and a "paused mode". If you
add a data listener, then this will start the flow of data. However,
hitting the `pause()` method will switch *back* into a non-flowing mode,
where the `read()` method will pull data out.
Every time `read()` returns a data chunk, it also emits a `data` event.
In this way, a passive data listener can be added, and the stream passed
off to some other reader, for use with progress bars and the like.
There is no API change beyond this added flexibility.
12 years ago
|
|
|
console.error('old.resume()');
|
|
|
|
old.emit('resume');
|
|
|
|
flow();
|
|
|
|
};
|
|
|
|
|
|
|
|
var flowing;
|
|
|
|
var chunks = 10;
|
|
|
|
var oldEnded = false;
|
|
|
|
var expected = [];
|
|
|
|
function flow() {
|
|
|
|
flowing = true;
|
|
|
|
while (flowing && chunks-- > 0) {
|
|
|
|
var item = produce();
|
|
|
|
expected.push(item);
|
stream: Simplify flowing, passive data listening
Closes #5860
In streams2, there is an "old mode" for compatibility. Once switched
into this mode, there is no going back.
With this change, there is a "flowing mode" and a "paused mode". If you
add a data listener, then this will start the flow of data. However,
hitting the `pause()` method will switch *back* into a non-flowing mode,
where the `read()` method will pull data out.
Every time `read()` returns a data chunk, it also emits a `data` event.
In this way, a passive data listener can be added, and the stream passed
off to some other reader, for use with progress bars and the like.
There is no API change beyond this added flexibility.
12 years ago
|
|
|
console.log('old.emit', chunks, flowing);
|
|
|
|
old.emit('data', item);
|
stream: Simplify flowing, passive data listening
Closes #5860
In streams2, there is an "old mode" for compatibility. Once switched
into this mode, there is no going back.
With this change, there is a "flowing mode" and a "paused mode". If you
add a data listener, then this will start the flow of data. However,
hitting the `pause()` method will switch *back* into a non-flowing mode,
where the `read()` method will pull data out.
Every time `read()` returns a data chunk, it also emits a `data` event.
In this way, a passive data listener can be added, and the stream passed
off to some other reader, for use with progress bars and the like.
There is no API change beyond this added flexibility.
12 years ago
|
|
|
console.log('after emit', chunks, flowing);
|
|
|
|
}
|
|
|
|
if (chunks <= 0) {
|
|
|
|
oldEnded = true;
|
|
|
|
console.log('old end', chunks, flowing);
|
|
|
|
old.emit('end');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
var w = new Writable({ highWaterMark: highWaterMark * 2,
|
|
|
|
objectMode: objectMode });
|
|
|
|
var written = [];
|
|
|
|
w._write = function(chunk, encoding, cb) {
|
stream: Simplify flowing, passive data listening
Closes #5860
In streams2, there is an "old mode" for compatibility. Once switched
into this mode, there is no going back.
With this change, there is a "flowing mode" and a "paused mode". If you
add a data listener, then this will start the flow of data. However,
hitting the `pause()` method will switch *back* into a non-flowing mode,
where the `read()` method will pull data out.
Every time `read()` returns a data chunk, it also emits a `data` event.
In this way, a passive data listener can be added, and the stream passed
off to some other reader, for use with progress bars and the like.
There is no API change beyond this added flexibility.
12 years ago
|
|
|
console.log('_write', chunk);
|
|
|
|
written.push(chunk);
|
|
|
|
setTimeout(cb);
|
|
|
|
};
|
|
|
|
|
|
|
|
w.on('finish', function() {
|
|
|
|
completedRuns++;
|
|
|
|
performAsserts();
|
|
|
|
});
|
|
|
|
|
|
|
|
r.pipe(w);
|
|
|
|
|
|
|
|
flow();
|
|
|
|
|
|
|
|
function performAsserts() {
|
|
|
|
assert(ended);
|
|
|
|
assert(oldEnded);
|
|
|
|
assert.deepEqual(written, expected);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
runTest(100, false, function() { return new Buffer(100); });
|
|
|
|
runTest(10, false, function() { return new Buffer('xxxxxxxxxx'); });
|
|
|
|
runTest(1, true, function() { return { foo: 'bar' }; });
|
|
|
|
|
|
|
|
var objectChunks = [ 5, 'a', false, 0, '', 'xyz', { x: 4 }, 7, [], 555 ];
|
|
|
|
runTest(1, true, function() { return objectChunks.shift(); });
|
|
|
|
|
|
|
|
process.on('exit', function() {
|
|
|
|
assert.equal(testRuns, completedRuns);
|
|
|
|
console.log('ok');
|
|
|
|
});
|