diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..658385a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,5 @@
+.idea
+.phpunit.cache
+vendor
+.DS_Store
+coverage
\ No newline at end of file
diff --git a/badges/output.svg b/badges/output.svg
new file mode 100644
index 0000000..908161a
--- /dev/null
+++ b/badges/output.svg
@@ -0,0 +1,21 @@
+
+
\ No newline at end of file
diff --git a/badges/php.svg b/badges/php.svg
index b1d20cb..3105b6f 100644
--- a/badges/php.svg
+++ b/badges/php.svg
@@ -15,7 +15,7 @@
PHP
PHP
- 73%
- 73%
+ 74%
+ 74%
\ No newline at end of file
diff --git a/src/BadgeComposer.php b/src/BadgeComposer.php
index 8a89e8b..6f6f520 100644
--- a/src/BadgeComposer.php
+++ b/src/BadgeComposer.php
@@ -5,6 +5,7 @@
use Exception;
use SimpleXMLElement;
use Throwable;
+use function array_sum;
use function count;
use function explode;
use function file_exists;
@@ -29,9 +30,16 @@ class BadgeComposer
private string $outputFile;
private string $coverageName;
private string $badgeTemplate = __DIR__ . '/../template/badge.svg';
- private int $totalCoverage = 0;
- private int $totalElements = 0;
- private int $checkedElements = 0;
+ /**
+ * @var int[]
+ */
+ private array $totalCoverage = [];
+ private int $totalConditionals = 0;
+ private int $coveredConditionals = 0;
+ private int $totalStatements = 0;
+ private int $coveredStatements = 0;
+ private int $totalMethods = 0;
+ private int $coveredMethods = 0;
/**
* @throws Exception
@@ -52,7 +60,7 @@ public function __construct(string $inputFiles, string $outputFile, string $cove
*/
public function getTotalCoverage(): int
{
- return $this->totalCoverage;
+ return array_sum($this->totalCoverage);
}
/**
@@ -112,12 +120,18 @@ private function processFile(string $inputFile): void
$xml = new SimpleXMLElement($content);
$metrics = $xml->xpath('//metrics');
foreach ($metrics as $metric) {
- $this->totalElements += (int) $metric['elements'];
- $this->checkedElements += (int) $metric['coveredelements'];
+ $this->totalConditionals += (int) $metric['conditionals'];
+ $this->coveredConditionals += (int) $metric['coveredconditionals'];
+ $this->totalStatements += (int) $metric['statements'];
+ $this->coveredStatements += (int) $metric['coveredstatements'];
+ $this->totalMethods += (int) $metric['methods'];
+ $this->coveredMethods += (int) $metric['coveredmethods'];
}
- $coverageRatio = $this->totalElements ? $this->checkedElements / $this->totalElements : 0;
- $this->totalCoverage += (int) round($coverageRatio * 100);
+ $totalElements = $this->totalConditionals + $this->totalStatements + $this->totalMethods;
+ $coveredElements = $this->coveredConditionals + $this->coveredStatements + $this->coveredMethods;
+ $coverageRatio = $totalElements ? $coveredElements / $totalElements : 0;
+ $this->totalCoverage[] = (int) round($coverageRatio * 100);
} catch (Throwable $e) {
throw new Exception($e->getMessage());
@@ -131,7 +145,7 @@ private function processFile(string $inputFile): void
*/
private function finalizeCoverage(): void
{
- $totalCoverage = $this->totalCoverage / count($this->inputFiles); // Average coverage across all files
+ $totalCoverage = $this->getTotalCoverage() / count($this->inputFiles); // Average coverage across all files
$template = file_get_contents($this->badgeTemplate);
if($template === false) {
diff --git a/tests/BadgeComposerTest.php b/tests/BadgeComposerTest.php
index ea994e2..d10f84b 100644
--- a/tests/BadgeComposerTest.php
+++ b/tests/BadgeComposerTest.php
@@ -95,7 +95,7 @@ public function testProcessMultipleCloverFilesAndCalculateTheCoverage(): void
$this->processFile($this->inputFile);
$this->processFile($this->inputFile2);
- $this->assertEquals(83, $this->badgeComposer->getTotalCoverage());
+ $this->assertEquals(69, $this->badgeComposer->getTotalCoverage());
}
/**