Skip to content

Commit 80724bc

Browse files
committed
test: proper error-first handling
1 parent 4e00a31 commit 80724bc

6 files changed

Lines changed: 118 additions & 78 deletions

File tree

test/common.js

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ function SessionOutput(session, stream, timeout) {
6262
});
6363

6464
// Ignore errors
65-
stream.on('error', () => {});
65+
stream.on('error', (err) => {
66+
debug('[stream error]', err);
67+
});
6668
}
6769
util.inherits(SessionOutput, EventEmitter);
6870

@@ -104,34 +106,32 @@ SessionOutput.prototype.wait = function wait(regexp, callback, allLines) {
104106
self._unqueueWait();
105107
done = true;
106108

107-
callback(allLines ? lines : line);
109+
callback(null, allLines ? lines : line);
108110
}
109111

110112
let done = false;
111-
let timePassed = 0;
112-
const interval = 100;
113-
const check = setInterval(() => {
114-
timePassed += interval;
113+
const check = setTimeout(() => {
115114
if (done)
116-
clearInterval(check);
117-
118-
if (timePassed > self.timeout) {
119-
self.removeListener('line', onLine);
120-
self._unqueueWait();
121-
const message = `Test timeout in ${this.timeout} ` +
122-
`waiting for ${regexp}\n` +
123-
`\n${'='.repeat(10)} lldb output ${'='.repeat(10)}\n` +
124-
`\n${lines.join('\n')}` +
125-
`\n${'='.repeat(30)}\n`;
126-
throw new Error(message);
127-
}
128-
}, interval);
115+
return;
116+
117+
self.removeListener('line', onLine);
118+
self._unqueueWait();
119+
console.error(`${'='.repeat(10)} lldb output ${'='.repeat(10)}`);
120+
console.error(lines.join('\n'));
121+
console.error('='.repeat(33));
122+
const message = `Test timeout in ${this.timeout} ` +
123+
`waiting for ${regexp}`;
124+
callback(new Error(message));
125+
}, this.timeout).unref();
129126

130127
this.on('line', onLine);
131128
};
132129

133130
SessionOutput.prototype.waitBreak = function waitBreak(callback) {
134-
this.wait(/Process \d+ stopped/i, () => {
131+
this.wait(/Process \d+ stopped/i, (err) => {
132+
if (err)
133+
return callback(err);
134+
135135
// Do not resume immediately since the process would print
136136
// the instructions out and input sent before the stdout finish
137137
// could be lost

test/frame-test.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ tape('v8 stack', (t) => {
88
t.timeoutAfter(15000);
99

1010
const sess = common.Session.create('frame-scenario.js');
11-
sess.waitBreak(() => {
11+
sess.waitBreak((err) => {
12+
t.error(err);
1213
sess.send('v8 bt');
1314
});
1415

15-
sess.linesUntil(/eyecatcher/, (lines) => {
16+
sess.linesUntil(/eyecatcher/, (err, lines) => {
17+
t.error(err);
1618
lines.reverse();
1719
t.ok(lines.length > 4, 'frame count');
1820
// FIXME(bnoordhuis) This can fail with versions of lldb that don't

test/inspect-test.js

Lines changed: 55 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@ tape('v8 inspect', (t) => {
99

1010
const sess = common.Session.create('inspect-scenario.js');
1111

12-
sess.waitBreak(() => {
12+
sess.waitBreak((err) => {
13+
t.error(err);
1314
sess.send('v8 bt');
1415
});
1516

1617
let that = null;
1718
let fn = null;
1819

19-
sess.wait(/inspect-scenario.js/, (line) => {
20+
sess.wait(/inspect-scenario.js/, (err, line) => {
21+
t.error(err);
2022
let match = line.match(/method\(this=(0x[0-9a-f]+)[^\n]+fn=(0x[0-9a-f]+)/i);
2123
t.ok(match, 'method should have `this`');
2224

@@ -28,11 +30,13 @@ tape('v8 inspect', (t) => {
2830

2931
let hashmap = null;
3032

31-
sess.wait(/Class/, (line) => {
33+
sess.wait(/Class/, (err, line) => {
34+
t.error(err);
3235
t.notEqual(line.indexOf(that), -1, 'addr of `Class` should match');
3336
});
3437

35-
sess.linesUntil(/}>/, (lines) => {
38+
sess.linesUntil(/}>/, (err, lines) => {
39+
t.error(err);
3640
lines = lines.join('\n');
3741
t.ok(/x=<Smi: 1>/.test(lines), '.x smi property');
3842
t.ok(/y=123.456/.test(lines), '.y heap number property');
@@ -57,11 +61,13 @@ tape('v8 inspect', (t) => {
5761
let uint8Array = null;
5862
let buffer = null;
5963

60-
sess.wait(/Object/, (line) => {
64+
sess.wait(/Object/, (err, line) => {
65+
t.error(err);
6166
t.notEqual(line.indexOf(hashmap), -1, 'addr of `Object` should match');
6267
});
6368

64-
sess.linesUntil(/}>/, (lines) => {
69+
sess.linesUntil(/}>/, (err, lines) => {
70+
t.error(err);
6571
lines = lines.join('\n');
6672
t.ok(/\[0\]=[^\n]*null/.test(lines), '[0] null element');
6773
t.ok(/\[4\]=[^\n]*undefined/.test(lines), '[4] undefined element');
@@ -135,14 +141,16 @@ tape('v8 inspect', (t) => {
135141
sess.send(`v8 inspect -F ${cons}`);
136142
});
137143

138-
sess.linesUntil(/}>/, (lines) => {
144+
sess.linesUntil(/}>/, (err, lines) => {
145+
t.error(err);
139146
lines = lines.join('\n');
140147
t.ok(/source=\/regexp\//.test(lines) ||
141148
/\.source=[^\n]*<String: "regexp">/.test(lines),
142149
'regexp.source');
143150
});
144151

145-
sess.linesUntil(/">/, (lines) => {
152+
sess.linesUntil(/">/, (err, lines) => {
153+
t.error(err);
146154
lines = lines.join('\n');
147155
t.notEqual(
148156
lines.indexOf('this could be a bit smaller, but v8 wants big str.' +
@@ -153,7 +161,8 @@ tape('v8 inspect', (t) => {
153161
sess.send(`v8 inspect --string-length 20 ${cons}`);
154162
});
155163

156-
sess.linesUntil(/">/, (lines) => {
164+
sess.linesUntil(/">/, (err, lines) => {
165+
t.error(err);
157166
lines = lines.join('\n');
158167
t.notEqual(
159168
lines.indexOf('this could be a bit ...'),
@@ -163,7 +172,8 @@ tape('v8 inspect', (t) => {
163172
sess.send(`v8 inspect ${thin}`);
164173
});
165174

166-
sess.linesUntil(/">/, (lines) => {
175+
sess.linesUntil(/">/, (err, lines) => {
176+
t.error(err);
167177
lines = lines.join('\n');
168178
t.ok(
169179
/0x[0-9a-f]+:<String: "foobar">/.test(lines),
@@ -172,7 +182,8 @@ tape('v8 inspect', (t) => {
172182
sess.send(`v8 inspect ${array}`);
173183
});
174184

175-
sess.linesUntil(/}>/, (lines) => {
185+
sess.linesUntil(/}>/, (err, lines) => {
186+
t.error(err);
176187
lines = lines.join('\n');
177188
t.notEqual(
178189
lines.indexOf('<Array: length=6'),
@@ -184,7 +195,8 @@ tape('v8 inspect', (t) => {
184195
sess.send(`v8 inspect --array-length 10 ${longArray}`);
185196
});
186197

187-
sess.linesUntil(/}>/, (lines) => {
198+
sess.linesUntil(/}>/, (err, lines) => {
199+
t.error(err);
188200
lines = lines.join('\n');
189201
t.notEqual(
190202
lines.indexOf('<Array: length=20'),
@@ -194,7 +206,8 @@ tape('v8 inspect', (t) => {
194206
sess.send(`v8 inspect ${arrayBuffer}`);
195207
});
196208

197-
sess.linesUntil(/\]>/, (lines) => {
209+
sess.linesUntil(/\]>/, (err, lines) => {
210+
t.error(err);
198211
lines = lines.join('\n');
199212
const re = new RegExp(
200213
'0x[0-9a-f]+:' +
@@ -207,7 +220,8 @@ tape('v8 inspect', (t) => {
207220
sess.send(`v8 inspect --array-length 1 ${arrayBuffer}`);
208221
});
209222

210-
sess.linesUntil(/]>/, (lines) => {
223+
sess.linesUntil(/]>/, (err, lines) => {
224+
t.error(err);
211225
lines = lines.join('\n');
212226
const re = new RegExp(
213227
'0x[0-9a-f]+:' +
@@ -220,7 +234,8 @@ tape('v8 inspect', (t) => {
220234
sess.send(`v8 inspect ${uint8Array}`);
221235
});
222236

223-
sess.linesUntil(/]>/, (lines) => {
237+
sess.linesUntil(/]>/, (err, lines) => {
238+
t.error(err);
224239
lines = lines.join('\n');
225240
const re = new RegExp(
226241
'0x[0-9a-f]+:' +
@@ -234,7 +249,8 @@ tape('v8 inspect', (t) => {
234249
sess.send(`v8 inspect --array-length 1 ${uint8Array}`);
235250
});
236251

237-
sess.linesUntil(/]>/, (lines) => {
252+
sess.linesUntil(/]>/, (err, lines) => {
253+
t.error(err);
238254
lines = lines.join('\n');
239255
const re = new RegExp(
240256
'0x[0-9a-f]+:' +
@@ -248,7 +264,8 @@ tape('v8 inspect', (t) => {
248264
sess.send(`v8 inspect ${buffer}`);
249265
});
250266

251-
sess.linesUntil(/]>/, (lines) => {
267+
sess.linesUntil(/]>/, (err, lines) => {
268+
t.error(err);
252269
lines = lines.join('\n');
253270
const re = new RegExp(
254271
'0x[0-9a-f]+:' +
@@ -262,7 +279,8 @@ tape('v8 inspect', (t) => {
262279
sess.send(`v8 inspect --array-length 1 ${buffer}`);
263280
});
264281

265-
sess.linesUntil(/]>/, (lines) => {
282+
sess.linesUntil(/]>/, (err, lines) => {
283+
t.error(err);
266284
lines = lines.join('\n');
267285
const re = new RegExp(
268286
'0x[0-9a-f]+:' +
@@ -277,7 +295,8 @@ tape('v8 inspect', (t) => {
277295
});
278296

279297

280-
sess.linesUntil(/^>/, (lines) => {
298+
sess.linesUntil(/^>/, (err, lines) => {
299+
t.error(err);
281300
lines = lines.join('\n');
282301
// Include 'source:' and '>' to act as boundaries. (Avoid
283302
// passing if the whole file it displayed instead of just
@@ -293,7 +312,8 @@ tape('v8 inspect', (t) => {
293312
sess.send(`v8 inspect -s ${fn}`);
294313
});
295314

296-
sess.linesUntil(/^>/, (lines) => {
315+
sess.linesUntil(/^>/, (err, lines) => {
316+
t.error(err);
297317
lines = lines.join('\n');
298318

299319
// Include 'source:' and '>' to act as boundaries. (Avoid
@@ -331,17 +351,21 @@ tape('v8 inspect', (t) => {
331351
}
332352
});
333353

334-
sess.linesUntil(/}>/, (lines) => {
335-
lines = lines.join('\n');
336-
t.ok(/internal fields/.test(lines), 'method.scopedAPI.internalFields');
337-
});
354+
if (process.version >= 'v5.0.0') {
355+
sess.linesUntil(/}>/, (err, lines) => {
356+
t.error(err);
357+
lines = lines.join('\n');
358+
t.ok(/internal fields/.test(lines), 'method.scopedAPI.internalFields');
359+
});
338360

339-
sess.linesUntil(/}>/, (lines) => {
340-
lines = lines.join('\n');
341-
t.ok(/outerVar[^\n]+"outer variable"/.test(lines),
342-
'method.closure.outerVar');
361+
sess.linesUntil(/}>/, (err, lines) => {
362+
t.error(err);
363+
lines = lines.join('\n');
364+
t.ok(/outerVar[^\n]+"outer variable"/.test(lines),
365+
'method.closure.outerVar');
343366

344-
sess.quit();
345-
t.end();
346-
});
367+
sess.quit();
368+
t.end();
369+
});
370+
}
347371
});

0 commit comments

Comments
 (0)