Skip to content
This repository was archived by the owner on Nov 19, 2024. It is now read-only.

Commit 6a7730e

Browse files
committed
Fix splitPackages for some corner cases.
- If the package name contains a single dot, then splitting broke with an exception. - If the module node does not contain packages, then the next sub nodes have been split. - If the package name does not contain dots, then the package was deleted.
1 parent ea97457 commit 6a7730e

File tree

2 files changed

+53
-5
lines changed

2 files changed

+53
-5
lines changed

src/main/java/io/jenkins/plugins/coverage/model/CoverageNode.java

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -347,11 +347,21 @@ public boolean matches(final CoverageMetric searchMetric, final int searchNameHa
347347
*/
348348
public void splitPackages() {
349349
if (CoverageMetric.MODULE.equals(metric)) {
350-
List<CoverageNode> allPackages = new ArrayList<>(children);
351-
children.clear();
352-
for (CoverageNode aPackage : allPackages) {
353-
Deque<String> packageLevels = new ArrayDeque<>(Arrays.asList(aPackage.getName().split("\\.")));
354-
insertPackage(aPackage, packageLevels);
350+
List<CoverageNode> allPackages = children.stream()
351+
.filter(child -> CoverageMetric.PACKAGE.equals(child.getMetric()))
352+
.collect(Collectors.toList());
353+
if (!allPackages.isEmpty()) {
354+
children.clear();
355+
for (CoverageNode packageNode : allPackages) {
356+
String[] packageParts = packageNode.getName().split("\\.");
357+
if (packageParts.length > 1) {
358+
Deque<String> packageLevels = new ArrayDeque<>(Arrays.asList(packageParts));
359+
insertPackage(packageNode, packageLevels);
360+
}
361+
else {
362+
add(packageNode);
363+
}
364+
}
355365
}
356366
}
357367
}

src/test/java/io/jenkins/plugins/coverage/model/CoverageNodeTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,44 @@
1818
class CoverageNodeTest extends AbstractCoverageTest {
1919
private static final String PROJECT_NAME = "Java coding style: jacoco-codingstyle.xml";
2020

21+
@Test
22+
void shouldSplitPackagesWithoutPackageNodes() {
23+
CoverageNode root = new CoverageNode(CoverageMetric.MODULE, "Root");
24+
assertThat(root.getAll(PACKAGE)).hasSize(0);
25+
root.splitPackages();
26+
assertThat(root.getAll(PACKAGE)).hasSize(0);
27+
28+
root.add(new CoverageNode(CoverageMetric.FILE, "file.c"));
29+
root.splitPackages();
30+
assertThat(root.getAll(PACKAGE)).hasSize(0);
31+
}
32+
33+
@Test
34+
void shouldSplitPackagesWithoutName() {
35+
CoverageNode root = new CoverageNode(CoverageMetric.MODULE, "Root");
36+
assertThat(root.getAll(PACKAGE)).hasSize(0);
37+
root.splitPackages();
38+
assertThat(root.getAll(PACKAGE)).hasSize(0);
39+
40+
root.add(new CoverageNode(CoverageMetric.PACKAGE, ""));
41+
assertThat(root.getAll(PACKAGE)).hasSize(1);
42+
root.splitPackages();
43+
assertThat(root.getAll(PACKAGE)).hasSize(1);
44+
}
45+
46+
@Test
47+
void shouldSplitPackagesWithSingleDot() {
48+
CoverageNode root = new CoverageNode(CoverageMetric.MODULE, "Root");
49+
assertThat(root.getAll(PACKAGE)).hasSize(0);
50+
root.splitPackages();
51+
assertThat(root.getAll(PACKAGE)).hasSize(0);
52+
53+
root.add(new CoverageNode(CoverageMetric.PACKAGE, "."));
54+
assertThat(root.getAll(PACKAGE)).hasSize(1);
55+
root.splitPackages();
56+
assertThat(root.getAll(PACKAGE)).hasSize(1);
57+
}
58+
2159
@Test
2260
void shouldConvertCodingStyleToTree() {
2361
CoverageNode tree = readExampleReport();

0 commit comments

Comments
 (0)