1 | var pull = require('../')
|
2 | var test = require('tape')
|
3 |
|
4 | test('through - onEnd', function (t) {
|
5 | t.plan(2)
|
6 | var values = [1,2,3,4,5,6,7,8,9,10]
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 | pull(
|
25 | pull.values(values),
|
26 | pull.take(10),
|
27 | pull.through(null, function (err) {
|
28 | console.log('end')
|
29 | t.ok(true)
|
30 | process.nextTick(function () {
|
31 | t.end()
|
32 | })
|
33 | }),
|
34 | pull.collect(function (err, ary) {
|
35 | console.log(ary)
|
36 | t.ok(true)
|
37 | })
|
38 | )
|
39 | })
|
40 |
|
41 |
|
42 | test('take - exclude last (default)', function (t) {
|
43 | pull(
|
44 | pull.values([1,2,3,4,5,6,7,8,9,10]),
|
45 | pull.take(function(n) {return n<5}),
|
46 | pull.collect(function (err, four) {
|
47 | t.deepEqual(four, [1,2,3,4])
|
48 | t.end()
|
49 | })
|
50 | )
|
51 | })
|
52 | test('take - include last', function (t) {
|
53 | pull(
|
54 | pull.values([1,2,3,4,5,6,7,8,9,10]),
|
55 | pull.take(function(n) {return n<5}, {last: true}),
|
56 | pull.collect(function (err, five) {
|
57 | t.deepEqual(five, [1,2,3,4,5])
|
58 | t.end()
|
59 | })
|
60 | )
|
61 | })
|
62 |
|
63 | test('take 5 causes 5 reads upstream', function (t) {
|
64 | var reads = 0
|
65 | pull(
|
66 | pull.values([1,2,3,4,5,6,7,8,9,10]),
|
67 | function (read) {
|
68 | return function (end, cb) {
|
69 | if (end !== true) reads++
|
70 | console.log(reads, end)
|
71 | read(end, cb)
|
72 | }
|
73 | },
|
74 | pull.take(5),
|
75 | pull.collect(function (err, five) {
|
76 | t.deepEqual(five, [1,2,3,4,5])
|
77 | process.nextTick(function() {
|
78 | t.equal(reads, 5)
|
79 | t.end()
|
80 | })
|
81 | })
|
82 | )
|
83 | })
|
84 |
|
85 | test("take doesn't abort until the last read", function (t) {
|
86 |
|
87 | var aborted = false
|
88 |
|
89 | var ary = [1,2,3,4,5], i = 0
|
90 |
|
91 | var read = pull(
|
92 | function (abort, cb) {
|
93 | if(abort) cb(aborted = true)
|
94 | else if(i > ary.length) cb(true)
|
95 | else cb(null, ary[i++])
|
96 | },
|
97 | pull.take(function (d) {
|
98 | return d < 3
|
99 | }, {last: true})
|
100 | )
|
101 |
|
102 | read(null, function (_, d) {
|
103 | t.notOk(aborted, "hasn't aborted yet")
|
104 | read(null, function (_, d) {
|
105 | t.notOk(aborted, "hasn't aborted yet")
|
106 | read(null, function (_, d) {
|
107 | t.notOk(aborted, "hasn't aborted yet")
|
108 | read(null, function (end, d) {
|
109 | t.ok(end, 'stream ended')
|
110 | t.equal(d, undefined, 'data undefined')
|
111 | t.ok(aborted, "has aborted by now")
|
112 | t.end()
|
113 | })
|
114 | })
|
115 | })
|
116 | })
|
117 |
|
118 | })
|
119 |
|
120 | test('take should throw error on last read', function (t) {
|
121 | var i = 0
|
122 | var error = new Error('error on last call')
|
123 |
|
124 | pull(
|
125 | pull.values([1,2,3,4,5,6,7,8,9,10]),
|
126 | pull.take(function(n) {return n<5}, {last: true}),
|
127 |
|
128 | pull.asyncMap(function (data, cb) {
|
129 | setTimeout(function () {
|
130 | if(++i < 5) cb(null, data)
|
131 | else cb(error)
|
132 | }, 100)
|
133 | }),
|
134 | pull.collect(function (err, five) {
|
135 | t.equal(err, error, 'should return err')
|
136 | t.deepEqual(five, [1,2,3,4], 'should skip failed item')
|
137 | t.end()
|
138 | })
|
139 | )
|
140 | })
|