UNPKG

apex-code-coverage-transformer

Version:

Transform Salesforce Apex code coverage JSONs into other formats accepted by SonarQube, GitHub, GitLab, Azure, Bitbucket, etc.

87 lines 2.98 kB
'use strict'; export class JaCoCoCoverageHandler { coverageObj; packageMap; constructor() { this.coverageObj = { report: { '@name': 'JaCoCo', package: [], counter: [], }, }; this.packageMap = {}; // Stores packages by directory } processFile(filePath, fileName, lines) { const pathParts = filePath.split('/'); const fileNamewithExt = pathParts.pop(); const packageName = pathParts.join('/'); const packageObj = this.getOrCreatePackage(packageName); // Ensure source file only contains the filename, not the full path const sourceFileObj = { '@name': fileNamewithExt, line: [], counter: [], }; let coveredLines = 0; let totalLines = 0; for (const [lineNumber, isCovered] of Object.entries(lines)) { totalLines++; if (isCovered === 1) coveredLines++; const lineObj = { '@nr': Number(lineNumber), '@mi': isCovered === 0 ? 1 : 0, '@ci': isCovered === 1 ? 1 : 0, '@mb': 0, '@cb': 0, }; sourceFileObj.line.push(lineObj); } // Add line coverage counter for the source file sourceFileObj.counter.push({ '@type': 'LINE', '@missed': totalLines - coveredLines, '@covered': coveredLines, }); packageObj.sourcefile.push(sourceFileObj); } finalize() { let overallCovered = 0; let overallMissed = 0; for (const packageObj of Object.values(this.packageMap)) { packageObj.sourcefile.sort((a, b) => a['@name'].localeCompare(b['@name'])); let packageCovered = 0; let packageMissed = 0; for (const sf of packageObj.sourcefile) { packageCovered += sf.counter[0]['@covered']; packageMissed += sf.counter[0]['@missed']; } packageObj.counter.push({ '@type': 'LINE', '@missed': packageMissed, '@covered': packageCovered, }); overallCovered += packageCovered; overallMissed += packageMissed; } this.coverageObj.report.counter.push({ '@type': 'LINE', '@missed': overallMissed, '@covered': overallCovered, }); return this.coverageObj; } getOrCreatePackage(packageName) { if (!this.packageMap[packageName]) { this.packageMap[packageName] = { '@name': packageName, sourcefile: [], counter: [], }; this.coverageObj.report.package.push(this.packageMap[packageName]); } return this.packageMap[packageName]; } } //# sourceMappingURL=jacoco.js.map