-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.js
130 lines (108 loc) · 2.83 KB
/
test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
'use strict'
const test = require('tape')
const {pull, values, error} = require('pull-stream')
const reduce = require('./')
test(t => {
t.plan(3)
const log = []
const stream = pull(values([1, 2, 4]), reduce(sumlog(log)))
t.ok(stream instanceof Promise, '`stream` is a promise')
stream.then(r => {
t.equal(r, 7, 'reduced value')
t.deepEqual(log, [[1, 2], [3, 4]], 'reducing calls')
})
})
test('with an initial value', t => {
t.plan(3)
const log = []
const stream = pull(values([2, 4]), reduce(sumlog(log), 1))
t.ok(stream instanceof Promise, '`stream` is a promise')
stream.then(r => {
t.equal(r, 7, 'reduced value')
t.deepEqual(log, [[1, 2], [3, 4]], 'reducing calls')
})
})
test('reduce a stream which is aborted', t => {
t.plan(2)
const log = []
let count = 0
const sink = reduce(sumlog(log))
const stream = pull((end, cb) => {
if (end) return cb(end)
count++
if (count >= 3) sink.abort()
cb(null, count)
}, sink)
stream.then(r => {
t.equal(r, 3, 'resolved value')
t.deepEqual(log, [[1, 2]], 'reducing calls')
})
})
test('reduce a stream which is aborted with an error', t => {
t.plan(2)
const testError = new Error('test')
const log = []
let count = 0
const sink = reduce(sumlog(log))
const stream = pull((end, cb) => {
if (end) return cb(end)
count++
if (count >= 3) sink.abort(testError)
cb(null, count)
}, sink)
stream.catch(err => {
t.deepEqual(err, testError, 'rejection value')
t.deepEqual(log, [[1, 2]], 'reducing calls')
})
})
test('reducing an empty stream', t => {
t.plan(3)
const log = []
const stream = pull(values([]), reduce(sumlog(log)))
t.ok(stream instanceof Promise, '`stream` is a promise')
stream.then(r => {
t.equal(r, undefined, 'reduced value')
t.deepEqual(log, [], 'reducing calls')
})
})
test('reducing an empty stream with an initial value', t => {
t.plan(3)
const log = []
const stream = pull(values([]), reduce(sumlog(log), 1))
t.ok(stream instanceof Promise, '`stream` is a promise')
stream.then(r => {
t.equal(r, 1, 'reduced value')
t.deepEqual(log, [], 'reducing calls')
})
})
test('reduce a stream with an error in the beginning', t => {
t.plan(2)
const testError = new Error('test')
const log = []
const stream = pull(error(testError), reduce(sumlog(log)))
stream.catch(e => {
t.equal(e, testError, 'Rejects with the error')
t.deepEqual(log, [], 'reducing calls')
})
})
test('reduce a stream which errors', t => {
t.plan(2)
const testError = new Error('test')
const log = []
let count = 0
const stream = pull((end, cb) => {
if (end) return cb(end)
if (count++ < 2) return cb(null, count)
cb(testError)
}, reduce(sumlog(log)))
stream.catch(e => {
t.equal(e, testError, 'Rejects with the error')
t.deepEqual(log, [[1, 2]], 'reducing calls')
})
})
function sumlog(log) {
return (a, b) => {
log.push([a, b])
return a + b
}
}