Skip to content

Commit fe7b42b

Browse files
Merge pull request #3 from robiningelbrecht/fix-divide-by-zero
Fix divide by zero
2 parents b04638e + e9afe5d commit fe7b42b

File tree

7 files changed

+225
-169
lines changed

7 files changed

+225
-169
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ jobs:
3535
- name: Send test coverage to codecov.io
3636
uses: codecov/codecov-action@v3
3737
with:
38-
files: clover.xml,!tests/clover.xml,!tests/clover-invalid.xml
38+
files: clover.xml,!tests/clover.xml,!tests/clover-invalid.xml,!tests/clover-test-divide-by-zero.xml
3939
fail_ci_if_error: true # optional (default = false)
4040
verbose: true # optional (default = false)
41+
token: ${{ secrets.CODECOV_TOKEN }}

src/MinCoverage/CoverageMetric.php

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,13 @@ public function getTotalPercentageCoverage(): float
6666
{
6767
// https://confluence.atlassian.com/clover/how-are-the-clover-coverage-percentages-calculated-79986990.html
6868
// TPC = (coveredconditionals + coveredstatements + coveredmethods) / (conditionals + statements + methods)
69+
$divideBy = $this->getNumberOfConditionals() + $this->getNumberOfStatements() + $this->getNumberOfMethods();
70+
if (0 === $divideBy) {
71+
return 0.00;
72+
}
6973

7074
return round((($this->getNumberOfCoveredConditionals() + $this->getNumberOfCoveredStatements() + $this->getNumberOfCoveredMethods()) /
71-
($this->getNumberOfConditionals() + $this->getNumberOfStatements() + $this->getNumberOfMethods())) * 100, 2);
75+
$divideBy) * 100, 2);
7276
}
7377

7478
public static function fromCloverXmlNode(\SimpleXMLElement $node, string $forClass): self
@@ -77,15 +81,15 @@ public static function fromCloverXmlNode(\SimpleXMLElement $node, string $forCla
7781
$attributes = $node->attributes();
7882

7983
return new self(
80-
$forClass,
81-
(int) $attributes['methods'],
82-
(int) $attributes['coveredmethods'],
83-
(int) $attributes['statements'],
84-
(int) $attributes['coveredstatements'],
85-
(int) $attributes['conditionals'],
86-
(int) $attributes['coveredconditionals'],
87-
(int) $attributes['elements'],
88-
(int) $attributes['coveredelements'],
84+
forClass: $forClass,
85+
numberOfMethods: (int) $attributes['methods'],
86+
numberOfCoveredMethods: (int) $attributes['coveredmethods'],
87+
numberOfStatements: (int) $attributes['statements'],
88+
numberOfCoveredStatements: (int) $attributes['coveredstatements'],
89+
numberOfConditionals: (int) $attributes['conditionals'],
90+
numberOfCoveredConditionals: (int) $attributes['coveredconditionals'],
91+
numberOfTrackedLines: (int) $attributes['elements'],
92+
numberOfCoveredLines: (int) $attributes['coveredelements'],
8993
);
9094
}
9195
}

src/PhpUnitExtension.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ public function bootstrap(
1616
ParameterCollection $parameters): void
1717
{
1818
if (!$subscriber = ApplicationFinishedSubscriber::fromConfigurationAndParameters(
19-
$configuration,
20-
$parameters,
21-
$_SERVER['argv'],
19+
configuration: $configuration,
20+
parameters: $parameters,
21+
args: $_SERVER['argv'],
2222
)) {
2323
return;
2424
}

src/Subscriber/Application/ApplicationFinishedSubscriber.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ public function notify(Finished $event): void
7070
}
7171

7272
$results = MinCoverageResult::mapFromRulesAndMetrics(
73-
$this->minCoverageRules,
74-
$metrics,
75-
$metricTotal,
73+
minCoverageRules: $this->minCoverageRules,
74+
metrics: $metrics,
75+
metricTotal: $metricTotal,
7676
);
7777
$finalStatus = array_values($results)[0]->getStatus();
7878

@@ -125,12 +125,12 @@ public static function fromConfigurationAndParameters(
125125
}
126126

127127
return new self(
128-
$configuration->coverageClover(),
129-
$rules,
130-
$parameters->has('exitOnLowCoverage') && (int) $parameters->get('exitOnLowCoverage'),
131-
$cleanUpCloverXml,
132-
new Exitter(),
133-
new ConsoleOutput(new \Symfony\Component\Console\Output\ConsoleOutput()),
128+
relativePathToCloverXml: $configuration->coverageClover(),
129+
minCoverageRules: $rules,
130+
exitOnLowCoverage: $parameters->has('exitOnLowCoverage') && (int) $parameters->get('exitOnLowCoverage'),
131+
cleanUpCloverXml: $cleanUpCloverXml,
132+
exitter: new Exitter(),
133+
consoleOutput: new ConsoleOutput(new \Symfony\Component\Console\Output\ConsoleOutput()),
134134
);
135135
}
136136
}

0 commit comments

Comments
 (0)