mirror of
https://github.com/Microsoft/vscode
synced 2024-10-01 08:50:48 +00:00
fix incomplete coverage reports on macos (#212639)
* eng: fix incomplete coverage reports on macos Wait for stdout to drain before exiting * better fix
This commit is contained in:
parent
39fc2dfefa
commit
358a3a65d3
|
@ -315,14 +315,18 @@ app.on('ready', () => {
|
|||
}
|
||||
});
|
||||
|
||||
const reporters = [];
|
||||
|
||||
if (args.tfs) {
|
||||
new mocha.reporters.Spec(runner);
|
||||
new MochaJUnitReporter(runner, {
|
||||
reporterOptions: {
|
||||
testsuitesTitle: `${args.tfs} ${process.platform}`,
|
||||
mochaFile: process.env.BUILD_ARTIFACTSTAGINGDIRECTORY ? path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${args.tfs.toLowerCase().replace(/[^\w]/g, '-')}-results.xml`) : undefined
|
||||
}
|
||||
});
|
||||
reporters.push(
|
||||
new mocha.reporters.Spec(runner),
|
||||
new MochaJUnitReporter(runner, {
|
||||
reporterOptions: {
|
||||
testsuitesTitle: `${args.tfs} ${process.platform}`,
|
||||
mochaFile: process.env.BUILD_ARTIFACTSTAGINGDIRECTORY ? path.join(process.env.BUILD_ARTIFACTSTAGINGDIRECTORY, `test-results/${process.platform}-${process.arch}-${args.tfs.toLowerCase().replace(/[^\w]/g, '-')}-results.xml`) : undefined
|
||||
}
|
||||
}),
|
||||
);
|
||||
} else {
|
||||
// mocha patches symbols to use windows escape codes, but it seems like
|
||||
// Electron mangles these in its output.
|
||||
|
@ -334,10 +338,13 @@ app.on('ready', () => {
|
|||
});
|
||||
}
|
||||
|
||||
applyReporter(runner, args);
|
||||
reporters.push(applyReporter(runner, args));
|
||||
}
|
||||
|
||||
if (!args.dev) {
|
||||
ipcMain.on('all done', () => app.exit(runner.didFail ? 1 : 0));
|
||||
ipcMain.on('all done', async () => {
|
||||
await Promise.all(reporters.map(r => r.drain?.()));
|
||||
app.exit(runner.didFail ? 1 : 0);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
@ -26,15 +26,15 @@ module.exports = class FullJsonStreamReporter extends BaseRunner {
|
|||
super(runner, options);
|
||||
|
||||
const total = runner.total;
|
||||
runner.once(EVENT_RUN_BEGIN, () => writeEvent(['start', { total }]));
|
||||
runner.once(EVENT_RUN_END, () => writeEvent(['end', this.stats]));
|
||||
runner.once(EVENT_RUN_BEGIN, () => this.writeEvent(['start', { total }]));
|
||||
runner.once(EVENT_RUN_END, () => this.writeEvent(['end', this.stats]));
|
||||
|
||||
// custom coverage events:
|
||||
runner.on('coverage init', (c) => writeEvent(['coverageInit', c]));
|
||||
runner.on('coverage increment', (context, coverage) => writeEvent(['coverageIncrement', { ...context, coverage }]));
|
||||
runner.on('coverage init', (c) => this.writeEvent(['coverageInit', c]));
|
||||
runner.on('coverage increment', (context, coverage) => this.writeEvent(['coverageIncrement', { ...context, coverage }]));
|
||||
|
||||
runner.on(EVENT_TEST_BEGIN, test => writeEvent(['testStart', clean(test)]));
|
||||
runner.on(EVENT_TEST_PASS, test => writeEvent(['pass', clean(test)]));
|
||||
runner.on(EVENT_TEST_BEGIN, test => this.writeEvent(['testStart', clean(test)]));
|
||||
runner.on(EVENT_TEST_PASS, test => this.writeEvent(['pass', clean(test)]));
|
||||
runner.on(EVENT_TEST_FAIL, (test, err) => {
|
||||
test = clean(test);
|
||||
test.actual = err.actual;
|
||||
|
@ -44,14 +44,18 @@ module.exports = class FullJsonStreamReporter extends BaseRunner {
|
|||
test.snapshotPath = err.snapshotPath;
|
||||
test.err = err.message;
|
||||
test.stack = err.stack || null;
|
||||
writeEvent(['fail', test]);
|
||||
this.writeEvent(['fail', test]);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
function writeEvent(event) {
|
||||
process.stdout.write(JSON.stringify(event) + '\n');
|
||||
}
|
||||
drain() {
|
||||
return Promise.resolve(this.lastEvent);
|
||||
}
|
||||
|
||||
writeEvent(event) {
|
||||
this.lastEvent = new Promise(r => process.stdout.write(JSON.stringify(event) + '\n', r));
|
||||
}
|
||||
};
|
||||
|
||||
const clean = test => ({
|
||||
title: test.title,
|
||||
|
|
Loading…
Reference in a new issue