Skip to content

Commit fd30e46

Browse files
author
orbeji
committed
improve clover report parsing
1 parent 292bbf5 commit fd30e46

File tree

1 file changed

+34
-5
lines changed

1 file changed

+34
-5
lines changed

src/Coverage/Parser.php

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,41 @@ public function getPrModifiedLines(string $diff): array
3535
*/
3636
public function getCoverageLines(string $coverageReport): array
3737
{
38-
$uncoveredLines = [];
39-
$coveredLines = [];
4038
$coverage = new SimpleXMLElement($coverageReport);
4139
$projectXMLElement = $coverage->project;
42-
$files = $projectXMLElement->package->file ?? $projectXMLElement->file;
40+
$hasPackage = $projectXMLElement->package;
41+
if ($hasPackage) {
42+
[$uncoveredLines, $coveredLines] = $this->getPackageLines($projectXMLElement);
43+
} else {
44+
[$uncoveredLines, $coveredLines] = $this->getFileLines($projectXMLElement->file);
45+
}
46+
return [$uncoveredLines, $coveredLines];
47+
}
48+
49+
/**
50+
* @return array<int, array<string, array<int, int>>>
51+
*/
52+
private function getPackageLines(SimpleXMLElement $project): array
53+
{
54+
$uncoveredLines = [];
55+
$coveredLines = [];
56+
foreach ($project->package as $package) {
57+
[$uncoveredLinesResult, $coveredLinesResult] = $this->getFileLines($package->file);
58+
$uncoveredLines[] = $uncoveredLinesResult;
59+
$coveredLines[] = $coveredLinesResult;
60+
}
61+
$uncoveredLines = array_merge([], ...$uncoveredLines);
62+
$coveredLines = array_merge([], ...$coveredLines);
63+
return [$uncoveredLines, $coveredLines];
64+
}
65+
66+
/**
67+
* @return array<int, array<string, array<int, int>>>
68+
*/
69+
private function getFileLines(SimpleXMLElement $files): array
70+
{
71+
$uncoveredLines = [];
72+
$coveredLines = [];
4373
foreach ($files as $file) {
4474
$filename = $this->parseName((string)$file['name']);
4575
foreach ($file->line as $line) {
@@ -50,8 +80,7 @@ public function getCoverageLines(string $coverageReport): array
5080
}
5181
}
5282
}
53-
54-
return [$uncoveredLines, $coveredLines];
83+
return array($uncoveredLines, $coveredLines);
5584
}
5685

5786
private function parseName(string $fileName): string

0 commit comments

Comments
 (0)