UNPKG

sonar-js-coverage-convertor

Version:

Convert Istanbul coverage reports to SonarQube Generic Data format for Polymer app usage

97 lines (81 loc) 2.23 kB
#!/usr/bin/env node // @flow "use strict"; const { Builder } = require("xml2js"); /* <coverage version="1"> <file path="xources/hello/NoConditions.xoo"> <lineToCover lineNumber="6" covered="true"/> <lineToCover lineNumber="7" covered="false"/> </file> <file path="xources/hello/WithConditions.xoo"> <lineToCover lineNumber="3" covered="true" branchesToCover="2" coveredBranches="1"/> </file> </coverage> */ module.exports = (jsObjContent) => { // if it includes 0 files, package will be `undefined` const reportStruct = getReportStruct(); const reportXml = `<coverage version="1"> ${reportStruct} </coverage>`; return reportXml; function getReportStruct () { const jsCoverageData = jsObjContent.coverage.project; try { return jsCoverageData .find(project => project.metrics).metrics .find(metric => metric.package).package .map(pkg => pkg.file) .map(mapReportStruct) .map(buildXmlFromObj) .join("\n"); } catch (err) { console.error("Error creating coverage \n\t", err, "\ntrying again"); try { return jsCoverageData .find(project => project.package).package .map(pkg => pkg.file) .map(mapReportStruct) .map(buildXmlFromObj) .join("\n"); } catch (err) { throw err; } } } function buildXmlFromObj (objForXml) { return new Builder({ headless: true, explicitRoot: false }).buildObject(objForXml); } function mapReportStruct (srcObj) { srcObj = srcObj[0]; return { file: { $: { path: srcObj.$.path // path: "../".concat(/src-client.+/g.exec(srcObj.$.path)[0]) }, lineToCover: srcObj.line.map(line => { line = line.$; // $ indicates an attribute assignment const lineObj = { $: { lineNumber: line.num, covered: !!parseInt(line.count) // line.count === 0 || 1 === "covered" || "not-covered" } }; if (line.type === "cond") { let totalLinesToCover = parseInt(line.truecount) + parseInt(line.falsecount, 10); let linesCovered = totalLinesToCover - parseInt(line.truecount); lineObj.$.branchesToCover = totalLinesToCover; lineObj.$.coveredBranches = linesCovered; } return lineObj; }) } }; } };