update to finalize api

This commit is contained in:
Connor Peet
2024-03-27 11:29:31 -07:00
parent be3ef98e19
commit 1e6b9bb2cb
4 changed files with 28 additions and 226 deletions

View File

@ -96,27 +96,15 @@ export async function activate(context: vscode.ExtensionContext) {
const fileCoverage = coveredLines.get(test.uri!.toString());
const lineInfo = fileCoverage?.[lineNo];
if (lineInfo) {
lineInfo.executionCount++;
(lineInfo.executed as number)++;
}
run.appendOutput(`Completed ${test.id}\r\n`);
}
run.coverageProvider = {
provideFileCoverage() {
const coverage: vscode.FileCoverage[] = [];
for (const [uri, statements] of coveredLines) {
coverage.push(
vscode.FileCoverage.fromDetails(
vscode.Uri.parse(uri),
statements.filter((s): s is vscode.StatementCoverage => !!s)
)
);
}
return coverage;
},
};
for (const [uri, statements] of coveredLines) {
run.addCoverage(new MarkdownFileCoverage(uri, statements));
}
run.end();
};
@ -128,7 +116,15 @@ export async function activate(context: vscode.ExtensionContext) {
await Promise.all(getWorkspaceTestPatterns().map(({ pattern }) => findInitialFiles(ctrl, pattern)));
};
ctrl.createRunProfile('Run Tests', vscode.TestRunProfileKind.Run, runHandler, true, undefined, true);
const profile = ctrl.createRunProfile('Run Tests', vscode.TestRunProfileKind.Run, runHandler, true, undefined, true);
profile.loadDetailedCoverage = async (_testRun, coverage) => {
if (coverage instanceof MarkdownFileCoverage) {
return coverage.coveredLines.filter((l): l is vscode.StatementCoverage => !!l);
}
return [];
};
ctrl.resolveHandler = async item => {
if (!item) {
@ -226,3 +222,15 @@ function startWatchingWorkspace(controller: vscode.TestController, fileChangedEm
return watcher;
});
}
class MarkdownFileCoverage extends vscode.FileCoverage {
constructor(uri: string, public readonly coveredLines: (vscode.StatementCoverage | undefined)[]) {
super(vscode.Uri.parse(uri), new vscode.TestCoverageCount(0, 0));
for (const line of coveredLines) {
if (line) {
this.statementCoverage.covered += line.executed ? 1 : 0;
this.statementCoverage.total++;
}
}
}
}