UNPKG

3.94 kBJavaScriptView Raw
1var tape = require('tape')
2var split = require('pull-randomly-split')
3var pull = require('pull-stream')
4var crypto = require('crypto')
5var Reader = require('../')
6var Hang = require('pull-hang')
7
8var bytes = crypto.randomBytes(64)
9
10
11tape('read once a stream', function (t) {
12
13 var reader = Reader()
14
15 pull(
16 pull.values([bytes]),
17 split(),
18 reader
19 )
20
21 reader.read(32, function (err, data) {
22 t.notOk(err)
23 t.deepEqual(data, bytes.slice(0, 32))
24 t.end()
25 })
26
27})
28
29tape('read twice from a stream', function (t) {
30
31 var reader = Reader()
32
33 pull(
34 pull.values([bytes]),
35 split(),
36 reader
37 )
38
39 reader.read(32, function (err, data) {
40
41 console.log('read1', err, data)
42 t.notOk(err)
43 t.deepEqual(data, bytes.slice(0, 32))
44
45 reader.read(16, function (err, data) {
46 console.log('read2')
47 t.notOk(err)
48 t.deepEqual(data, bytes.slice(32, 48))
49 t.end()
50 })
51 })
52
53})
54
55tape('read whatever is there', function (t) {
56
57 var reader = Reader()
58
59 pull(
60 pull.values([bytes]),
61 split(),
62 reader
63 )
64
65 reader.read(null, function (err, data) {
66 t.notOk(err)
67 console.log(data)
68 t.ok(data.length > 0)
69 t.end()
70 })
71
72})
73
74tape('read a stream', function (t) {
75
76 var reader = Reader()
77
78 pull(
79 pull.values([bytes]),
80 split(),
81 reader
82 )
83
84 pull(
85 reader.read(),
86 pull.collect(function (err, data) {
87 t.notOk(err)
88 var _data = Buffer.concat(data)
89 t.equal(_data.length, bytes.length)
90 t.deepEqual(_data, bytes)
91 t.end()
92 })
93 )
94
95})
96
97tape('async read', function (t) {
98
99 var reader = Reader()
100
101 pull(
102 pull.values([new Buffer('hello there')]),
103 reader
104 )
105
106 setTimeout(function () {
107 reader.read(6, function (err, hello_) {
108 setTimeout(function () {
109 reader.read(5, function (err, there) {
110 if(err) throw new Error('unexpected end')
111 t.deepEqual(Buffer.concat([hello_, there]).toString(), 'hello there')
112 t.end()
113 })
114 })
115 })
116 })
117
118})
119
120tape('abort the stream', function (t) {
121
122 var reader = Reader()
123
124 pull(
125 Hang(function (err) {
126 t.end()
127 }),
128 reader
129 )
130
131 reader.abort()
132
133})
134
135
136tape('abort the stream and a read', function (t) {
137
138 t.plan(4)
139 var reader = Reader(), err = new Error('intended')
140
141 pull(
142 Hang(function (err) {
143 t.end()
144 }),
145 reader
146 )
147
148 reader.read(32, function (_err) {
149 t.equal(_err, err)
150 })
151 reader.read(32, function (_err) {
152 t.equal(_err, err)
153 })
154 reader.read(32, function (_err) {
155 t.equal(_err, err)
156 })
157
158 reader.abort(err, function (_err) {
159 t.equal(_err, err)
160 })
161
162})
163
164tape('if streaming, the stream should abort', function (t) {
165
166 var reader = Reader(), err = new Error('intended')
167
168 pull(Hang(), reader)
169
170 pull(
171 reader.read(),
172 pull.collect(function (_err) {
173 t.equal(_err, err)
174 t.end()
175 })
176 )
177
178 reader.abort(err)
179
180})
181
182tape('abort stream once in streaming mode', function (t) {
183
184 var reader = Reader(), err = new Error('intended')
185
186 pull(Hang(), reader)
187
188 var read = reader.read()
189
190 read(true, function (err) {
191 t.ok(err)
192 t.end()
193 })
194
195})
196
197
198tape('configurable timeout', function (t) {
199
200 var reader = Reader(100)
201 var start = Date.now()
202 pull(Hang(), reader)
203
204 pull(
205 reader.read(),
206 pull.collect(function (err) {
207 t.ok(err)
208 t.ok(Date.now() < start + 300)
209 t.end()
210 })
211 )
212
213})
214
215
216tape('timeout does not apply to the rest of the stream', function (t) {
217 var reader = Reader(100)
218 var once = false
219 pull(
220 function (abort, cb) {
221 if(!once)
222 setTimeout(function () {
223 once = true
224 cb(null, new Buffer('hello world'))
225 }, 200)
226 else
227 cb(true)
228 },
229 reader
230 )
231
232 pull(
233 reader.read(),
234 pull.collect(function (err, ary) {
235 console.log(err)
236 t.notOk(err)
237 t.equal(Buffer.concat(ary).toString(), 'hello world')
238 t.end()
239 })
240 )
241})
242
243
244
245
246