UNPKG

apex-code-coverage-transformer

Version:

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

97 lines 3.31 kB
'use strict'; import { BaseHandler } from './BaseHandler.js'; import { HandlerRegistry } from './HandlerRegistry.js'; /** * Handler for generating Clover XML coverage reports. * * Clover is a code coverage tool commonly used with Atlassian tools. * * Compatible with: * - Bamboo * - Bitbucket * - Jenkins * - Atlassian tools * * @see https://openclover.org/ */ export class CloverCoverageHandler extends BaseHandler { coverageObj; constructor() { super(); this.coverageObj = { coverage: { '@generated': Date.now(), '@clover': '3.2.0', project: { '@timestamp': Date.now(), '@name': 'All files', metrics: { '@statements': 0, '@coveredstatements': 0, '@conditionals': 0, '@coveredconditionals': 0, '@methods': 0, '@coveredmethods': 0, '@elements': 0, '@coveredelements': 0, '@complexity': 0, '@loc': 0, '@ncloc': 0, '@packages': 1, '@files': 0, '@classes': 0, }, file: [], }, }, }; } processFile(filePath, fileName, lines) { const { totalLines, coveredLines } = this.calculateCoverage(lines); const fileObj = { '@name': fileName, '@path': filePath, metrics: { '@statements': totalLines, '@coveredstatements': coveredLines, '@conditionals': 0, '@coveredconditionals': 0, '@methods': 0, '@coveredmethods': 0, }, line: [], }; for (const [lineNumber, isCovered] of Object.entries(lines)) { fileObj.line.push({ '@num': Number(lineNumber), '@count': isCovered === 1 ? 1 : 0, '@type': 'stmt', }); } this.coverageObj.coverage.project.file.push(fileObj); const projectMetrics = this.coverageObj.coverage.project.metrics; projectMetrics['@statements'] += totalLines; projectMetrics['@coveredstatements'] += coveredLines; projectMetrics['@elements'] += totalLines; projectMetrics['@coveredelements'] += coveredLines; projectMetrics['@files'] += 1; projectMetrics['@classes'] += 1; projectMetrics['@loc'] += totalLines; projectMetrics['@ncloc'] += totalLines; } finalize() { if (this.coverageObj.coverage?.project?.file) { this.coverageObj.coverage.project.file = this.sortByPath(this.coverageObj.coverage.project.file); } return this.coverageObj; } } // Self-register this handler HandlerRegistry.register({ name: 'clover', description: 'Clover XML format for Atlassian tools', fileExtension: '.xml', handler: () => new CloverCoverageHandler(), compatibleWith: ['Bamboo', 'Bitbucket', 'Jenkins'], }); //# sourceMappingURL=clover.js.map