You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
2.9 KiB
135 lines
2.9 KiB
var pull = require('../') |
|
var test = require('tape') |
|
|
|
test('flatten arrays', function (t) { |
|
pull( |
|
pull.values([ |
|
[1, 2, 3], |
|
[4, 5, 6], |
|
[7, 8, 9] |
|
]), |
|
pull.flatten(), |
|
pull.collect(function (err, numbers) { |
|
t.deepEqual([1, 2, 3, 4, 5, 6, 7, 8, 9], numbers) |
|
t.end() |
|
}) |
|
) |
|
}) |
|
|
|
test('flatten - number of reads', function (t) { |
|
var reads = 0 |
|
pull( |
|
pull.values([ |
|
pull.values([1, 2, 3]), |
|
]), |
|
pull.flatten(), |
|
pull.through(function() { |
|
reads++ |
|
console.log('READ', reads) |
|
}), |
|
pull.take(2), |
|
pull.collect(function (err, numbers) { |
|
t.deepEqual([1, 2], numbers) |
|
t.equal(reads, 2) |
|
t.end() |
|
}) |
|
) |
|
|
|
}) |
|
test('flatten stream of streams', function (t) { |
|
|
|
pull( |
|
pull.values([ |
|
pull.values([1, 2, 3]), |
|
pull.values([4, 5, 6]), |
|
pull.values([7, 8, 9]) |
|
]), |
|
pull.flatten(), |
|
pull.collect(function (err, numbers) { |
|
t.deepEqual([1, 2, 3, 4, 5, 6, 7, 8, 9], numbers) |
|
t.end() |
|
}) |
|
) |
|
|
|
}) |
|
|
|
test('flatten stream of broken streams', function (t) { |
|
var _err = new Error('I am broken'), sosEnded |
|
pull( |
|
pull.values([ |
|
pull.error(_err) |
|
], function(err) { |
|
sosEnded = err; |
|
}), |
|
pull.flatten(), |
|
pull.onEnd(function (err) { |
|
t.equal(err, _err) |
|
process.nextTick(function() { |
|
t.equal(sosEnded, null, 'should abort stream of streams') |
|
t.end() |
|
}) |
|
}) |
|
) |
|
}) |
|
|
|
test('abort flatten', function (t) { |
|
var sosEnded, s1Ended, s2Ended |
|
var read = pull( |
|
pull.values([ |
|
pull.values([1,2], function(err) {s1Ended = err}), |
|
pull.values([3,4], function(err) {s2Ended = err}), |
|
], function(err) { |
|
sosEnded = err; |
|
}), |
|
pull.flatten() |
|
) |
|
|
|
read(null, function(err, data) { |
|
t.notOk(err) |
|
t.equal(data,1) |
|
read(true, function(err, data) { |
|
t.equal(err, true) |
|
process.nextTick(function() { |
|
t.equal(sosEnded, null, 'should abort stream of streams') |
|
t.equal(s1Ended, null, 'should abort current nested stream') |
|
t.equal(s2Ended, undefined, 'should not abort queued nested stream') |
|
t.end() |
|
}) |
|
}) |
|
}) |
|
}) |
|
|
|
test('abort flatten before 1st read', function (t) { |
|
var sosEnded, s1Ended |
|
var read = pull( |
|
pull.values([ |
|
pull.values([1,2], function(err) {s1Ended = err}) |
|
], function(err) { |
|
sosEnded = err; |
|
}), |
|
pull.flatten() |
|
) |
|
|
|
read(true, function(err, data) { |
|
t.equal(err, true) |
|
t.notOk(data) |
|
process.nextTick(function() { |
|
t.equal(sosEnded, null, 'should abort stream of streams') |
|
t.equal(s1Ended, undefined, 'should abort current nested stream') |
|
t.end() |
|
}) |
|
}) |
|
}) |
|
|
|
test('flattern handles stream with normal objects', function (t) { |
|
pull( |
|
pull.values([ |
|
[1,2,3], 4, [5,6,7], 8, 9 ,10 |
|
]), |
|
pull.flatten(), |
|
pull.collect(function (err, ary) { |
|
t.deepEqual(ary, [1,2,3,4,5,6,7,8,9,10]) |
|
t.end() |
|
}) |
|
) |
|
})
|
|
|