|
|
var test = require('tape') var spec = require('stream-spec') var through = require('../')
/* I'm using these two functions, and not streams and pipe so there is less to break. if this test fails it must be the implementation of _through_ */
function write(array, stream) { array = array.slice() function next() { while(array.length) if(stream.write(array.shift()) === false) return stream.once('drain', next) stream.end() }
next() }
function read(stream, callback) { var actual = [] stream.on('data', function (data) { actual.push(data) }) stream.once('end', function () { callback(null, actual) }) stream.once('error', function (err) { callback(err) }) }
test('simple defaults', function(assert) {
var l = 1000 , expected = []
while(l--) expected.push(l * Math.random())
var t = through() var s = spec(t).through().pausable()
read(t, function (err, actual) { assert.ifError(err) assert.deepEqual(actual, expected) assert.end() })
t.on('close', s.validate)
write(expected, t) });
test('simple functions', function(assert) {
var l = 1000 , expected = []
while(l--) expected.push(l * Math.random())
var t = through(function (data) { this.emit('data', data*2) }) var s = spec(t).through().pausable()
read(t, function (err, actual) { assert.ifError(err) assert.deepEqual(actual, expected.map(function (data) { return data*2 })) assert.end() })
t.on('close', s.validate)
write(expected, t) })
test('pauses', function(assert) {
var l = 1000 , expected = []
while(l--) expected.push(l) //Math.random())
var t = through() var s = spec(t) .through() .pausable()
t.on('data', function () { if(Math.random() > 0.1) return t.pause() process.nextTick(function () { t.resume() }) })
read(t, function (err, actual) { assert.ifError(err) assert.deepEqual(actual, expected) })
t.on('close', function () { s.validate() assert.end() })
write(expected, t) })
test('does not soft-end on `undefined`', function(assert) { var stream = through() , count = 0
stream.on('data', function (data) { count++ })
stream.write(undefined) stream.write(undefined)
assert.equal(count, 2)
assert.end() })
|