Skip to content

Commit

Permalink
fix: cobertura reports in root folder (#571)
Browse files Browse the repository at this point in the history
  • Loading branch information
bitcloud committed Oct 13, 2021
1 parent e7c2874 commit 596f6ff
Show file tree
Hide file tree
Showing 11 changed files with 433 additions and 10 deletions.
13 changes: 7 additions & 6 deletions packages/istanbul-reports/lib/cobertura/index.js
Expand Up @@ -11,8 +11,11 @@ class CoberturaReport extends ReportBase {
constructor(opts) {
super();

opts = opts || {};

this.cw = null;
this.xml = null;
this.timestamp = opts.timestamp || Date.now().toString();
this.projectRoot = opts.projectRoot || process.cwd();
this.file = opts.file || 'cobertura-coverage.xml';
}
Expand Down Expand Up @@ -41,7 +44,7 @@ class CoberturaReport extends ReportBase {
'branches-valid': metrics.branches.total,
'branches-covered': metrics.branches.covered,
'branch-rate': metrics.branches.pct / 100.0,
timestamp: Date.now().toString(),
timestamp: this.timestamp,
complexity: '0',
version: '0.1'
});
Expand All @@ -52,23 +55,21 @@ class CoberturaReport extends ReportBase {
}

onSummary(node) {
if (node.isRoot()) {
return;
}
const metrics = node.getCoverageSummary(true);
if (!metrics) {
return;
}
this.xml.openTag('package', {
name: escape(asJavaPackage(node)),
name: node.isRoot() ? 'main' : escape(asJavaPackage(node)),
'line-rate': metrics.lines.pct / 100.0,
'branch-rate': metrics.branches.pct / 100.0
});
this.xml.openTag('classes');
}

onSummaryEnd(node) {
if (node.isRoot()) {
const metrics = node.getCoverageSummary(true);
if (!metrics) {
return;
}
this.xml.closeTag('classes');
Expand Down
57 changes: 57 additions & 0 deletions packages/istanbul-reports/test/cobertura/index.js
@@ -0,0 +1,57 @@
'use strict';
/* globals describe, it, beforeEach, before, after */
const fs = require('fs');
const path = require('path');
const isWindows = require('is-windows');
const FileWriter = require('istanbul-lib-report/lib/file-writer');
const istanbulLibReport = require('istanbul-lib-report');
const istanbulLibCoverage = require('istanbul-lib-coverage');
const CoberturaReport = require('../../lib/cobertura/index');

require('chai').should();

describe('CoberturaReport', () => {
before(() => {
FileWriter.startCapture();
});
after(() => {
FileWriter.stopCapture();
});
beforeEach(() => {
FileWriter.resetOutput();
});

function createTest(file) {
const fixture = require(path.resolve(
__dirname,
'../fixtures/specs/' + file
));
it(fixture.title, function() {
if (isWindows()) {
// appveyor does not render console color.
return this.skip();
}
const context = istanbulLibReport.createContext({
dir: './',
coverageMap: istanbulLibCoverage.createCoverageMap(fixture.map)
});
const tree = context.getTree('pkg');
const report = new CoberturaReport({
file: '-',
timestamp: '123456789',
...fixture.opts
});
tree.visit(report, context);
const output = FileWriter.getOutput();
output.should.equal(fixture.coberturaCoverageData);
});
}

fs.readdirSync(path.resolve(__dirname, '../fixtures/specs')).forEach(
file => {
if (file.indexOf('.json') !== -1) {
createTest(file);
}
}
);
});
@@ -1,5 +1,9 @@
{
"title": "handles 100% branch and line coverage",
"opts": {
"maxCols": 80,
"projectRoot": "/Users/benjamincoe/oss/"
},
"textReportExpected": "----------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|-------------------\n\u001b[32;1mAll files\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m \u001b[0m \n\u001b[32;1m index.js\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m \u001b[0m \n----------|---------|----------|---------|---------|-------------------\n",
"htmlSpaFiles": ["index.js.html", "index.html"],
"htmlSpaCoverageData": {
Expand Down Expand Up @@ -81,6 +85,7 @@
}
]
},
"coberturaCoverageData": "<?xml version=\"1.0\" ?>\n<!DOCTYPE coverage SYSTEM \"http://cobertura.sourceforge.net/xml/coverage-04.dtd\">\n<coverage lines-valid=\"46\" lines-covered=\"46\" line-rate=\"1\" branches-valid=\"39\" branches-covered=\"39\" branch-rate=\"1\" timestamp=\"123456789\" complexity=\"0\" version=\"0.1\">\n <sources>\n <source>/Users/benjamincoe/oss/</source>\n </sources>\n <packages>\n <package name=\"main\" line-rate=\"1\" branch-rate=\"1\">\n <classes>\n <class name=\"index.js\" filename=\"test-exclude/index.js\" line-rate=\"1\" branch-rate=\"1\">\n <methods>\n <method name=\"TestExclude\" hits=\"21\" signature=\"()V\">\n <lines>\n <line number=\"12\" hits=\"21\"/>\n </lines>\n </method>\n <method name=\"(anonymous_1)\" hits=\"21\" signature=\"()V\">\n <lines>\n <line number=\"50\" hits=\"21\"/>\n </lines>\n </method>\n <method name=\"(anonymous_2)\" hits=\"95\" signature=\"()V\">\n <lines>\n <line number=\"52\" hits=\"95\"/>\n </lines>\n </method>\n <method name=\"(anonymous_3)\" hits=\"56\" signature=\"()V\">\n <lines>\n <line number=\"61\" hits=\"56\"/>\n </lines>\n </method>\n <method name=\"(anonymous_4)\" hits=\"7\" signature=\"()V\">\n <lines>\n <line number=\"71\" hits=\"7\"/>\n </lines>\n </method>\n <method name=\"prepGlobPatterns\" hits=\"26\" signature=\"()V\">\n <lines>\n <line number=\"84\" hits=\"26\"/>\n </lines>\n </method>\n <method name=\"(anonymous_6)\" hits=\"105\" signature=\"()V\">\n <lines>\n <line number=\"85\" hits=\"105\"/>\n </lines>\n </method>\n <method name=\"(anonymous_7)\" hits=\"21\" signature=\"()V\">\n <lines>\n <line number=\"100\" hits=\"21\"/>\n </lines>\n </method>\n </methods>\n <lines>\n <line number=\"1\" hits=\"1\" branch=\"false\"/>\n <line number=\"2\" hits=\"1\" branch=\"false\"/>\n <line number=\"3\" hits=\"1\" branch=\"false\"/>\n <line number=\"4\" hits=\"1\" branch=\"false\"/>\n <line number=\"5\" hits=\"1\" branch=\"false\"/>\n <line number=\"13\" hits=\"21\" branch=\"false\"/>\n <line number=\"21\" hits=\"21\" branch=\"true\" condition-coverage=\"100% (2/2)\"/>\n <line number=\"22\" hits=\"21\" branch=\"true\" condition-coverage=\"100% (2/2)\"/>\n <line number=\"24\" hits=\"21\" branch=\"true\" condition-coverage=\"100% (5/5)\"/>\n <line number=\"25\" hits=\"7\" branch=\"false\"/>\n <line number=\"28\" hits=\"21\" branch=\"true\" condition-coverage=\"100% (4/4)\"/>\n <line number=\"29\" hits=\"15\" branch=\"false\"/>\n <line number=\"32\" hits=\"21\" branch=\"true\" condition-coverage=\"100% (4/4)\"/>\n <line number=\"33\" hits=\"5\" branch=\"false\"/>\n <line number=\"35\" hits=\"16\" branch=\"false\"/>\n <line number=\"38\" hits=\"21\" branch=\"true\" condition-coverage=\"100% (4/4)\"/>\n <line number=\"39\" hits=\"5\" branch=\"false\"/>\n <line number=\"42\" hits=\"21\" branch=\"false\"/>\n <line number=\"50\" hits=\"1\" branch=\"false\"/>\n <line number=\"51\" hits=\"21\" branch=\"false\"/>\n <line number=\"52\" hits=\"21\" branch=\"false\"/>\n <line number=\"53\" hits=\"95\" branch=\"false\"/>\n <line number=\"55\" hits=\"95\" branch=\"true\" condition-coverage=\"100% (2/2)\"/>\n <line number=\"56\" hits=\"95\" branch=\"false\"/>\n <line number=\"58\" hits=\"21\" branch=\"false\"/>\n <line number=\"61\" hits=\"1\" branch=\"false\"/>\n <line number=\"62\" hits=\"56\" branch=\"true\" condition-coverage=\"100% (2/2)\"/>\n <line number=\"65\" hits=\"56\" branch=\"true\" condition-coverage=\"100% (2/2)\"/>\n <line number=\"67\" hits=\"55\" branch=\"false\"/>\n <line number=\"68\" hits=\"55\" branch=\"true\" condition-coverage=\"100% (3/3)\"/>\n <line number=\"71\" hits=\"1\" branch=\"false\"/>\n <line number=\"72\" hits=\"7\" branch=\"false\"/>\n <line number=\"76\" hits=\"7\" branch=\"true\" condition-coverage=\"100% (5/5)\"/>\n <line number=\"77\" hits=\"6\" branch=\"false\"/>\n <line number=\"78\" hits=\"6\" branch=\"false\"/>\n <line number=\"80\" hits=\"1\" branch=\"false\"/>\n <line number=\"85\" hits=\"26\" branch=\"false\"/>\n <line number=\"87\" hits=\"105\" branch=\"true\" condition-coverage=\"100% (2/2)\"/>\n <line number=\"88\" hits=\"39\" branch=\"false\"/>\n <line number=\"92\" hits=\"105\" branch=\"true\" condition-coverage=\"100% (2/2)\"/>\n <line number=\"93\" hits=\"50\" branch=\"false\"/>\n <line number=\"96\" hits=\"105\" branch=\"false\"/>\n <line number=\"100\" hits=\"1\" branch=\"false\"/>\n <line number=\"101\" hits=\"21\" branch=\"false\"/>\n <line number=\"104\" hits=\"1\" branch=\"false\"/>\n <line number=\"113\" hits=\"1\" branch=\"false\"/>\n </lines>\n </class>\n </classes>\n </package>\n </packages>\n</coverage>\n",
"map": {
"/Users/benjamincoe/oss/test-exclude/index.js": {
"path": "/Users/benjamincoe/oss/test-exclude/index.js",
Expand Down
@@ -1,6 +1,10 @@
{
"title": "100% line coverage, missing branch coverage",
"textReportExpected": "----------|---------|----------|---------|---------|-------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|-------------------\n\u001b[32;1mAll files\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 95.34\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m \u001b[0m \n\u001b[32;1m index.js\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 95.34\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[33;1m21,29 \u001b[0m \n----------|---------|----------|---------|---------|-------------------\n",
"opts": {
"maxCols": 80,
"projectRoot": "/Users/benjamincoe/oss/"
},
"htmlSpaFiles": ["index.js.html", "index.html"],
"htmlSpaCoverageData": {
"file": "",
Expand Down Expand Up @@ -81,6 +85,7 @@
}
]
},
"coberturaCoverageData": "<?xml version=\"1.0\" ?>\n<!DOCTYPE coverage SYSTEM \"http://cobertura.sourceforge.net/xml/coverage-04.dtd\">\n<coverage lines-valid=\"46\" lines-covered=\"46\" line-rate=\"1\" branches-valid=\"43\" branches-covered=\"41\" branch-rate=\"0.9534999999999999\" timestamp=\"123456789\" complexity=\"0\" version=\"0.1\">\n <sources>\n <source>/Users/benjamincoe/oss/</source>\n </sources>\n <packages>\n <package name=\"main\" line-rate=\"1\" branch-rate=\"0.9534999999999999\">\n <classes>\n <class name=\"index.js\" filename=\"test-exclude/index.js\" line-rate=\"1\" branch-rate=\"0.9534999999999999\">\n <methods>\n <method name=\"TestExclude\" hits=\"21\" signature=\"()V\">\n <lines>\n <line number=\"12\" hits=\"21\"/>\n </lines>\n </method>\n <method name=\"(anonymous_1)\" hits=\"21\" signature=\"()V\">\n <lines>\n <line number=\"50\" hits=\"21\"/>\n </lines>\n </method>\n <method name=\"(anonymous_2)\" hits=\"95\" signature=\"()V\">\n <lines>\n <line number=\"52\" hits=\"95\"/>\n </lines>\n </method>\n <method name=\"(anonymous_3)\" hits=\"56\" signature=\"()V\">\n <lines>\n <line number=\"61\" hits=\"56\"/>\n </lines>\n </method>\n <method name=\"(anonymous_4)\" hits=\"7\" signature=\"()V\">\n <lines>\n <line number=\"71\" hits=\"7\"/>\n </lines>\n </method>\n <method name=\"prepGlobPatterns\" hits=\"26\" signature=\"()V\">\n <lines>\n <line number=\"84\" hits=\"26\"/>\n </lines>\n </method>\n <method name=\"(anonymous_6)\" hits=\"105\" signature=\"()V\">\n <lines>\n <line number=\"85\" hits=\"105\"/>\n </lines>\n </method>\n <method name=\"(anonymous_7)\" hits=\"21\" signature=\"()V\">\n <lines>\n <line number=\"100\" hits=\"21\"/>\n </lines>\n </method>\n </methods>\n <lines>\n <line number=\"1\" hits=\"1\" branch=\"false\"/>\n <line number=\"2\" hits=\"1\" branch=\"false\"/>\n <line number=\"3\" hits=\"1\" branch=\"false\"/>\n <line number=\"4\" hits=\"1\" branch=\"false\"/>\n <line number=\"5\" hits=\"1\" branch=\"false\"/>\n <line number=\"13\" hits=\"21\" branch=\"false\"/>\n <line number=\"21\" hits=\"21\" branch=\"true\" condition-coverage=\"75% (3/4)\"/>\n <line number=\"22\" hits=\"21\" branch=\"true\" condition-coverage=\"100% (2/2)\"/>\n <line number=\"24\" hits=\"21\" branch=\"true\" condition-coverage=\"100% (5/5)\"/>\n <line number=\"25\" hits=\"7\" branch=\"false\"/>\n <line number=\"28\" hits=\"21\" branch=\"true\" condition-coverage=\"100% (4/4)\"/>\n <line number=\"29\" hits=\"15\" branch=\"true\" condition-coverage=\"50% (1/2)\"/>\n <line number=\"32\" hits=\"21\" branch=\"true\" condition-coverage=\"100% (4/4)\"/>\n <line number=\"33\" hits=\"5\" branch=\"false\"/>\n <line number=\"35\" hits=\"16\" branch=\"false\"/>\n <line number=\"38\" hits=\"21\" branch=\"true\" condition-coverage=\"100% (4/4)\"/>\n <line number=\"39\" hits=\"5\" branch=\"false\"/>\n <line number=\"42\" hits=\"21\" branch=\"false\"/>\n <line number=\"50\" hits=\"1\" branch=\"false\"/>\n <line number=\"51\" hits=\"21\" branch=\"false\"/>\n <line number=\"52\" hits=\"21\" branch=\"false\"/>\n <line number=\"53\" hits=\"95\" branch=\"false\"/>\n <line number=\"55\" hits=\"95\" branch=\"true\" condition-coverage=\"100% (2/2)\"/>\n <line number=\"56\" hits=\"95\" branch=\"false\"/>\n <line number=\"58\" hits=\"21\" branch=\"false\"/>\n <line number=\"61\" hits=\"1\" branch=\"false\"/>\n <line number=\"62\" hits=\"56\" branch=\"true\" condition-coverage=\"100% (2/2)\"/>\n <line number=\"65\" hits=\"56\" branch=\"true\" condition-coverage=\"100% (2/2)\"/>\n <line number=\"67\" hits=\"55\" branch=\"false\"/>\n <line number=\"68\" hits=\"55\" branch=\"true\" condition-coverage=\"100% (3/3)\"/>\n <line number=\"71\" hits=\"1\" branch=\"false\"/>\n <line number=\"72\" hits=\"7\" branch=\"false\"/>\n <line number=\"76\" hits=\"7\" branch=\"true\" condition-coverage=\"100% (5/5)\"/>\n <line number=\"77\" hits=\"6\" branch=\"false\"/>\n <line number=\"78\" hits=\"6\" branch=\"false\"/>\n <line number=\"80\" hits=\"1\" branch=\"false\"/>\n <line number=\"85\" hits=\"26\" branch=\"false\"/>\n <line number=\"87\" hits=\"105\" branch=\"true\" condition-coverage=\"100% (2/2)\"/>\n <line number=\"88\" hits=\"39\" branch=\"false\"/>\n <line number=\"92\" hits=\"105\" branch=\"true\" condition-coverage=\"100% (2/2)\"/>\n <line number=\"93\" hits=\"50\" branch=\"false\"/>\n <line number=\"96\" hits=\"105\" branch=\"false\"/>\n <line number=\"100\" hits=\"1\" branch=\"false\"/>\n <line number=\"101\" hits=\"21\" branch=\"false\"/>\n <line number=\"104\" hits=\"1\" branch=\"false\"/>\n <line number=\"113\" hits=\"1\" branch=\"false\"/>\n </lines>\n </class>\n </classes>\n </package>\n </packages>\n</coverage>\n",
"map": {
"/Users/benjamincoe/oss/test-exclude/index.js": {
"path": "/Users/benjamincoe/oss/test-exclude/index.js",
Expand Down
@@ -1,7 +1,8 @@
{
"title": "coalescense ranges of missing lines",
"opts": {
"maxCols": 80
"maxCols": 80,
"projectRoot": "/"
},
"textReportExpected": "----------|---------|----------|---------|---------|----------------------\nFile | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s \n----------|---------|----------|---------|---------|----------------------\n\u001b[31;1mAll files\u001b[0m | \u001b[31;1m 30\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[31;1m 33.33\u001b[0m | \u001b[31;1m \u001b[0m \n\u001b[31;1m index.js\u001b[0m | \u001b[31;1m 30\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[32;1m 100\u001b[0m | \u001b[31;1m 33.33\u001b[0m | \u001b[31;1m2,4,9,21-28,32,35-37\u001b[0m \n----------|---------|----------|---------|---------|----------------------\n",
"htmlSpaFiles": ["index.js.html", "index.html"],
Expand Down Expand Up @@ -84,6 +85,7 @@
}
]
},
"coberturaCoverageData": "<?xml version=\"1.0\" ?>\n<!DOCTYPE coverage SYSTEM \"http://cobertura.sourceforge.net/xml/coverage-04.dtd\">\n<coverage lines-valid=\"18\" lines-covered=\"6\" line-rate=\"0.3333\" branches-valid=\"0\" branches-covered=\"0\" branch-rate=\"1\" timestamp=\"123456789\" complexity=\"0\" version=\"0.1\">\n <sources>\n <source>/</source>\n </sources>\n <packages>\n <package name=\"main\" line-rate=\"0.3333\" branch-rate=\"1\">\n <classes>\n <class name=\"index.js\" filename=\"index.js\" line-rate=\"0.3333\" branch-rate=\"1\">\n <methods>\n </methods>\n <lines>\n <line number=\"1\" hits=\"1\" branch=\"false\"/>\n <line number=\"2\" hits=\"0\" branch=\"false\"/>\n <line number=\"3\" hits=\"1\" branch=\"false\"/>\n <line number=\"4\" hits=\"0\" branch=\"false\"/>\n <line number=\"5\" hits=\"1\" branch=\"false\"/>\n <line number=\"9\" hits=\"0\" branch=\"false\"/>\n <line number=\"13\" hits=\"1\" branch=\"false\"/>\n <line number=\"21\" hits=\"0\" branch=\"false\"/>\n <line number=\"22\" hits=\"0\" branch=\"false\"/>\n <line number=\"23\" hits=\"0\" branch=\"false\"/>\n <line number=\"24\" hits=\"0\" branch=\"false\"/>\n <line number=\"28\" hits=\"0\" branch=\"false\"/>\n <line number=\"29\" hits=\"1\" branch=\"false\"/>\n <line number=\"32\" hits=\"0\" branch=\"false\"/>\n <line number=\"33\" hits=\"1\" branch=\"false\"/>\n <line number=\"35\" hits=\"0\" branch=\"false\"/>\n <line number=\"36\" hits=\"0\" branch=\"false\"/>\n <line number=\"37\" hits=\"0\" branch=\"false\"/>\n </lines>\n </class>\n </classes>\n </package>\n </packages>\n</coverage>\n",
"map": {
"/index.js": {
"path": "/index.js",
Expand Down

0 comments on commit 596f6ff

Please sign in to comment.