Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix cobertura report #571

Merged
merged 5 commits into from Oct 13, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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');
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thank you for adding a test for cobertura 🎉

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