154 lines
2.9 KiB
JavaScript
154 lines
2.9 KiB
JavaScript
var concat = require('simple-concat')
|
|
var MultiStream = require('../')
|
|
var str = require('string-to-stream')
|
|
var test = require('tape')
|
|
var through = require('through')
|
|
|
|
test('combine streams', function (t) {
|
|
var streams = [
|
|
str('1'),
|
|
str('2'),
|
|
str('3')
|
|
]
|
|
|
|
var stream = MultiStream(streams)
|
|
.on('error', function (err) {
|
|
t.fail(err)
|
|
})
|
|
|
|
concat(stream, function (err, data) {
|
|
t.error(err)
|
|
t.equal(data.toString(), '123')
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('combine streams (classic)', function (t) {
|
|
var streams = [
|
|
through(),
|
|
through(),
|
|
through()
|
|
]
|
|
|
|
var stream = MultiStream(streams)
|
|
.on('error', function (err) {
|
|
t.fail(err)
|
|
})
|
|
|
|
concat(stream, function (err, data) {
|
|
t.error(err)
|
|
t.equal(data.toString(), '123')
|
|
t.end()
|
|
})
|
|
|
|
streams[0].end('1')
|
|
streams[1].end('2')
|
|
streams[2].end('3')
|
|
})
|
|
|
|
test('lazy stream creation', function (t) {
|
|
var streams = [
|
|
str('1'),
|
|
function () {
|
|
return str('2')
|
|
},
|
|
function () {
|
|
return str('3')
|
|
}
|
|
]
|
|
|
|
var stream = MultiStream(streams)
|
|
.on('error', function (err) {
|
|
t.fail(err)
|
|
})
|
|
|
|
concat(stream, function (err, data) {
|
|
t.error(err)
|
|
t.equal(data.toString(), '123')
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('lazy stream via factory', function (t) {
|
|
var count = 0
|
|
function factory (cb) {
|
|
if (count > 2) return cb(null, null)
|
|
count++
|
|
setTimeout(function () {
|
|
cb(null, str(count.toString()))
|
|
}, 0)
|
|
}
|
|
|
|
var stream = MultiStream(factory)
|
|
.on('error', function (err) {
|
|
t.fail(err)
|
|
})
|
|
|
|
concat(stream, function (err, data) {
|
|
t.error(err)
|
|
t.equal(data.toString(), '123')
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('lazy stream via factory (factory returns error)', function (t) {
|
|
t.plan(2)
|
|
var count = 0
|
|
function factory (cb) {
|
|
if (count > 2) return cb(new Error('factory error'))
|
|
count++
|
|
setTimeout(function () {
|
|
cb(null, str(count.toString()))
|
|
}, 0)
|
|
}
|
|
|
|
MultiStream(factory)
|
|
.on('error', function (err) {
|
|
t.pass('got error', err)
|
|
})
|
|
.on('close', function () {
|
|
t.pass('got close')
|
|
})
|
|
.resume()
|
|
})
|
|
|
|
test('lazy stream via factory (classic)', function (t) {
|
|
var count = 0
|
|
function factory (cb) {
|
|
if (count > 2) return cb(null, null)
|
|
count++
|
|
var s = through()
|
|
process.nextTick(function () {
|
|
s.write(count.toString())
|
|
s.end()
|
|
})
|
|
cb(null, s)
|
|
}
|
|
|
|
var stream = MultiStream(factory)
|
|
.on('error', function (err) {
|
|
t.fail(err)
|
|
})
|
|
|
|
concat(stream, function (err, data) {
|
|
t.error(err)
|
|
t.equal(data.toString(), '123')
|
|
t.end()
|
|
})
|
|
})
|
|
|
|
test('throw immediate error', function (t) {
|
|
t.plan(1)
|
|
|
|
var streams = [
|
|
str('1'),
|
|
through() // will emit 'error'
|
|
]
|
|
|
|
MultiStream(streams).on('error', function (err) {
|
|
t.ok(err instanceof Error, 'got expected error')
|
|
})
|
|
|
|
streams[1].emit('error', new Error('immediate error!'))
|
|
})
|