UNPKG

9.69 kBJavaScriptView Raw
1'use strict';
2
3var tap = require('tap');
4
5var stripFullStack = require('./common').stripFullStack;
6var runProgram = require('./common').runProgram;
7
8var nodeVersion = process.versions.node;
9var majorVersion = nodeVersion.split('.')[0];
10
11if (Number(majorVersion) < 8) {
12 process.exit(0); // eslint-disable-line no-process-exit
13}
14
15var node17 = Number(majorVersion) >= 17;
16
17var lengthMessage = 'Cannot read property \'length\' of null';
18try {
19 lengthMessage = null.length;
20} catch (e) {
21 lengthMessage = e.message; // differs in v8 6.9+ (node 16.9+)
22}
23
24tap.test('async1', function (t) {
25 runProgram('async-await', 'async1.js', function (r) {
26 t.deepEqual(stripFullStack(r.stdout.toString('utf8')), [
27 'TAP version 13',
28 '# async1',
29 'ok 1 before await',
30 'ok 2 after await',
31 '',
32 '1..2',
33 '# tests 2',
34 '# pass 2',
35 '',
36 '# ok',
37 '',
38 ''
39 ]);
40 t.same(r.exitCode, 0);
41 t.same(r.stderr.toString('utf8'), '');
42 t.end();
43 });
44});
45
46tap.test('async2', function (t) {
47 runProgram('async-await', 'async2.js', function (r) {
48 var stdout = r.stdout.toString('utf8');
49 var lines = stdout.split('\n').filter(function (line) {
50 return !(/^(\s+)at(\s+)<anonymous>$/).test(line);
51 });
52
53 t.deepEqual(stripFullStack(lines.join('\n')), [
54 'TAP version 13',
55 '# async2',
56 'ok 1 before await',
57 'not ok 2 after await',
58 ' ---',
59 ' operator: ok',
60 ' expected: true',
61 ' actual: false',
62 ' at: Test.myTest ($TEST/async-await/async2.js:$LINE:$COL)',
63 ' stack: |-',
64 ' Error: after await',
65 ' [... stack stripped ...]',
66 ' at Test.myTest ($TEST/async-await/async2.js:$LINE:$COL)',
67 ' ...',
68 '',
69 '1..2',
70 '# tests 2',
71 '# pass 1',
72 '# fail 1',
73 '',
74 ''
75 ]);
76 t.same(r.exitCode, 1);
77 t.same(r.stderr.toString('utf8'), '');
78 t.end();
79 });
80});
81
82tap.test('async3', function (t) {
83 runProgram('async-await', 'async3.js', function (r) {
84 t.deepEqual(stripFullStack(r.stdout.toString('utf8')), [
85 'TAP version 13',
86 '# async3',
87 'ok 1 before await',
88 'ok 2 after await',
89 '',
90 '1..2',
91 '# tests 2',
92 '# pass 2',
93 '',
94 '# ok',
95 '',
96 ''
97 ]);
98 t.same(r.exitCode, 0);
99 t.same(r.stderr.toString('utf8'), '');
100 t.end();
101 });
102});
103
104tap.test('async4', function (t) {
105 runProgram('async-await', 'async4.js', function (r) {
106 t.deepEqual(stripFullStack(r.stdout.toString('utf8')), [
107 'TAP version 13',
108 '# async4',
109 'ok 1 before await',
110 'not ok 2 Error: oops',
111 ' ---',
112 ' operator: error',
113 ' at: Test.myTest ($TEST/async-await/async4.js:$LINE:$COL)',
114 ' stack: |-',
115 ' Error: oops',
116 ' at Timeout.myTimeout [as _onTimeout] ($TEST/async-await/async4.js:$LINE:$COL)',
117 ' [... stack stripped ...]',
118 ' ...',
119 '',
120 '1..2',
121 '# tests 2',
122 '# pass 1',
123 '# fail 1',
124 '',
125 ''
126 ]);
127 t.same(r.exitCode, 1);
128 t.same(r.stderr.toString('utf8'), '');
129 t.end();
130 });
131});
132
133tap.test('async5', function (t) {
134 runProgram('async-await', 'async5.js', function (r) {
135 t.same(stripFullStack(r.stdout.toString('utf8')), [
136 'TAP version 13',
137 '# async5',
138 'ok 1 before server',
139 'ok 2 after server',
140 'ok 3 before request',
141 'ok 4 after request',
142 'ok 5 res.statusCode is 200',
143 'not ok 6 .end() already called: mockDb.state is new',
144 ' ---',
145 ' operator: fail',
146 ' at: Timeout._onTimeout ($TEST/async-await/async5.js:$LINE:$COL)',
147 ' stack: |-',
148 ' Error: .end() already called: mockDb.state is new',
149 ' [... stack stripped ...]',
150 ' at Timeout._onTimeout ($TEST/async-await/async5.js:$LINE:$COL)',
151 ' [... stack stripped ...]',
152 ' ...',
153 'not ok 7 .end() already called: error on close',
154 ' ---',
155 ' operator: fail',
156 ' at: Server.<anonymous> ($TEST/async-await/async5.js:$LINE:$COL)',
157 ' stack: |-',
158 ' Error: .end() already called: error on close',
159 ' [... stack stripped ...]',
160 ' at Server.<anonymous> ($TEST/async-await/async5.js:$LINE:$COL)',
161 ' [... stack stripped ...]',
162 ' ...',
163 'not ok 8 .end() already called',
164 ' ---',
165 ' operator: fail',
166 ' at: Server.<anonymous> ($TEST/async-await/async5.js:$LINE:$COL)',
167 ' stack: |-',
168 ' Error: .end() already called',
169 ' [... stack stripped ...]',
170 ' at Server.<anonymous> ($TEST/async-await/async5.js:$LINE:$COL)',
171 ' [... stack stripped ...]',
172 ' ...',
173 '',
174 '1..8',
175 '# tests 8',
176 '# pass 5',
177 '# fail 3',
178 '',
179 ''
180 ]);
181 t.same(r.exitCode, 1);
182 t.same(r.stderr.toString('utf8'), '');
183 t.end();
184 });
185});
186
187tap.test('sync-error', function (t) {
188 runProgram('async-await', 'sync-error.js', function (r) {
189 t.same(stripFullStack(r.stdout.toString('utf8')), [
190 'TAP version 13',
191 '# sync-error',
192 'ok 1 before throw',
193 ''
194 ]);
195 t.same(r.exitCode, 1);
196
197 var stderr = r.stderr.toString('utf8');
198 var lines = stderr.split('\n');
199 lines = lines.filter(function (line) {
200 return !(/\(timers.js:/).test(line)
201 && !(/\(internal\/timers.js:/).test(line)
202 && !(/Immediate\.next/).test(line);
203 });
204 stderr = lines.join('\n');
205
206 t.same(stripFullStack(stderr), [].concat(
207 '$TEST/async-await/sync-error.js:7',
208 ' throw new Error(\'oopsie\');',
209 ' ^',
210 '',
211 'Error: oopsie',
212 ' at Test.myTest ($TEST/async-await/sync-error.js:$LINE:$COL)',
213 ' at Test.bound [as _cb] ($TAPE/lib/test.js:$LINE:$COL)',
214 ' at Test.run ($TAPE/lib/test.js:$LINE:$COL)',
215 ' at Test.bound [as run] ($TAPE/lib/test.js:$LINE:$COL)',
216 node17 ? [
217 '',
218 'Node.js ' + process.version
219 ] : [],
220 ''
221 ));
222 t.end();
223 });
224});
225
226tap.test('async-error', function (t) {
227 runProgram('async-await', 'async-error.js', function (r) {
228 var stdout = r.stdout.toString('utf8');
229 var lines = stdout.split('\n');
230 lines = lines.filter(function (line) {
231 return !(/^(\s+)at(\s+)<anonymous>$/).test(line);
232 });
233 stdout = lines.join('\n');
234
235 t.same(stripFullStack(stdout), [
236 'TAP version 13',
237 '# async-error',
238 'ok 1 before throw',
239 'not ok 2 Error: oopsie',
240 ' ---',
241 ' operator: error',
242 ' stack: |-',
243 ' Error: oopsie',
244 ' at Test.myTest ($TEST/async-await/async-error.js:$LINE:$COL)',
245 ' [... stack stripped ...]',
246 ' ...',
247 '',
248 '1..2',
249 '# tests 2',
250 '# pass 1',
251 '# fail 1',
252 '',
253 ''
254 ]);
255 t.same(r.exitCode, 1);
256
257 var stderr = r.stderr.toString('utf8');
258 var stderrLines = stderr.split('\n').filter(function (line) {
259 return !(/\(timers.js:/).test(line)
260 && !(/\(internal\/timers.js:/).test(line)
261 && !(/Immediate\.next/).test(line);
262 });
263
264 t.same(stderrLines.join('\n'), '');
265 t.end();
266 });
267});
268
269tap.test('async-bug', function (t) {
270 runProgram('async-await', 'async-bug.js', function (r) {
271 var stdout = r.stdout.toString('utf8');
272 var lines = stdout.split('\n');
273 lines = lines.filter(function (line) {
274 return !(/^(\s+)at(\s+)<anonymous>$/).test(line);
275 });
276 stdout = lines.join('\n');
277
278 t.same(stripFullStack(stdout), [
279 'TAP version 13',
280 '# async-error',
281 'ok 1 before throw',
282 'ok 2 should be strictly equal',
283 'not ok 3 TypeError: ' + lengthMessage,
284 ' ---',
285 ' operator: error',
286 ' stack: |-',
287 ' TypeError: ' + lengthMessage,
288 ' at myCode ($TEST/async-await/async-bug.js:$LINE:$COL)',
289 ' at Test.myTest ($TEST/async-await/async-bug.js:$LINE:$COL)',
290 ' ...',
291 '',
292 '1..3',
293 '# tests 3',
294 '# pass 2',
295 '# fail 1',
296 '',
297 ''
298 ]);
299 t.same(r.exitCode, 1);
300
301 var stderr = r.stderr.toString('utf8');
302
303 t.same(stderr, '');
304 t.end();
305 });
306});