git ssb

2+

Dominic / pull-stream



Tree: d99d85a16533a82af15af59ea09e68058f746596

Files: d99d85a16533a82af15af59ea09e68058f746596 / test / flatten.js

2973 bytesRaw
1var pull = require('../')
2var test = require('tape')
3
4test('flatten arrays', function (t) {
5 pull(
6 pull.values([
7 [1, 2, 3],
8 [4, 5, 6],
9 [7, 8, 9]
10 ]),
11 pull.flatten(),
12 pull.collect(function (err, numbers) {
13 t.deepEqual([1, 2, 3, 4, 5, 6, 7, 8, 9], numbers)
14 t.end()
15 })
16 )
17})
18
19test('flatten - number of reads', function (t) {
20 var reads = 0
21 pull(
22 pull.values([
23 pull.values([1, 2, 3]),
24 ]),
25 pull.flatten(),
26 pull.through(function() {
27 reads++
28 console.log('READ', reads)
29 }),
30 pull.take(2),
31 pull.collect(function (err, numbers) {
32 t.deepEqual([1, 2], numbers)
33 t.equal(reads, 2)
34 t.end()
35 })
36 )
37
38})
39test('flatten stream of streams', function (t) {
40
41 pull(
42 pull.values([
43 pull.values([1, 2, 3]),
44 pull.values([4, 5, 6]),
45 pull.values([7, 8, 9])
46 ]),
47 pull.flatten(),
48 pull.collect(function (err, numbers) {
49 t.deepEqual([1, 2, 3, 4, 5, 6, 7, 8, 9], numbers)
50 t.end()
51 })
52 )
53
54})
55
56test('flatten stream of broken streams', function (t) {
57 var _err = new Error('I am broken'), sosEnded
58 pull(
59 pull.values([
60 pull.error(_err)
61 ], function(err) {
62 sosEnded = err;
63 }),
64 pull.flatten(),
65 pull.onEnd(function (err) {
66 t.equal(err, _err)
67 process.nextTick(function() {
68 t.equal(sosEnded, null, 'should abort stream of streams')
69 t.end()
70 })
71 })
72 )
73})
74
75test('abort flatten', function (t) {
76 var sosEnded, s1Ended, s2Ended
77 var read = pull(
78 pull.values([
79 pull.values([1,2], function(err) {s1Ended = err}),
80 pull.values([3,4], function(err) {s2Ended = err}),
81 ], function(err) {
82 sosEnded = err;
83 }),
84 pull.flatten()
85 )
86
87 read(null, function(err, data) {
88 t.notOk(err)
89 t.equal(data,1)
90 read(true, function(err, data) {
91 t.equal(err, true)
92 process.nextTick(function() {
93 t.equal(sosEnded, null, 'should abort stream of streams')
94 t.equal(s1Ended, null, 'should abort current nested stream')
95 t.equal(s2Ended, undefined, 'should not abort queued nested stream')
96 t.end()
97 })
98 })
99 })
100})
101
102test('abort flatten before 1st read', function (t) {
103 var sosEnded, s1Ended
104 var read = pull(
105 pull.values([
106 pull.values([1,2], function(err) {s1Ended = err})
107 ], function(err) {
108 sosEnded = err;
109 }),
110 pull.flatten()
111 )
112
113 read(true, function(err, data) {
114 t.equal(err, true)
115 t.notOk(data)
116 process.nextTick(function() {
117 t.equal(sosEnded, null, 'should abort stream of streams')
118 t.equal(s1Ended, undefined, 'should abort current nested stream')
119 t.end()
120 })
121 })
122})
123
124test('flattern handles stream with normal objects', function (t) {
125 pull(
126 pull.values([
127 [1,2,3], 4, [5,6,7], 8, 9 ,10
128 ]),
129 pull.flatten(),
130 pull.collect(function (err, ary) {
131 t.deepEqual(ary, [1,2,3,4,5,6,7,8,9,10])
132 t.end()
133 })
134 )
135})
136

Built with git-ssb-web