liudong
2023-05-29 340f156319b863525e50e900c58e59b86ecb3d5e
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
var test = require('tape')
var via = require('../')
var bufferEquals = require('buffer-equal')
 
test('via(func) - utf8', function (t) {
  var stream = via(function (data) {
    return data + 'yeah?'
  })
 
  stream.on('readable', function () {
    var chunk = this.read()
    if (chunk) {
      t.strictEqual(chunk, 'cliveyeah?')
      t.end()
    }
  })
  stream.setEncoding('utf8')
  stream.end('clive')
})
 
test('via.async(func) - utf8', function (t) {
  var stream = via.async(function (data, enc, done) {
    process.nextTick(function () {
      done(null, data + 'yeah?')
    })
  })
 
  stream.on('readable', function () {
    var chunk = this.read()
    if (chunk) {
      t.strictEqual(chunk, 'cliveyeah?')
      t.end()
    }
  })
  stream.setEncoding('utf8')
  stream.end('clive')
})
 
test('via(func) - buffer', function (t) {
  var stream = via(function (data) {
    return Buffer.concat([ data, Buffer([ 2 ]) ])
  })
 
  stream.on('readable', function () {
    var chunk = this.read()
    if (chunk) {
      t.ok(bufferEquals(chunk, Buffer([ 1, 2 ])))
      t.end()
    }
  })
 
  stream.end(Buffer([ 1 ]))
})
 
test('through function throws, via emits exception', function (t) {
  t.plan(1)
  var stream = via(function () {
    throw new Error('test')
  })
  stream.on('error', function (err) {
    t.strictEqual(err.message, 'test')
  })
  stream.end('data')
})
 
test('async through function returns err, via emits exception', function (t) {
  t.plan(1)
  var stream = via.async(function (chunk, enc, done) {
    done(new Error('test'))
  })
  stream.on('error', function (err) {
    t.strictEqual(err.message, 'test')
  })
  stream.end('data')
})
 
test('via: objectMode', function (t) {
  t.plan(1)
 
  var stream = via(function (object) {
    object.received = true
    return object
  }, { objectMode: true })
 
  stream.on('readable', function () {
    var chunk = this.read()
    if (chunk) {
      t.deepEquals(chunk, { received: true })
    }
  })
 
  stream.end({})
})
 
test('via: readableObjectMode', function (t) {
  var stream = via(
    function (buf) {
      t.strictEqual(buf.toString(), 'yeah')
      return {}
    },
    { readableObjectMode: true }
  )
  stream.end('yeah')
  t.end()
})