async-lazystream
Version:
Open Node Streams on demand with async support (original code from https://github.com/jpommerening/node-lazystream)
72 lines (56 loc) • 2.16 kB
JavaScript
const stream = require('../lib/lazystream');
const helper = require('./helper');
exports.pipe = {
readwrite: function(test) {
const expected = ['line1\n', 'line2\n'];
const actual = [];
let readableInstantiated = false;
let writableInstantiated = false;
test.expect(3);
const readable = new stream.Readable(function() {
readableInstantiated = true;
return new helper.DummyReadable([].concat(expected));
});
const writable = new stream.Writable(function() {
writableInstantiated = true;
return new helper.DummyWritable(actual);
});
test.equal(readableInstantiated, false, 'DummyReadable should only be instantiated when it is needed');
test.equal(writableInstantiated, false, 'DummyWritable should only be instantiated when it is needed');
writable.on('end', function() {
test.equal(actual.join(''), expected.join(''), 'Piping on demand streams should keep data intact');
test.done();
});
readable.pipe(writable);
},
async_readwrite: function(test) {
const expected = ['line1\n', 'line2\n'];
const actual = [];
let readableInstantiated = false;
let writableInstantiated = false;
test.expect(3);
const readable = new stream.Readable(function() {
return new Promise((resolve) => {
setTimeout(() => {
readableInstantiated = true;
resolve(new helper.DummyReadable([].concat(expected)));
}, 10);
});
});
const writable = new stream.Writable(function() {
return new Promise((resolve) => {
setTimeout(() => {
writableInstantiated = true;
resolve(new helper.DummyWritable(actual));
}, 10);
});
});
test.equal(readableInstantiated, false, 'DummyReadable should only be instantiated when it is needed');
test.equal(writableInstantiated, false, 'DummyWritable should only be instantiated when it is needed');
writable.on('end', function() {
test.equal(actual.join(''), expected.join(''), 'Piping on demand streams should keep data intact');
test.done();
});
readable.pipe(writable);
},
};