cursorless
cursorless copied to clipboard
neovim: catch neovim failed tests on CI from nvim exit code
Atm we detect success or failure for the tests on CI by parsing the log file and searching for the line ==== TESTS FINISHED: code:. It would be more bullet proof to actually rely on the nvim exit code. See commented code below for ideas to implement it.
//packages\test-harness\src\launchNeovimAndRunTests.ts
tailTest.on("line", function (data: string) {
console.log(`neovim test: ${data}`);
if (data.includes("==== TESTS FINISHED:")) {
done = true;
console.log(`done: ${done}`);
const found = data.match(/.*==== TESTS FINISHED: code: (\d+).*/);
console.log(`found: ${found}`);
if (found !== null) {
code = parseInt(found[1]);
console.log(`code: ${code}`);
}
}
//packages\test-harness\src\runners\extensionTestsNeovim.ts
export async function run(plugin: NvimPlugin): Promise<void> {
/**
* We need to pass the neovim client to the tests that are executed through mocha,
* so we add it to the global object.
* @see https://github.com/mochajs/mocha/issues/3780#issuecomment-583064196
* @see https://stackoverflow.com/questions/69427050/how-to-extend-globalthis-global-type
*/
const client = plugin.nvim as NeovimClient;
(global as any).additionalParameters = {
client: client,
};
let code = 0;
try {
await runAllTests(TestType.neovim, TestType.unit);
console.log(`==== TESTS FINISHED: code: ${code}`);
// console.log(`index.ts: killing neovim with q!`);
// await client.command(":q!");
} catch (error) {
console.log(`==== TESTS ERROR:`);
console.error(error);
code = 1;
console.log(`==== TESTS FINISHED: code: ${code}`);
// https://stackoverflow.com/questions/11828270/how-do-i-exit-vim
// console.log(`index.ts: killing neovim with cq!`);
// await client.command(":cq!");
}
// XXX: launchNeovimAndRunTests.ts will catch neovim exit code on CI
// console.log(`index.ts: killing neovim with code ${code}`);
}