Skip to content

Commit f469b83

Browse files
authored
JENKINS-73325: Use ID when merging nodes (#117)
JENKINS-73325: Use ID when merging nodes. Followup to #113
1 parent 1af7536 commit f469b83

File tree

5 files changed

+171
-1
lines changed

5 files changed

+171
-1
lines changed

src/main/java/edu/hm/hafner/coverage/Node.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -764,7 +764,7 @@ protected void mergeNode(final Node other) {
764764

765765
other.getChildren().forEach(otherChild -> {
766766
Optional<Node> existingChild = getChildren().stream()
767-
.filter(c -> c.getName().equals(otherChild.getName())).findFirst();
767+
.filter(c -> c.getId().equals(otherChild.getId())).findFirst();
768768
if (existingChild.isPresent()) {
769769
existingChild.get().mergeNode(otherChild);
770770
}

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

+25
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import edu.hm.hafner.coverage.Node;
2020
import edu.hm.hafner.coverage.Percentage;
2121
import edu.hm.hafner.coverage.Value;
22+
import edu.hm.hafner.coverage.assertions.Assertions;
2223

2324
import static edu.hm.hafner.coverage.Metric.CLASS;
2425
import static edu.hm.hafner.coverage.Metric.FILE;
@@ -40,6 +41,30 @@ protected String getFolder() {
4041
return "cobertura";
4142
}
4243

44+
@Test
45+
@Issue("JENKINS-73325")
46+
void shouldUseFullPathWhenParsingFileNodes() {
47+
Node root = readReport("cobertura-same-filename.xml");
48+
49+
assertThat(root.getAllFileNodes()).hasSize(2)
50+
.satisfiesExactlyInAnyOrder(
51+
file -> assertThat(file).hasName("MyClass.cs").hasRelativePath("/src/NamespaceA/MyClass.cs"),
52+
file -> assertThat(file).hasName("MyClass.cs").hasRelativePath("/src/NamespaceB/MyClass.cs"));
53+
}
54+
55+
@Test
56+
@Issue("JENKINS-73325")
57+
void shouldMergeFilesThatUseSameFileNameInDifferentFolder() {
58+
Node left = readReport("merge-duplicate-a.xml");
59+
Node right = readReport("merge-duplicate-b.xml");
60+
61+
var aggregation = left.merge(right);
62+
assertThat(aggregation.getAllFileNodes()).hasSize(2)
63+
.satisfiesExactlyInAnyOrder(
64+
file -> Assertions.assertThat(file).hasName("MyClass.cs").hasRelativePath("/src/Domain/NamespaceA/MyClass.cs"),
65+
file -> Assertions.assertThat(file).hasName("MyClass.cs").hasRelativePath("/src/Domain/NamespaceB/MyClass.cs"));
66+
}
67+
4368
@Test
4469
@Issue("JENKINS-73175")
4570
void shouldAutoGenerateNamesForRuby() {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!DOCTYPE coverage SYSTEM "http://cobertura.sourceforge.net/xml/coverage-04.dtd">
3+
<coverage line-rate="1" branch-rate="1" lines-covered="12" lines-valid="12" branches-covered="6" branches-valid="6" complexity="6" version="0" timestamp="1675424586">
4+
<sources>
5+
<source>D:\</source>
6+
</sources>
7+
<packages>
8+
<package name="Numbers" line-rate="1" branch-rate="1" complexity="6">
9+
<classes>
10+
<class name="NamespaceA.MyClass" filename="/src/NamespaceA/MyClass.cs" line-rate="1" branch-rate="0.6" complexity="3">
11+
<methods>
12+
<method name="Method" signature="System.Void ()" line-rate="1" branch-rate="0.5" complexity="3">
13+
<lines>
14+
<line number="17" hits="2" branch="true" condition-coverage="50% (2/4)">
15+
<conditions>
16+
<condition number="1779" type="jump" coverage="50%" />
17+
</conditions>
18+
</line>
19+
</lines>
20+
</method>
21+
</methods>
22+
</class>
23+
<class name="NamespaceB.MyClass" filename="/src/NamespaceB/MyClass.cs" line-rate="0" branch-rate="0" complexity="4">
24+
<methods>
25+
<method name="Method" signature="System.Void ()" line-rate="0" branch-rate="0" complexity="4">
26+
<lines>
27+
<line number="17" hits="0" branch="true" condition-coverage="0% (0/6)">
28+
<conditions>
29+
<condition number="3339" type="jump" coverage="0%" />
30+
</conditions>
31+
</line>
32+
</lines>
33+
</method>
34+
</methods>
35+
</class>
36+
</classes>
37+
</package>
38+
</packages>
39+
</coverage>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?xml version="1.0" encoding="utf-8" standalone="no"?>
2+
<!DOCTYPE coverage SYSTEM "http://cobertura.sourceforge.net/xml/coverage-04.dtd">
3+
<coverage line-rate="0.02" branch-rate="0.02" lines-covered="417" lines-valid="18516" branches-covered="112" branches-valid="5820" complexity="19" version="8.8.0.0" timestamp="1715002690">
4+
<sources>
5+
<source>D:\</source>
6+
</sources>
7+
<packages>
8+
<package name="Domain" line-rate="0.04" branch-rate="0.03" complexity="1.95">
9+
<classes>
10+
<class name="Domain.NamespaceA.MyClass" filename="/src/Domain/NamespaceA/MyClass.cs" line-rate="0" branch-rate="0" complexity="4">
11+
<methods>
12+
<method name="Method" signature="System.Void ()" line-rate="0" branch-rate="0" complexity="4">
13+
<lines>
14+
<line number="17" hits="0" branch="true" condition-coverage="0% (0/6)">
15+
<conditions>
16+
<condition number="3339" type="jump" coverage="0%" />
17+
</conditions>
18+
</line>
19+
</lines>
20+
</method>
21+
</methods>
22+
<lines>
23+
<line number="17" hits="0" branch="true" condition-coverage="0% (0/6)">
24+
<conditions>
25+
<condition number="3339" type="jump" coverage="0%" />
26+
</conditions>
27+
</line>
28+
</lines>
29+
</class>
30+
<class name="Domain.NamespaceB.MyClass" filename="/src/Domain/NamespaceB/MyClass.cs" line-rate="1" branch-rate="0.6" complexity="3">
31+
<methods>
32+
<method name="Method" signature="System.Void ()" line-rate="1" branch-rate="0.5" complexity="3">
33+
<lines>
34+
<line number="17" hits="2" branch="true" condition-coverage="50% (2/4)">
35+
<conditions>
36+
<condition number="1779" type="jump" coverage="50%" />
37+
</conditions>
38+
</line>
39+
</lines>
40+
</method>
41+
</methods>
42+
<lines>
43+
<line number="17" hits="2" branch="true" condition-coverage="50% (2/4)">
44+
<conditions>
45+
<condition number="1779" type="jump" coverage="50%" />
46+
</conditions>
47+
</line>
48+
</lines>
49+
</class>
50+
</classes>
51+
</package>
52+
</packages>
53+
</coverage>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?xml version="1.0" encoding="utf-8" standalone="no"?>
2+
<!DOCTYPE coverage SYSTEM "http://cobertura.sourceforge.net/xml/coverage-04.dtd">
3+
<coverage line-rate="0" branch-rate="0" lines-covered="93" lines-valid="36985" branches-covered="18" branches-valid="11402" complexity="61" version="8.8.0.0" timestamp="1718963829">
4+
<sources>
5+
<source>D:\</source>
6+
</sources>
7+
<packages>
8+
<package name="Domain" line-rate="0" branch-rate="0" complexity="1.95">
9+
<classes>
10+
<class name="Domain.NamespaceA.MyClass" filename="/src/Domain/NamespaceA/MyClass.cs" line-rate="0" branch-rate="0" complexity="4">
11+
<methods>
12+
<method name="Validate" signature="System.Void ()" line-rate="0" branch-rate="0" complexity="4">
13+
<lines>
14+
<line number="17" hits="0" branch="true" condition-coverage="0% (0/6)">
15+
<conditions>
16+
<condition number="3339" type="jump" coverage="0%" />
17+
</conditions>
18+
</line>
19+
</lines>
20+
</method>
21+
</methods>
22+
<lines>
23+
<line number="17" hits="0" branch="true" condition-coverage="0% (0/6)">
24+
<conditions>
25+
<condition number="3339" type="jump" coverage="0%" />
26+
</conditions>
27+
</line>
28+
</lines>
29+
</class>
30+
<class name="Domain.NamespaceB.MyClass" filename="/src/Domain/NamespaceB/MyClass.cs" line-rate="0" branch-rate="0" complexity="3">
31+
<methods>
32+
<method name="Validate" signature="System.Void ()" line-rate="0" branch-rate="0" complexity="3">
33+
<lines>
34+
<line number="17" hits="0" branch="true" condition-coverage="0% (0/4)">
35+
<conditions>
36+
<condition number="1779" type="jump" coverage="0%" />
37+
</conditions>
38+
</line>
39+
</lines>
40+
</method>
41+
</methods>
42+
<lines>
43+
<line number="17" hits="0" branch="true" condition-coverage="0% (0/4)">
44+
<conditions>
45+
<condition number="1779" type="jump" coverage="0%" />
46+
</conditions>
47+
</line>
48+
</lines>
49+
</class>
50+
</classes>
51+
</package>
52+
</packages>
53+
</coverage>

0 commit comments

Comments
 (0)