Skip to content

Commit d69ad2a

Browse files
committed
test: stop on fatal errors in run_web_version.js
1 parent 3b0da67 commit d69ad2a

File tree

2 files changed

+57
-9
lines changed

2 files changed

+57
-9
lines changed

web/tests/run_replay.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,18 @@ async function runReplay(zplay) {
3838
process.stderr.write('\n');
3939
hasExited = true;
4040
});
41-
page.on('console', e => {
41+
page.on('console', async (e) => {
4242
const type = e.type();
43-
const text = e.text();
43+
const args = await Promise.all(e.args().map(arg => page.evaluate(arg => {
44+
if (arg instanceof Error)
45+
return arg.message;
46+
return arg;
47+
}, arg).catch((e) => {
48+
console.error('error in run_replay.js', e);
49+
return '???';
50+
})));
51+
const text = args.join(' ');
52+
4453
if (type === 'error' || type === 'warning') {
4554
process.stderr.write(text);
4655
process.stderr.write('\n');

web/tests/run_web_version.js

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,27 +57,67 @@ for (const [key, value] of Object.entries(processedArgs)) {
5757
}
5858

5959
async function run() {
60+
console.log(openUrl.href);
6061
const browser = await puppeteer.launch({
6162
headless: openUrl.searchParams.has('headless') ? 'new' : false,
6263
});
6364
const page = await browser.newPage();
65+
let hasExited = false;
66+
let exitCode = -1;
67+
const onClose = async () => {
68+
await browser.close();
69+
await server.server.close();
70+
};
6471

6572
const consoleListener = setupConsoleListener(page);
66-
page.on('console', e => {
73+
page.on('pageerror', e => {
74+
process.stderr.write(e.toString());
75+
process.stderr.write(e.stack);
76+
process.stderr.write('\n');
77+
hasExited = true;
78+
});
79+
80+
page.on('console', async (e) => {
6781
const type = e.type();
82+
const args = await Promise.all(e.args().map(arg => page.evaluate(arg => {
83+
if (arg instanceof Error) {
84+
return arg.message + '\n' + arg.stack;
85+
}
86+
return arg;
87+
}, arg).catch((e) => {
88+
console.error('error in run_web_version.js', e);
89+
return '???';
90+
})));
91+
const text = args.join(' ');
92+
6893
if (type === 'error' || type === 'warning') {
69-
console.error(e.text());
94+
process.stderr.write(text);
95+
process.stderr.write('\n');
7096
} else {
71-
console.log(e.text());
97+
process.stdout.write(text);
98+
process.stdout.write('\n');
99+
}
100+
101+
const bad = [
102+
'worker sent an error',
103+
'ERR_BLOCKED_BY_RESPONSE',
104+
'ERR_CONNECTION_RESET',
105+
// shutdown_timers
106+
// failed: _al_vector_size(&active_timers) == 0, at: /Users/connorclark/code/ZeldaClassic-secondary/build_emscripten/_deps/allegro5-src/src/timernu.c,146,shutdown_timers
107+
'Uncaught RuntimeError',
108+
'Aborted(native code called abort())',
109+
'Assert failed',
110+
];
111+
if (bad.some(t => text.includes(t))) {
112+
onClose();
113+
process.exit(1);
72114
}
73115
});
74116

75117
await page.goto(openUrl, {
76118
waitUntil: 'networkidle2',
77119
});
78120

79-
let hasExited = false;
80-
let exitCode = -1;
81121
consoleListener.waitFor(/exit with code:/).then(text => {
82122
hasExited = true;
83123
exitCode = Number(text.replace('exit with code:', ''));
@@ -96,8 +136,7 @@ async function run() {
96136
console.log(allegroLog);
97137
}
98138

99-
await browser.close();
100-
await server.server.close();
139+
await onClose();
101140

102141
return exitCode;
103142
}

0 commit comments

Comments
 (0)