bl 0.9.5 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.travis.yml CHANGED
@@ -1,11 +1,13 @@
1
+ sudo: false
1
2
  language: node_js
2
3
  node_js:
3
- - 0.8
4
- - "0.10"
4
+ - '0.10'
5
+ - '0.12'
6
+ - '4'
7
+ - '5'
5
8
  branches:
6
9
  only:
7
10
  - master
8
11
  notifications:
9
12
  email:
10
13
  - rod@vagg.org
11
- script: npm test
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # bl *(BufferList)*
2
2
 
3
+ [![Build Status](https://travis-ci.org/rvagg/bl.svg?branch=master)](https://travis-ci.org/rvagg/bl)
4
+
3
5
  **A Node.js Buffer list collector, reader and streamer thingy.**
4
6
 
5
7
  [![NPM](https://nodei.co/npm/bl.png?downloads=true&downloadRank=true)](https://nodei.co/npm/bl/)
package/bl.js CHANGED
@@ -57,8 +57,14 @@ BufferList.prototype.append = function (buf) {
57
57
  if (typeof buf == 'number')
58
58
  buf = buf.toString()
59
59
 
60
- this._bufs.push(isBuffer ? buf : new Buffer(buf))
61
- this.length += buf.length
60
+ if (buf instanceof BufferList) {
61
+ this._bufs.push.apply(this._bufs, buf._bufs)
62
+ this.length += buf.length
63
+ } else {
64
+ this._bufs.push(isBuffer ? buf : new Buffer(buf))
65
+ this.length += buf.length
66
+ }
67
+
62
68
  return this
63
69
  }
64
70
 
@@ -162,7 +168,7 @@ BufferList.prototype.toString = function (encoding, start, end) {
162
168
 
163
169
  BufferList.prototype.consume = function (bytes) {
164
170
  while (this._bufs.length) {
165
- if (bytes > this._bufs[0].length) {
171
+ if (bytes >= this._bufs[0].length) {
166
172
  bytes -= this._bufs[0].length
167
173
  this.length -= this._bufs[0].length
168
174
  this._bufs.shift()
package/package.json CHANGED
@@ -1,11 +1,10 @@
1
1
  {
2
2
  "name": "bl",
3
- "version": "0.9.5",
3
+ "version": "1.0.3",
4
4
  "description": "Buffer List: collect buffers and access with a standard readable Buffer interface, streamable too!",
5
5
  "main": "bl.js",
6
6
  "scripts": {
7
- "test": "node test/test.js | faucet",
8
- "test-local": "brtapsauce-local test/basic-test.js"
7
+ "test": "node test/test.js | faucet"
9
8
  },
10
9
  "repository": {
11
10
  "type": "git",
@@ -25,10 +24,10 @@
25
24
  ],
26
25
  "license": "MIT",
27
26
  "dependencies": {
28
- "readable-stream": "~1.0.26"
27
+ "readable-stream": "~2.0.5"
29
28
  },
30
29
  "devDependencies": {
31
- "faucet": "~0.0.1",
30
+ "faucet": "0.0.1",
32
31
  "hash_file": "~0.1.1",
33
32
  "tape": "~4.4.0"
34
33
  }
package/test/test.js CHANGED
@@ -1,9 +1,571 @@
1
- require('./basic-test')
1
+ var tape = require('tape')
2
+ , crypto = require('crypto')
3
+ , fs = require('fs')
4
+ , hash = require('hash_file')
5
+ , BufferList = require('../')
2
6
 
3
- if (!process.env.SAUCE_KEY || !process.env.SAUCE_USER)
4
- return console.log('SAUCE_KEY and/or SAUCE_USER not set, not running sauce tests')
7
+ , encodings =
8
+ ('hex utf8 utf-8 ascii binary base64'
9
+ + (process.browser ? '' : ' ucs2 ucs-2 utf16le utf-16le')).split(' ')
5
10
 
6
- if (!/v0\.10/.test(process.version))
7
- return console.log('Not Node v0.10.x, not running sauce tests')
11
+ tape('single bytes from single buffer', function (t) {
12
+ var bl = new BufferList()
13
+ bl.append(new Buffer('abcd'))
8
14
 
9
- require('./sauce.js')
15
+ t.equal(bl.length, 4)
16
+
17
+ t.equal(bl.get(0), 97)
18
+ t.equal(bl.get(1), 98)
19
+ t.equal(bl.get(2), 99)
20
+ t.equal(bl.get(3), 100)
21
+
22
+ t.end()
23
+ })
24
+
25
+ tape('single bytes from multiple buffers', function (t) {
26
+ var bl = new BufferList()
27
+ bl.append(new Buffer('abcd'))
28
+ bl.append(new Buffer('efg'))
29
+ bl.append(new Buffer('hi'))
30
+ bl.append(new Buffer('j'))
31
+
32
+ t.equal(bl.length, 10)
33
+
34
+ t.equal(bl.get(0), 97)
35
+ t.equal(bl.get(1), 98)
36
+ t.equal(bl.get(2), 99)
37
+ t.equal(bl.get(3), 100)
38
+ t.equal(bl.get(4), 101)
39
+ t.equal(bl.get(5), 102)
40
+ t.equal(bl.get(6), 103)
41
+ t.equal(bl.get(7), 104)
42
+ t.equal(bl.get(8), 105)
43
+ t.equal(bl.get(9), 106)
44
+ t.end()
45
+ })
46
+
47
+ tape('multi bytes from single buffer', function (t) {
48
+ var bl = new BufferList()
49
+ bl.append(new Buffer('abcd'))
50
+
51
+ t.equal(bl.length, 4)
52
+
53
+ t.equal(bl.slice(0, 4).toString('ascii'), 'abcd')
54
+ t.equal(bl.slice(0, 3).toString('ascii'), 'abc')
55
+ t.equal(bl.slice(1, 4).toString('ascii'), 'bcd')
56
+
57
+ t.end()
58
+ })
59
+
60
+ tape('multiple bytes from multiple buffers', function (t) {
61
+ var bl = new BufferList()
62
+
63
+ bl.append(new Buffer('abcd'))
64
+ bl.append(new Buffer('efg'))
65
+ bl.append(new Buffer('hi'))
66
+ bl.append(new Buffer('j'))
67
+
68
+ t.equal(bl.length, 10)
69
+
70
+ t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij')
71
+ t.equal(bl.slice(3, 10).toString('ascii'), 'defghij')
72
+ t.equal(bl.slice(3, 6).toString('ascii'), 'def')
73
+ t.equal(bl.slice(3, 8).toString('ascii'), 'defgh')
74
+ t.equal(bl.slice(5, 10).toString('ascii'), 'fghij')
75
+
76
+ t.end()
77
+ })
78
+
79
+ tape('multiple bytes from multiple buffer lists', function (t) {
80
+ var bl = new BufferList()
81
+
82
+ bl.append(new BufferList([new Buffer('abcd'), new Buffer('efg')]))
83
+ bl.append(new BufferList([new Buffer('hi'), new Buffer('j')]))
84
+
85
+ t.equal(bl.length, 10)
86
+
87
+ t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij')
88
+ t.equal(bl.slice(3, 10).toString('ascii'), 'defghij')
89
+ t.equal(bl.slice(3, 6).toString('ascii'), 'def')
90
+ t.equal(bl.slice(3, 8).toString('ascii'), 'defgh')
91
+ t.equal(bl.slice(5, 10).toString('ascii'), 'fghij')
92
+
93
+ t.end()
94
+ })
95
+
96
+ tape('consuming from multiple buffers', function (t) {
97
+ var bl = new BufferList()
98
+
99
+ bl.append(new Buffer('abcd'))
100
+ bl.append(new Buffer('efg'))
101
+ bl.append(new Buffer('hi'))
102
+ bl.append(new Buffer('j'))
103
+
104
+ t.equal(bl.length, 10)
105
+
106
+ t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij')
107
+
108
+ bl.consume(3)
109
+ t.equal(bl.length, 7)
110
+ t.equal(bl.slice(0, 7).toString('ascii'), 'defghij')
111
+
112
+ bl.consume(2)
113
+ t.equal(bl.length, 5)
114
+ t.equal(bl.slice(0, 5).toString('ascii'), 'fghij')
115
+
116
+ bl.consume(1)
117
+ t.equal(bl.length, 4)
118
+ t.equal(bl.slice(0, 4).toString('ascii'), 'ghij')
119
+
120
+ bl.consume(1)
121
+ t.equal(bl.length, 3)
122
+ t.equal(bl.slice(0, 3).toString('ascii'), 'hij')
123
+
124
+ bl.consume(2)
125
+ t.equal(bl.length, 1)
126
+ t.equal(bl.slice(0, 1).toString('ascii'), 'j')
127
+
128
+ t.end()
129
+ })
130
+
131
+ tape('complete consumption', function (t) {
132
+ var bl = new BufferList()
133
+
134
+ bl.append(new Buffer('a'))
135
+ bl.append(new Buffer('b'))
136
+
137
+ bl.consume(2)
138
+
139
+ t.equal(bl.length, 0)
140
+ t.equal(bl._bufs.length, 0)
141
+
142
+ t.end()
143
+ })
144
+
145
+ tape('test readUInt8 / readInt8', function (t) {
146
+ var buf1 = new Buffer(1)
147
+ , buf2 = new Buffer(3)
148
+ , buf3 = new Buffer(3)
149
+ , bl = new BufferList()
150
+
151
+ buf2[1] = 0x3
152
+ buf2[2] = 0x4
153
+ buf3[0] = 0x23
154
+ buf3[1] = 0x42
155
+
156
+ bl.append(buf1)
157
+ bl.append(buf2)
158
+ bl.append(buf3)
159
+
160
+ t.equal(bl.readUInt8(2), 0x3)
161
+ t.equal(bl.readInt8(2), 0x3)
162
+ t.equal(bl.readUInt8(3), 0x4)
163
+ t.equal(bl.readInt8(3), 0x4)
164
+ t.equal(bl.readUInt8(4), 0x23)
165
+ t.equal(bl.readInt8(4), 0x23)
166
+ t.equal(bl.readUInt8(5), 0x42)
167
+ t.equal(bl.readInt8(5), 0x42)
168
+ t.end()
169
+ })
170
+
171
+ tape('test readUInt16LE / readUInt16BE / readInt16LE / readInt16BE', function (t) {
172
+ var buf1 = new Buffer(1)
173
+ , buf2 = new Buffer(3)
174
+ , buf3 = new Buffer(3)
175
+ , bl = new BufferList()
176
+
177
+ buf2[1] = 0x3
178
+ buf2[2] = 0x4
179
+ buf3[0] = 0x23
180
+ buf3[1] = 0x42
181
+
182
+ bl.append(buf1)
183
+ bl.append(buf2)
184
+ bl.append(buf3)
185
+
186
+ t.equal(bl.readUInt16BE(2), 0x0304)
187
+ t.equal(bl.readUInt16LE(2), 0x0403)
188
+ t.equal(bl.readInt16BE(2), 0x0304)
189
+ t.equal(bl.readInt16LE(2), 0x0403)
190
+ t.equal(bl.readUInt16BE(3), 0x0423)
191
+ t.equal(bl.readUInt16LE(3), 0x2304)
192
+ t.equal(bl.readInt16BE(3), 0x0423)
193
+ t.equal(bl.readInt16LE(3), 0x2304)
194
+ t.equal(bl.readUInt16BE(4), 0x2342)
195
+ t.equal(bl.readUInt16LE(4), 0x4223)
196
+ t.equal(bl.readInt16BE(4), 0x2342)
197
+ t.equal(bl.readInt16LE(4), 0x4223)
198
+ t.end()
199
+ })
200
+
201
+ tape('test readUInt32LE / readUInt32BE / readInt32LE / readInt32BE', function (t) {
202
+ var buf1 = new Buffer(1)
203
+ , buf2 = new Buffer(3)
204
+ , buf3 = new Buffer(3)
205
+ , bl = new BufferList()
206
+
207
+ buf2[1] = 0x3
208
+ buf2[2] = 0x4
209
+ buf3[0] = 0x23
210
+ buf3[1] = 0x42
211
+
212
+ bl.append(buf1)
213
+ bl.append(buf2)
214
+ bl.append(buf3)
215
+
216
+ t.equal(bl.readUInt32BE(2), 0x03042342)
217
+ t.equal(bl.readUInt32LE(2), 0x42230403)
218
+ t.equal(bl.readInt32BE(2), 0x03042342)
219
+ t.equal(bl.readInt32LE(2), 0x42230403)
220
+ t.end()
221
+ })
222
+
223
+ tape('test readFloatLE / readFloatBE', function (t) {
224
+ var buf1 = new Buffer(1)
225
+ , buf2 = new Buffer(3)
226
+ , buf3 = new Buffer(3)
227
+ , bl = new BufferList()
228
+
229
+ buf2[1] = 0x00
230
+ buf2[2] = 0x00
231
+ buf3[0] = 0x80
232
+ buf3[1] = 0x3f
233
+
234
+ bl.append(buf1)
235
+ bl.append(buf2)
236
+ bl.append(buf3)
237
+
238
+ t.equal(bl.readFloatLE(2), 0x01)
239
+ t.end()
240
+ })
241
+
242
+ tape('test readDoubleLE / readDoubleBE', function (t) {
243
+ var buf1 = new Buffer(1)
244
+ , buf2 = new Buffer(3)
245
+ , buf3 = new Buffer(10)
246
+ , bl = new BufferList()
247
+
248
+ buf2[1] = 0x55
249
+ buf2[2] = 0x55
250
+ buf3[0] = 0x55
251
+ buf3[1] = 0x55
252
+ buf3[2] = 0x55
253
+ buf3[3] = 0x55
254
+ buf3[4] = 0xd5
255
+ buf3[5] = 0x3f
256
+
257
+ bl.append(buf1)
258
+ bl.append(buf2)
259
+ bl.append(buf3)
260
+
261
+ t.equal(bl.readDoubleLE(2), 0.3333333333333333)
262
+ t.end()
263
+ })
264
+
265
+ tape('test toString', function (t) {
266
+ var bl = new BufferList()
267
+
268
+ bl.append(new Buffer('abcd'))
269
+ bl.append(new Buffer('efg'))
270
+ bl.append(new Buffer('hi'))
271
+ bl.append(new Buffer('j'))
272
+
273
+ t.equal(bl.toString('ascii', 0, 10), 'abcdefghij')
274
+ t.equal(bl.toString('ascii', 3, 10), 'defghij')
275
+ t.equal(bl.toString('ascii', 3, 6), 'def')
276
+ t.equal(bl.toString('ascii', 3, 8), 'defgh')
277
+ t.equal(bl.toString('ascii', 5, 10), 'fghij')
278
+
279
+ t.end()
280
+ })
281
+
282
+ tape('test toString encoding', function (t) {
283
+ var bl = new BufferList()
284
+ , b = new Buffer('abcdefghij\xff\x00')
285
+
286
+ bl.append(new Buffer('abcd'))
287
+ bl.append(new Buffer('efg'))
288
+ bl.append(new Buffer('hi'))
289
+ bl.append(new Buffer('j'))
290
+ bl.append(new Buffer('\xff\x00'))
291
+
292
+ encodings.forEach(function (enc) {
293
+ t.equal(bl.toString(enc), b.toString(enc), enc)
294
+ })
295
+
296
+ t.end()
297
+ })
298
+
299
+ !process.browser && tape('test stream', function (t) {
300
+ var random = crypto.randomBytes(65534)
301
+ , rndhash = hash(random, 'md5')
302
+ , md5sum = crypto.createHash('md5')
303
+ , bl = new BufferList(function (err, buf) {
304
+ t.ok(Buffer.isBuffer(buf))
305
+ t.ok(err === null)
306
+ t.equal(rndhash, hash(bl.slice(), 'md5'))
307
+ t.equal(rndhash, hash(buf, 'md5'))
308
+
309
+ bl.pipe(fs.createWriteStream('/tmp/bl_test_rnd_out.dat'))
310
+ .on('close', function () {
311
+ var s = fs.createReadStream('/tmp/bl_test_rnd_out.dat')
312
+ s.on('data', md5sum.update.bind(md5sum))
313
+ s.on('end', function() {
314
+ t.equal(rndhash, md5sum.digest('hex'), 'woohoo! correct hash!')
315
+ t.end()
316
+ })
317
+ })
318
+
319
+ })
320
+
321
+ fs.writeFileSync('/tmp/bl_test_rnd.dat', random)
322
+ fs.createReadStream('/tmp/bl_test_rnd.dat').pipe(bl)
323
+ })
324
+
325
+ tape('instantiation with Buffer', function (t) {
326
+ var buf = crypto.randomBytes(1024)
327
+ , buf2 = crypto.randomBytes(1024)
328
+ , b = BufferList(buf)
329
+
330
+ t.equal(buf.toString('hex'), b.slice().toString('hex'), 'same buffer')
331
+ b = BufferList([ buf, buf2 ])
332
+ t.equal(b.slice().toString('hex'), Buffer.concat([ buf, buf2 ]).toString('hex'), 'same buffer')
333
+ t.end()
334
+ })
335
+
336
+ tape('test String appendage', function (t) {
337
+ var bl = new BufferList()
338
+ , b = new Buffer('abcdefghij\xff\x00')
339
+
340
+ bl.append('abcd')
341
+ bl.append('efg')
342
+ bl.append('hi')
343
+ bl.append('j')
344
+ bl.append('\xff\x00')
345
+
346
+ encodings.forEach(function (enc) {
347
+ t.equal(bl.toString(enc), b.toString(enc))
348
+ })
349
+
350
+ t.end()
351
+ })
352
+
353
+ tape('test Number appendage', function (t) {
354
+ var bl = new BufferList()
355
+ , b = new Buffer('1234567890')
356
+
357
+ bl.append(1234)
358
+ bl.append(567)
359
+ bl.append(89)
360
+ bl.append(0)
361
+
362
+ encodings.forEach(function (enc) {
363
+ t.equal(bl.toString(enc), b.toString(enc))
364
+ })
365
+
366
+ t.end()
367
+ })
368
+
369
+ tape('write nothing, should get empty buffer', function (t) {
370
+ t.plan(3)
371
+ BufferList(function (err, data) {
372
+ t.notOk(err, 'no error')
373
+ t.ok(Buffer.isBuffer(data), 'got a buffer')
374
+ t.equal(0, data.length, 'got a zero-length buffer')
375
+ t.end()
376
+ }).end()
377
+ })
378
+
379
+ tape('unicode string', function (t) {
380
+ t.plan(2)
381
+ var inp1 = '\u2600'
382
+ , inp2 = '\u2603'
383
+ , exp = inp1 + ' and ' + inp2
384
+ , bl = BufferList()
385
+ bl.write(inp1)
386
+ bl.write(' and ')
387
+ bl.write(inp2)
388
+ t.equal(exp, bl.toString())
389
+ t.equal(new Buffer(exp).toString('hex'), bl.toString('hex'))
390
+ })
391
+
392
+ tape('should emit finish', function (t) {
393
+ var source = BufferList()
394
+ , dest = BufferList()
395
+
396
+ source.write('hello')
397
+ source.pipe(dest)
398
+
399
+ dest.on('finish', function () {
400
+ t.equal(dest.toString('utf8'), 'hello')
401
+ t.end()
402
+ })
403
+ })
404
+
405
+ tape('basic copy', function (t) {
406
+ var buf = crypto.randomBytes(1024)
407
+ , buf2 = new Buffer(1024)
408
+ , b = BufferList(buf)
409
+
410
+ b.copy(buf2)
411
+ t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer')
412
+ t.end()
413
+ })
414
+
415
+ tape('copy after many appends', function (t) {
416
+ var buf = crypto.randomBytes(512)
417
+ , buf2 = new Buffer(1024)
418
+ , b = BufferList(buf)
419
+
420
+ b.append(buf)
421
+ b.copy(buf2)
422
+ t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer')
423
+ t.end()
424
+ })
425
+
426
+ tape('copy at a precise position', function (t) {
427
+ var buf = crypto.randomBytes(1004)
428
+ , buf2 = new Buffer(1024)
429
+ , b = BufferList(buf)
430
+
431
+ b.copy(buf2, 20)
432
+ t.equal(b.slice().toString('hex'), buf2.slice(20).toString('hex'), 'same buffer')
433
+ t.end()
434
+ })
435
+
436
+ tape('copy starting from a precise location', function (t) {
437
+ var buf = crypto.randomBytes(10)
438
+ , buf2 = new Buffer(5)
439
+ , b = BufferList(buf)
440
+
441
+ b.copy(buf2, 0, 5)
442
+ t.equal(b.slice(5).toString('hex'), buf2.toString('hex'), 'same buffer')
443
+ t.end()
444
+ })
445
+
446
+ tape('copy in an interval', function (t) {
447
+ var rnd = crypto.randomBytes(10)
448
+ , b = BufferList(rnd) // put the random bytes there
449
+ , actual = new Buffer(3)
450
+ , expected = new Buffer(3)
451
+
452
+ rnd.copy(expected, 0, 5, 8)
453
+ b.copy(actual, 0, 5, 8)
454
+
455
+ t.equal(actual.toString('hex'), expected.toString('hex'), 'same buffer')
456
+ t.end()
457
+ })
458
+
459
+ tape('copy an interval between two buffers', function (t) {
460
+ var buf = crypto.randomBytes(10)
461
+ , buf2 = new Buffer(10)
462
+ , b = BufferList(buf)
463
+
464
+ b.append(buf)
465
+ b.copy(buf2, 0, 5, 15)
466
+
467
+ t.equal(b.slice(5, 15).toString('hex'), buf2.toString('hex'), 'same buffer')
468
+ t.end()
469
+ })
470
+
471
+ tape('duplicate', function (t) {
472
+ t.plan(2)
473
+
474
+ var bl = new BufferList('abcdefghij\xff\x00')
475
+ , dup = bl.duplicate()
476
+
477
+ t.equal(bl.prototype, dup.prototype)
478
+ t.equal(bl.toString('hex'), dup.toString('hex'))
479
+ })
480
+
481
+ tape('destroy no pipe', function (t) {
482
+ t.plan(2)
483
+
484
+ var bl = new BufferList('alsdkfja;lsdkfja;lsdk')
485
+ bl.destroy()
486
+
487
+ t.equal(bl._bufs.length, 0)
488
+ t.equal(bl.length, 0)
489
+ })
490
+
491
+ !process.browser && tape('destroy with pipe before read end', function (t) {
492
+ t.plan(2)
493
+
494
+ var bl = new BufferList()
495
+ fs.createReadStream(__dirname + '/test.js')
496
+ .pipe(bl)
497
+
498
+ bl.destroy()
499
+
500
+ t.equal(bl._bufs.length, 0)
501
+ t.equal(bl.length, 0)
502
+
503
+ })
504
+
505
+ !process.browser && tape('destroy with pipe before read end with race', function (t) {
506
+ t.plan(2)
507
+
508
+ var bl = new BufferList()
509
+ fs.createReadStream(__dirname + '/test.js')
510
+ .pipe(bl)
511
+
512
+ setTimeout(function () {
513
+ bl.destroy()
514
+ setTimeout(function () {
515
+ t.equal(bl._bufs.length, 0)
516
+ t.equal(bl.length, 0)
517
+ }, 500)
518
+ }, 500)
519
+ })
520
+
521
+ !process.browser && tape('destroy with pipe after read end', function (t) {
522
+ t.plan(2)
523
+
524
+ var bl = new BufferList()
525
+ fs.createReadStream(__dirname + '/test.js')
526
+ .on('end', onEnd)
527
+ .pipe(bl)
528
+
529
+ function onEnd () {
530
+ bl.destroy()
531
+
532
+ t.equal(bl._bufs.length, 0)
533
+ t.equal(bl.length, 0)
534
+ }
535
+ })
536
+
537
+ !process.browser && tape('destroy with pipe while writing to a destination', function (t) {
538
+ t.plan(4)
539
+
540
+ var bl = new BufferList()
541
+ , ds = new BufferList()
542
+
543
+ fs.createReadStream(__dirname + '/test.js')
544
+ .on('end', onEnd)
545
+ .pipe(bl)
546
+
547
+ function onEnd () {
548
+ bl.pipe(ds)
549
+
550
+ setTimeout(function () {
551
+ bl.destroy()
552
+
553
+ t.equals(bl._bufs.length, 0)
554
+ t.equals(bl.length, 0)
555
+
556
+ ds.destroy()
557
+
558
+ t.equals(bl._bufs.length, 0)
559
+ t.equals(bl.length, 0)
560
+
561
+ }, 100)
562
+ }
563
+ })
564
+
565
+ !process.browser && tape('handle error', function (t) {
566
+ t.plan(2)
567
+ fs.createReadStream('/does/not/exist').pipe(BufferList(function (err, data) {
568
+ t.ok(err instanceof Error, 'has error')
569
+ t.notOk(data, 'no data')
570
+ }))
571
+ })
@@ -1,557 +0,0 @@
1
- var tape = require('tape')
2
- , crypto = require('crypto')
3
- , fs = require('fs')
4
- , hash = require('hash_file')
5
- , BufferList = require('../')
6
-
7
- , encodings =
8
- ('hex utf8 utf-8 ascii binary base64'
9
- + (process.browser ? '' : ' ucs2 ucs-2 utf16le utf-16le')).split(' ')
10
-
11
- tape('single bytes from single buffer', function (t) {
12
- var bl = new BufferList()
13
- bl.append(new Buffer('abcd'))
14
-
15
- t.equal(bl.length, 4)
16
-
17
- t.equal(bl.get(0), 97)
18
- t.equal(bl.get(1), 98)
19
- t.equal(bl.get(2), 99)
20
- t.equal(bl.get(3), 100)
21
-
22
- t.end()
23
- })
24
-
25
- tape('single bytes from multiple buffers', function (t) {
26
- var bl = new BufferList()
27
- bl.append(new Buffer('abcd'))
28
- bl.append(new Buffer('efg'))
29
- bl.append(new Buffer('hi'))
30
- bl.append(new Buffer('j'))
31
-
32
- t.equal(bl.length, 10)
33
-
34
- t.equal(bl.get(0), 97)
35
- t.equal(bl.get(1), 98)
36
- t.equal(bl.get(2), 99)
37
- t.equal(bl.get(3), 100)
38
- t.equal(bl.get(4), 101)
39
- t.equal(bl.get(5), 102)
40
- t.equal(bl.get(6), 103)
41
- t.equal(bl.get(7), 104)
42
- t.equal(bl.get(8), 105)
43
- t.equal(bl.get(9), 106)
44
- t.end()
45
- })
46
-
47
- tape('multi bytes from single buffer', function (t) {
48
- var bl = new BufferList()
49
- bl.append(new Buffer('abcd'))
50
-
51
- t.equal(bl.length, 4)
52
-
53
- t.equal(bl.slice(0, 4).toString('ascii'), 'abcd')
54
- t.equal(bl.slice(0, 3).toString('ascii'), 'abc')
55
- t.equal(bl.slice(1, 4).toString('ascii'), 'bcd')
56
-
57
- t.end()
58
- })
59
-
60
- tape('multiple bytes from multiple buffers', function (t) {
61
- var bl = new BufferList()
62
-
63
- bl.append(new Buffer('abcd'))
64
- bl.append(new Buffer('efg'))
65
- bl.append(new Buffer('hi'))
66
- bl.append(new Buffer('j'))
67
-
68
- t.equal(bl.length, 10)
69
-
70
- t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij')
71
- t.equal(bl.slice(3, 10).toString('ascii'), 'defghij')
72
- t.equal(bl.slice(3, 6).toString('ascii'), 'def')
73
- t.equal(bl.slice(3, 8).toString('ascii'), 'defgh')
74
- t.equal(bl.slice(5, 10).toString('ascii'), 'fghij')
75
-
76
- t.end()
77
- })
78
-
79
- tape('multiple bytes from multiple buffer lists', function (t) {
80
- var bl = new BufferList()
81
-
82
- bl.append(new BufferList([new Buffer('abcd'), new Buffer('efg')]))
83
- bl.append(new BufferList([new Buffer('hi'), new Buffer('j')]))
84
-
85
- t.equal(bl.length, 10)
86
-
87
- t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij')
88
- t.equal(bl.slice(3, 10).toString('ascii'), 'defghij')
89
- t.equal(bl.slice(3, 6).toString('ascii'), 'def')
90
- t.equal(bl.slice(3, 8).toString('ascii'), 'defgh')
91
- t.equal(bl.slice(5, 10).toString('ascii'), 'fghij')
92
-
93
- t.end()
94
- })
95
-
96
- tape('consuming from multiple buffers', function (t) {
97
- var bl = new BufferList()
98
-
99
- bl.append(new Buffer('abcd'))
100
- bl.append(new Buffer('efg'))
101
- bl.append(new Buffer('hi'))
102
- bl.append(new Buffer('j'))
103
-
104
- t.equal(bl.length, 10)
105
-
106
- t.equal(bl.slice(0, 10).toString('ascii'), 'abcdefghij')
107
-
108
- bl.consume(3)
109
- t.equal(bl.length, 7)
110
- t.equal(bl.slice(0, 7).toString('ascii'), 'defghij')
111
-
112
- bl.consume(2)
113
- t.equal(bl.length, 5)
114
- t.equal(bl.slice(0, 5).toString('ascii'), 'fghij')
115
-
116
- bl.consume(1)
117
- t.equal(bl.length, 4)
118
- t.equal(bl.slice(0, 4).toString('ascii'), 'ghij')
119
-
120
- bl.consume(1)
121
- t.equal(bl.length, 3)
122
- t.equal(bl.slice(0, 3).toString('ascii'), 'hij')
123
-
124
- bl.consume(2)
125
- t.equal(bl.length, 1)
126
- t.equal(bl.slice(0, 1).toString('ascii'), 'j')
127
-
128
- t.end()
129
- })
130
-
131
- tape('test readUInt8 / readInt8', function (t) {
132
- var buf1 = new Buffer(1)
133
- , buf2 = new Buffer(3)
134
- , buf3 = new Buffer(3)
135
- , bl = new BufferList()
136
-
137
- buf2[1] = 0x3
138
- buf2[2] = 0x4
139
- buf3[0] = 0x23
140
- buf3[1] = 0x42
141
-
142
- bl.append(buf1)
143
- bl.append(buf2)
144
- bl.append(buf3)
145
-
146
- t.equal(bl.readUInt8(2), 0x3)
147
- t.equal(bl.readInt8(2), 0x3)
148
- t.equal(bl.readUInt8(3), 0x4)
149
- t.equal(bl.readInt8(3), 0x4)
150
- t.equal(bl.readUInt8(4), 0x23)
151
- t.equal(bl.readInt8(4), 0x23)
152
- t.equal(bl.readUInt8(5), 0x42)
153
- t.equal(bl.readInt8(5), 0x42)
154
- t.end()
155
- })
156
-
157
- tape('test readUInt16LE / readUInt16BE / readInt16LE / readInt16BE', function (t) {
158
- var buf1 = new Buffer(1)
159
- , buf2 = new Buffer(3)
160
- , buf3 = new Buffer(3)
161
- , bl = new BufferList()
162
-
163
- buf2[1] = 0x3
164
- buf2[2] = 0x4
165
- buf3[0] = 0x23
166
- buf3[1] = 0x42
167
-
168
- bl.append(buf1)
169
- bl.append(buf2)
170
- bl.append(buf3)
171
-
172
- t.equal(bl.readUInt16BE(2), 0x0304)
173
- t.equal(bl.readUInt16LE(2), 0x0403)
174
- t.equal(bl.readInt16BE(2), 0x0304)
175
- t.equal(bl.readInt16LE(2), 0x0403)
176
- t.equal(bl.readUInt16BE(3), 0x0423)
177
- t.equal(bl.readUInt16LE(3), 0x2304)
178
- t.equal(bl.readInt16BE(3), 0x0423)
179
- t.equal(bl.readInt16LE(3), 0x2304)
180
- t.equal(bl.readUInt16BE(4), 0x2342)
181
- t.equal(bl.readUInt16LE(4), 0x4223)
182
- t.equal(bl.readInt16BE(4), 0x2342)
183
- t.equal(bl.readInt16LE(4), 0x4223)
184
- t.end()
185
- })
186
-
187
- tape('test readUInt32LE / readUInt32BE / readInt32LE / readInt32BE', function (t) {
188
- var buf1 = new Buffer(1)
189
- , buf2 = new Buffer(3)
190
- , buf3 = new Buffer(3)
191
- , bl = new BufferList()
192
-
193
- buf2[1] = 0x3
194
- buf2[2] = 0x4
195
- buf3[0] = 0x23
196
- buf3[1] = 0x42
197
-
198
- bl.append(buf1)
199
- bl.append(buf2)
200
- bl.append(buf3)
201
-
202
- t.equal(bl.readUInt32BE(2), 0x03042342)
203
- t.equal(bl.readUInt32LE(2), 0x42230403)
204
- t.equal(bl.readInt32BE(2), 0x03042342)
205
- t.equal(bl.readInt32LE(2), 0x42230403)
206
- t.end()
207
- })
208
-
209
- tape('test readFloatLE / readFloatBE', function (t) {
210
- var buf1 = new Buffer(1)
211
- , buf2 = new Buffer(3)
212
- , buf3 = new Buffer(3)
213
- , bl = new BufferList()
214
-
215
- buf2[1] = 0x00
216
- buf2[2] = 0x00
217
- buf3[0] = 0x80
218
- buf3[1] = 0x3f
219
-
220
- bl.append(buf1)
221
- bl.append(buf2)
222
- bl.append(buf3)
223
-
224
- t.equal(bl.readFloatLE(2), 0x01)
225
- t.end()
226
- })
227
-
228
- tape('test readDoubleLE / readDoubleBE', function (t) {
229
- var buf1 = new Buffer(1)
230
- , buf2 = new Buffer(3)
231
- , buf3 = new Buffer(10)
232
- , bl = new BufferList()
233
-
234
- buf2[1] = 0x55
235
- buf2[2] = 0x55
236
- buf3[0] = 0x55
237
- buf3[1] = 0x55
238
- buf3[2] = 0x55
239
- buf3[3] = 0x55
240
- buf3[4] = 0xd5
241
- buf3[5] = 0x3f
242
-
243
- bl.append(buf1)
244
- bl.append(buf2)
245
- bl.append(buf3)
246
-
247
- t.equal(bl.readDoubleLE(2), 0.3333333333333333)
248
- t.end()
249
- })
250
-
251
- tape('test toString', function (t) {
252
- var bl = new BufferList()
253
-
254
- bl.append(new Buffer('abcd'))
255
- bl.append(new Buffer('efg'))
256
- bl.append(new Buffer('hi'))
257
- bl.append(new Buffer('j'))
258
-
259
- t.equal(bl.toString('ascii', 0, 10), 'abcdefghij')
260
- t.equal(bl.toString('ascii', 3, 10), 'defghij')
261
- t.equal(bl.toString('ascii', 3, 6), 'def')
262
- t.equal(bl.toString('ascii', 3, 8), 'defgh')
263
- t.equal(bl.toString('ascii', 5, 10), 'fghij')
264
-
265
- t.end()
266
- })
267
-
268
- tape('test toString encoding', function (t) {
269
- var bl = new BufferList()
270
- , b = new Buffer('abcdefghij\xff\x00')
271
-
272
- bl.append(new Buffer('abcd'))
273
- bl.append(new Buffer('efg'))
274
- bl.append(new Buffer('hi'))
275
- bl.append(new Buffer('j'))
276
- bl.append(new Buffer('\xff\x00'))
277
-
278
- encodings.forEach(function (enc) {
279
- t.equal(bl.toString(enc), b.toString(enc), enc)
280
- })
281
-
282
- t.end()
283
- })
284
-
285
- !process.browser && tape('test stream', function (t) {
286
- var random = crypto.randomBytes(65534)
287
- , rndhash = hash(random, 'md5')
288
- , md5sum = crypto.createHash('md5')
289
- , bl = new BufferList(function (err, buf) {
290
- t.ok(Buffer.isBuffer(buf))
291
- t.ok(err === null)
292
- t.equal(rndhash, hash(bl.slice(), 'md5'))
293
- t.equal(rndhash, hash(buf, 'md5'))
294
-
295
- bl.pipe(fs.createWriteStream('/tmp/bl_test_rnd_out.dat'))
296
- .on('close', function () {
297
- var s = fs.createReadStream('/tmp/bl_test_rnd_out.dat')
298
- s.on('data', md5sum.update.bind(md5sum))
299
- s.on('end', function() {
300
- t.equal(rndhash, md5sum.digest('hex'), 'woohoo! correct hash!')
301
- t.end()
302
- })
303
- })
304
-
305
- })
306
-
307
- fs.writeFileSync('/tmp/bl_test_rnd.dat', random)
308
- fs.createReadStream('/tmp/bl_test_rnd.dat').pipe(bl)
309
- })
310
-
311
- tape('instantiation with Buffer', function (t) {
312
- var buf = crypto.randomBytes(1024)
313
- , buf2 = crypto.randomBytes(1024)
314
- , b = BufferList(buf)
315
-
316
- t.equal(buf.toString('hex'), b.slice().toString('hex'), 'same buffer')
317
- b = BufferList([ buf, buf2 ])
318
- t.equal(b.slice().toString('hex'), Buffer.concat([ buf, buf2 ]).toString('hex'), 'same buffer')
319
- t.end()
320
- })
321
-
322
- tape('test String appendage', function (t) {
323
- var bl = new BufferList()
324
- , b = new Buffer('abcdefghij\xff\x00')
325
-
326
- bl.append('abcd')
327
- bl.append('efg')
328
- bl.append('hi')
329
- bl.append('j')
330
- bl.append('\xff\x00')
331
-
332
- encodings.forEach(function (enc) {
333
- t.equal(bl.toString(enc), b.toString(enc))
334
- })
335
-
336
- t.end()
337
- })
338
-
339
- tape('test Number appendage', function (t) {
340
- var bl = new BufferList()
341
- , b = new Buffer('1234567890')
342
-
343
- bl.append(1234)
344
- bl.append(567)
345
- bl.append(89)
346
- bl.append(0)
347
-
348
- encodings.forEach(function (enc) {
349
- t.equal(bl.toString(enc), b.toString(enc))
350
- })
351
-
352
- t.end()
353
- })
354
-
355
- tape('write nothing, should get empty buffer', function (t) {
356
- t.plan(3)
357
- BufferList(function (err, data) {
358
- t.notOk(err, 'no error')
359
- t.ok(Buffer.isBuffer(data), 'got a buffer')
360
- t.equal(0, data.length, 'got a zero-length buffer')
361
- t.end()
362
- }).end()
363
- })
364
-
365
- tape('unicode string', function (t) {
366
- t.plan(2)
367
- var inp1 = '\u2600'
368
- , inp2 = '\u2603'
369
- , exp = inp1 + ' and ' + inp2
370
- , bl = BufferList()
371
- bl.write(inp1)
372
- bl.write(' and ')
373
- bl.write(inp2)
374
- t.equal(exp, bl.toString())
375
- t.equal(new Buffer(exp).toString('hex'), bl.toString('hex'))
376
- })
377
-
378
- tape('should emit finish', function (t) {
379
- var source = BufferList()
380
- , dest = BufferList()
381
-
382
- source.write('hello')
383
- source.pipe(dest)
384
-
385
- dest.on('finish', function () {
386
- t.equal(dest.toString('utf8'), 'hello')
387
- t.end()
388
- })
389
- })
390
-
391
- tape('basic copy', function (t) {
392
- var buf = crypto.randomBytes(1024)
393
- , buf2 = new Buffer(1024)
394
- , b = BufferList(buf)
395
-
396
- b.copy(buf2)
397
- t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer')
398
- t.end()
399
- })
400
-
401
- tape('copy after many appends', function (t) {
402
- var buf = crypto.randomBytes(512)
403
- , buf2 = new Buffer(1024)
404
- , b = BufferList(buf)
405
-
406
- b.append(buf)
407
- b.copy(buf2)
408
- t.equal(b.slice().toString('hex'), buf2.toString('hex'), 'same buffer')
409
- t.end()
410
- })
411
-
412
- tape('copy at a precise position', function (t) {
413
- var buf = crypto.randomBytes(1004)
414
- , buf2 = new Buffer(1024)
415
- , b = BufferList(buf)
416
-
417
- b.copy(buf2, 20)
418
- t.equal(b.slice().toString('hex'), buf2.slice(20).toString('hex'), 'same buffer')
419
- t.end()
420
- })
421
-
422
- tape('copy starting from a precise location', function (t) {
423
- var buf = crypto.randomBytes(10)
424
- , buf2 = new Buffer(5)
425
- , b = BufferList(buf)
426
-
427
- b.copy(buf2, 0, 5)
428
- t.equal(b.slice(5).toString('hex'), buf2.toString('hex'), 'same buffer')
429
- t.end()
430
- })
431
-
432
- tape('copy in an interval', function (t) {
433
- var rnd = crypto.randomBytes(10)
434
- , b = BufferList(rnd) // put the random bytes there
435
- , actual = new Buffer(3)
436
- , expected = new Buffer(3)
437
-
438
- rnd.copy(expected, 0, 5, 8)
439
- b.copy(actual, 0, 5, 8)
440
-
441
- t.equal(actual.toString('hex'), expected.toString('hex'), 'same buffer')
442
- t.end()
443
- })
444
-
445
- tape('copy an interval between two buffers', function (t) {
446
- var buf = crypto.randomBytes(10)
447
- , buf2 = new Buffer(10)
448
- , b = BufferList(buf)
449
-
450
- b.append(buf)
451
- b.copy(buf2, 0, 5, 15)
452
-
453
- t.equal(b.slice(5, 15).toString('hex'), buf2.toString('hex'), 'same buffer')
454
- t.end()
455
- })
456
-
457
- tape('duplicate', function (t) {
458
- t.plan(2)
459
-
460
- var bl = new BufferList('abcdefghij\xff\x00')
461
- , dup = bl.duplicate()
462
-
463
- t.equal(bl.prototype, dup.prototype)
464
- t.equal(bl.toString('hex'), dup.toString('hex'))
465
- })
466
-
467
- tape('destroy no pipe', function (t) {
468
- t.plan(2)
469
-
470
- var bl = new BufferList('alsdkfja;lsdkfja;lsdk')
471
- bl.destroy()
472
-
473
- t.equal(bl._bufs.length, 0)
474
- t.equal(bl.length, 0)
475
- })
476
-
477
- !process.browser && tape('destroy with pipe before read end', function (t) {
478
- t.plan(2)
479
-
480
- var bl = new BufferList()
481
- fs.createReadStream(__dirname + '/sauce.js')
482
- .pipe(bl)
483
-
484
- bl.destroy()
485
-
486
- t.equal(bl._bufs.length, 0)
487
- t.equal(bl.length, 0)
488
-
489
- })
490
-
491
- !process.browser && tape('destroy with pipe before read end with race', function (t) {
492
- t.plan(2)
493
-
494
- var bl = new BufferList()
495
- fs.createReadStream(__dirname + '/sauce.js')
496
- .pipe(bl)
497
-
498
- setTimeout(function () {
499
- bl.destroy()
500
- setTimeout(function () {
501
- t.equal(bl._bufs.length, 0)
502
- t.equal(bl.length, 0)
503
- }, 500)
504
- }, 500)
505
- })
506
-
507
- !process.browser && tape('destroy with pipe after read end', function (t) {
508
- t.plan(2)
509
-
510
- var bl = new BufferList()
511
- fs.createReadStream(__dirname + '/sauce.js')
512
- .on('end', onEnd)
513
- .pipe(bl)
514
-
515
- function onEnd () {
516
- bl.destroy()
517
-
518
- t.equal(bl._bufs.length, 0)
519
- t.equal(bl.length, 0)
520
- }
521
- })
522
-
523
- !process.browser && tape('destroy with pipe while writing to a destination', function (t) {
524
- t.plan(4)
525
-
526
- var bl = new BufferList()
527
- , ds = new BufferList()
528
-
529
- fs.createReadStream(__dirname + '/sauce.js')
530
- .on('end', onEnd)
531
- .pipe(bl)
532
-
533
- function onEnd () {
534
- bl.pipe(ds)
535
-
536
- setTimeout(function () {
537
- bl.destroy()
538
-
539
- t.equals(bl._bufs.length, 0)
540
- t.equals(bl.length, 0)
541
-
542
- ds.destroy()
543
-
544
- t.equals(bl._bufs.length, 0)
545
- t.equals(bl.length, 0)
546
-
547
- }, 100)
548
- }
549
- })
550
-
551
- !process.browser && tape('handle error', function (t) {
552
- t.plan(2)
553
- fs.createReadStream('/does/not/exist').pipe(BufferList(function (err, data) {
554
- t.ok(err instanceof Error, 'has error')
555
- t.notOk(data, 'no data')
556
- }))
557
- })
package/test/sauce.js DELETED
@@ -1,38 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- const user = process.env.SAUCE_USER
4
- , key = process.env.SAUCE_KEY
5
- , path = require('path')
6
- , brtapsauce = require('brtapsauce')
7
- , testFile = path.join(__dirname, 'basic-test.js')
8
-
9
- , capabilities = [
10
- { browserName: 'chrome' , platform: 'Windows XP', version: '' }
11
- , { browserName: 'firefox' , platform: 'Windows 8' , version: '' }
12
- , { browserName: 'firefox' , platform: 'Windows XP', version: '4' }
13
- , { browserName: 'internet explorer' , platform: 'Windows 8' , version: '10' }
14
- , { browserName: 'internet explorer' , platform: 'Windows 7' , version: '9' }
15
- , { browserName: 'internet explorer' , platform: 'Windows 7' , version: '8' }
16
- , { browserName: 'internet explorer' , platform: 'Windows XP', version: '7' }
17
- , { browserName: 'internet explorer' , platform: 'Windows XP', version: '6' }
18
- , { browserName: 'safari' , platform: 'Windows 7' , version: '5' }
19
- , { browserName: 'safari' , platform: 'OS X 10.8' , version: '6' }
20
- , { browserName: 'opera' , platform: 'Windows 7' , version: '' }
21
- , { browserName: 'opera' , platform: 'Windows 7' , version: '11' }
22
- , { browserName: 'ipad' , platform: 'OS X 10.8' , version: '6' }
23
- , { browserName: 'android' , platform: 'Linux' , version: '4.0', 'device-type': 'tablet' }
24
- ]
25
-
26
- if (!user)
27
- throw new Error('Must set a SAUCE_USER env var')
28
- if (!key)
29
- throw new Error('Must set a SAUCE_KEY env var')
30
-
31
- brtapsauce({
32
- name : 'Traversty'
33
- , user : user
34
- , key : key
35
- , brsrc : testFile
36
- , capabilities : capabilities
37
- , options : { timeout: 60 * 6 }
38
- })