Skip to content

Commit c703c3b

Browse files
authored
Merge pull request #147 from jenkinsci/deterministic-JENKINS-73635
[JENKINS-73635] Add support for deterministic Cobertura reports
2 parents 4343610 + 935ac1f commit c703c3b

File tree

3 files changed

+1850
-1
lines changed

3 files changed

+1850
-1
lines changed

src/main/java/edu/hm/hafner/coverage/parser/CoberturaParser.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public class CoberturaParser extends CoverageParser {
4141
private static final Pattern BRANCH_PATTERN = Pattern.compile(".*\\((?<covered>\\d+)/(?<total>\\d+)\\)");
4242
private static final PathUtil PATH_UTIL = new PathUtil();
4343

44+
private static final String DETERMINISTIC_PATH_PREFIX = "/_/";
45+
4446
private static final Coverage DEFAULT_BRANCH_COVERAGE = new CoverageBuilder(Metric.BRANCH).withCovered(2).withMissed(0).build();
4547
private static final Coverage LINE_COVERED = new CoverageBuilder(Metric.LINE).withCovered(1).withMissed(0).build();
4648
private static final Coverage LINE_MISSED = new CoverageBuilder(Metric.LINE).withCovered(0).withMissed(1).build();
@@ -141,7 +143,8 @@ else if (event.isEndElement()) {
141143

142144
private FileNode createFileNode(final StartElement element, final PackageNode packageNode) {
143145
var fileName = getValueOf(element, FILE_NAME);
144-
var path = getTreeStringBuilder().intern(PATH_UTIL.getRelativePath(fileName));
146+
var relativePath = StringUtils.removeStart(PATH_UTIL.getRelativePath(fileName), DETERMINISTIC_PATH_PREFIX);
147+
var path = getTreeStringBuilder().intern(relativePath);
145148

146149
return packageNode.findOrCreateFileNode(getFileName(fileName), path);
147150
}

src/test/java/edu/hm/hafner/coverage/parser/CoberturaParserTest.java

+18
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,24 @@ protected String getFolder() {
3838
return "cobertura";
3939
}
4040

41+
@Test
42+
@Issue("JENKINS-73635")
43+
void shouldRemovePrefixOfDeterministicCoverageReport() {
44+
var root = readReport("c#-cobertura.xml");
45+
46+
assertThat(root.getAllFileNodes()).hasSize(20).map(FileNode::getRelativePath)
47+
.allSatisfy(
48+
file -> assertThat(file)
49+
.doesNotStartWith("/_/")
50+
.startsWith("Lib.LicenseScanner/"));
51+
52+
assertThat(root.getAllFileNodes()).hasSize(20)
53+
.first().satisfies(
54+
file -> assertThat(file)
55+
.hasName("IssueKeys.cs")
56+
.hasRelativePath("Lib.LicenseScanner/IssueKeys.cs"));
57+
}
58+
4159
@Test
4260
@Issue("JENKINS-73325")
4361
void shouldUseFullPathWhenParsingFileNodes() {

0 commit comments

Comments
 (0)