Skip to content

Commit

Permalink
Merge pull request #3 from robiningelbrecht/fix-divide-by-zero
Browse files Browse the repository at this point in the history
Fix divide by zero
  • Loading branch information
robiningelbrecht committed Sep 4, 2023
2 parents b04638e + e9afe5d commit fe7b42b
Show file tree
Hide file tree
Showing 7 changed files with 225 additions and 169 deletions.
3 changes: 2 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ jobs:
- name: Send test coverage to codecov.io
uses: codecov/codecov-action@v3
with:
files: clover.xml,!tests/clover.xml,!tests/clover-invalid.xml
files: clover.xml,!tests/clover.xml,!tests/clover-invalid.xml,!tests/clover-test-divide-by-zero.xml
fail_ci_if_error: true # optional (default = false)
verbose: true # optional (default = false)
token: ${{ secrets.CODECOV_TOKEN }}
24 changes: 14 additions & 10 deletions src/MinCoverage/CoverageMetric.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,13 @@ public function getTotalPercentageCoverage(): float
{
// https://confluence.atlassian.com/clover/how-are-the-clover-coverage-percentages-calculated-79986990.html
// TPC = (coveredconditionals + coveredstatements + coveredmethods) / (conditionals + statements + methods)
$divideBy = $this->getNumberOfConditionals() + $this->getNumberOfStatements() + $this->getNumberOfMethods();
if (0 === $divideBy) {
return 0.00;
}

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

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

return new self(
$forClass,
(int) $attributes['methods'],
(int) $attributes['coveredmethods'],
(int) $attributes['statements'],
(int) $attributes['coveredstatements'],
(int) $attributes['conditionals'],
(int) $attributes['coveredconditionals'],
(int) $attributes['elements'],
(int) $attributes['coveredelements'],
forClass: $forClass,
numberOfMethods: (int) $attributes['methods'],
numberOfCoveredMethods: (int) $attributes['coveredmethods'],
numberOfStatements: (int) $attributes['statements'],
numberOfCoveredStatements: (int) $attributes['coveredstatements'],
numberOfConditionals: (int) $attributes['conditionals'],
numberOfCoveredConditionals: (int) $attributes['coveredconditionals'],
numberOfTrackedLines: (int) $attributes['elements'],
numberOfCoveredLines: (int) $attributes['coveredelements'],
);
}
}
6 changes: 3 additions & 3 deletions src/PhpUnitExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ public function bootstrap(
ParameterCollection $parameters): void
{
if (!$subscriber = ApplicationFinishedSubscriber::fromConfigurationAndParameters(
$configuration,
$parameters,
$_SERVER['argv'],
configuration: $configuration,
parameters: $parameters,
args: $_SERVER['argv'],
)) {
return;
}
Expand Down
18 changes: 9 additions & 9 deletions src/Subscriber/Application/ApplicationFinishedSubscriber.php
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,9 @@ public function notify(Finished $event): void
}

$results = MinCoverageResult::mapFromRulesAndMetrics(
$this->minCoverageRules,
$metrics,
$metricTotal,
minCoverageRules: $this->minCoverageRules,
metrics: $metrics,
metricTotal: $metricTotal,
);
$finalStatus = array_values($results)[0]->getStatus();

Expand Down Expand Up @@ -125,12 +125,12 @@ public static function fromConfigurationAndParameters(
}

return new self(
$configuration->coverageClover(),
$rules,
$parameters->has('exitOnLowCoverage') && (int) $parameters->get('exitOnLowCoverage'),
$cleanUpCloverXml,
new Exitter(),
new ConsoleOutput(new \Symfony\Component\Console\Output\ConsoleOutput()),
relativePathToCloverXml: $configuration->coverageClover(),
minCoverageRules: $rules,
exitOnLowCoverage: $parameters->has('exitOnLowCoverage') && (int) $parameters->get('exitOnLowCoverage'),
cleanUpCloverXml: $cleanUpCloverXml,
exitter: new Exitter(),
consoleOutput: new ConsoleOutput(new \Symfony\Component\Console\Output\ConsoleOutput()),
);
}
}
Loading

0 comments on commit fe7b42b

Please sign in to comment.