UNPKG

2.37 kBJavaScriptView Raw
1
2var test = require('tape')
3var spec = require('stream-spec')
4var through = require('../')
5
6/*
7 I'm using these two functions, and not streams and pipe
8 so there is less to break. if this test fails it must be
9 the implementation of _through_
10*/
11
12function write(array, stream) {
13 array = array.slice()
14 function next() {
15 while(array.length)
16 if(stream.write(array.shift()) === false)
17 return stream.once('drain', next)
18
19 stream.end()
20 }
21
22 next()
23}
24
25function read(stream, callback) {
26 var actual = []
27 stream.on('data', function (data) {
28 actual.push(data)
29 })
30 stream.once('end', function () {
31 callback(null, actual)
32 })
33 stream.once('error', function (err) {
34 callback(err)
35 })
36}
37
38test('simple defaults', function(assert) {
39
40 var l = 1000
41 , expected = []
42
43 while(l--) expected.push(l * Math.random())
44
45 var t = through()
46 var s = spec(t).through().pausable()
47
48 read(t, function (err, actual) {
49 assert.ifError(err)
50 assert.deepEqual(actual, expected)
51 assert.end()
52 })
53
54 t.on('close', s.validate)
55
56 write(expected, t)
57});
58
59test('simple functions', function(assert) {
60
61 var l = 1000
62 , expected = []
63
64 while(l--) expected.push(l * Math.random())
65
66 var t = through(function (data) {
67 this.emit('data', data*2)
68 })
69 var s = spec(t).through().pausable()
70
71
72 read(t, function (err, actual) {
73 assert.ifError(err)
74 assert.deepEqual(actual, expected.map(function (data) {
75 return data*2
76 }))
77 assert.end()
78 })
79
80 t.on('close', s.validate)
81
82 write(expected, t)
83})
84
85test('pauses', function(assert) {
86
87 var l = 1000
88 , expected = []
89
90 while(l--) expected.push(l) //Math.random())
91
92 var t = through()
93
94 var s = spec(t)
95 .through()
96 .pausable()
97
98 t.on('data', function () {
99 if(Math.random() > 0.1) return
100 t.pause()
101 process.nextTick(function () {
102 t.resume()
103 })
104 })
105
106 read(t, function (err, actual) {
107 assert.ifError(err)
108 assert.deepEqual(actual, expected)
109 })
110
111 t.on('close', function () {
112 s.validate()
113 assert.end()
114 })
115
116 write(expected, t)
117})
118
119test('does not soft-end on `undefined`', function(assert) {
120 var stream = through()
121 , count = 0
122
123 stream.on('data', function (data) {
124 count++
125 })
126
127 stream.write(undefined)
128 stream.write(undefined)
129
130 assert.equal(count, 2)
131
132 assert.end()
133})