1 |
|
2 | var tape = require('tape')
|
3 |
|
4 | var ps = require('../')
|
5 |
|
6 | tape('messages', function (t) {
|
7 |
|
8 | var actual = []
|
9 |
|
10 | var a = ps({
|
11 | message: function (msg) {
|
12 | console.log('MSG', msg)
|
13 | actual.push(msg)
|
14 | }
|
15 | })
|
16 |
|
17 | var b = ps({})
|
18 |
|
19 |
|
20 | a.read = b.write; b.read = a.write
|
21 |
|
22 | var expected = ['hello', 'foo', 'bar']
|
23 |
|
24 | expected.forEach(b.message)
|
25 | t.deepEqual(actual, expected)
|
26 |
|
27 | t.end()
|
28 | })
|
29 |
|
30 | tape('request-response', function (t) {
|
31 |
|
32 | var a = ps({
|
33 | request: function (value, cb) {
|
34 | cb(null, value * 2)
|
35 |
|
36 |
|
37 | try { cb() } catch (err) { t.end() }
|
38 | }
|
39 | })
|
40 |
|
41 | var b = ps({})
|
42 |
|
43 | a.read = b.write; b.read = a.write
|
44 |
|
45 | b.request(7, function (err, value) {
|
46 | t.notOk(err)
|
47 | t.equal(value, 14)
|
48 | })
|
49 |
|
50 | })
|
51 |
|
52 | tape('stream', function (t) {
|
53 |
|
54 | var actual = [], expected = [1, 2, 3, 4, 5]
|
55 |
|
56 | var a = ps({
|
57 | stream: function (stream) {
|
58 |
|
59 | stream.read = stream.write
|
60 | }
|
61 | })
|
62 |
|
63 | var b = ps({})
|
64 |
|
65 | a.read = b.write; b.read = a.write
|
66 |
|
67 | var s = b.stream()
|
68 |
|
69 | s.read = function (data, end) {
|
70 | if(!end)
|
71 | actual.push(data)
|
72 | else
|
73 | t.end()
|
74 | }
|
75 |
|
76 | expected.forEach(function (data) {
|
77 | s.write(data)
|
78 | })
|
79 |
|
80 | t.deepEqual(actual, expected)
|
81 |
|
82 | s.end()
|
83 |
|
84 | })
|
85 |
|
86 | tape('error async when stream ends', function (t) {
|
87 |
|
88 | var a = ps({})
|
89 |
|
90 | a.request({foo: true}, function (err) {
|
91 | t.ok(err)
|
92 | t.equal(a.ended, true)
|
93 | t.end()
|
94 | })
|
95 | t.equal(a.ended, false)
|
96 | a.write(null, true)
|
97 | })
|
98 |
|
99 | tape('request-response', function (t) {
|
100 |
|
101 | t.plan(2)
|
102 |
|
103 | var a = ps({
|
104 | request: function (value, cb) {
|
105 | setTimeout(function () {
|
106 | cb(null, value * 2)
|
107 | })
|
108 |
|
109 | }
|
110 | })
|
111 |
|
112 | var b = ps({})
|
113 |
|
114 | a.read = b.write; b.read = a.write
|
115 |
|
116 | b.request(7, function (err, value) {
|
117 | t.notOk(err)
|
118 | t.equal(value, 14)
|
119 | })
|
120 |
|
121 | b.close(function (err) {
|
122 | t.end()
|
123 | })
|
124 |
|
125 | })
|
126 |
|
127 | tape('streams, close', function (t) {
|
128 | t.plan(7)
|
129 | var a = ps({
|
130 | stream: function (stream) {
|
131 |
|
132 | stream.read = function (data, end) {
|
133 | setImmediate(function () {
|
134 | stream.write(data, end)
|
135 | })
|
136 | }
|
137 | }
|
138 | })
|
139 |
|
140 | var expected = [1,2,3,3,5]
|
141 |
|
142 | var b = ps({})
|
143 |
|
144 | var s = b.stream()
|
145 |
|
146 | a.read = b.write; b.read = a.write
|
147 |
|
148 | b.close(function (err) {
|
149 | t.ok(true)
|
150 | t.end()
|
151 | })
|
152 |
|
153 | s.read = function (data, end) {
|
154 | if(end) t.ok(end)
|
155 | else t.equal(data, expected.shift())
|
156 | }
|
157 |
|
158 | expected.forEach(function (d) {
|
159 | s.write(d)
|
160 | })
|
161 | s.write(null, true)
|
162 |
|
163 | })
|
164 |
|
165 | tape('receive stream, then close', function (t) {
|
166 | t.plan(7)
|
167 | var a = ps({
|
168 | stream: function (stream) {
|
169 |
|
170 | stream.read = function (data, end) {
|
171 | setImmediate(function () {
|
172 | stream.write(data, end)
|
173 | })
|
174 | }
|
175 |
|
176 | a.close(function (err) {
|
177 | t.ok(true)
|
178 | t.end()
|
179 | })
|
180 |
|
181 | }
|
182 | })
|
183 |
|
184 | var expected = [1,2,3,3,5]
|
185 |
|
186 | var b = ps({})
|
187 |
|
188 | var s = b.stream()
|
189 |
|
190 | a.read = b.write; b.read = a.write
|
191 |
|
192 | s.read = function (data, end) {
|
193 | if(end && end !== true) throw end
|
194 | if(end) t.ok(end)
|
195 | else t.equal(data, expected.shift())
|
196 | }
|
197 |
|
198 | expected.forEach(function (d) {
|
199 | s.write(d)
|
200 | })
|
201 |
|
202 | s.write(null, true)
|
203 |
|
204 | })
|
205 |
|
206 | tape('call close cb when the stream is ended', function (t) {
|
207 | var err = new Error('test error')
|
208 | var a = ps({
|
209 | close: function (_err) {
|
210 | t.equal(_err, err)
|
211 | t.end()
|
212 | }
|
213 | })
|
214 |
|
215 | a.write(null, err)
|
216 | })
|