![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/captainhook/captainhook/src/Hook/PHP/CoverageResolver/ |
<?php /** * This file is part of CaptainHook * * (c) Sebastian Feldmann <[email protected]> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace CaptainHook\App\Hook\PHP\CoverageResolver; use RuntimeException; use CaptainHook\App\Hook\PHP\CoverageResolver; use CaptainHook\App\Storage\File\Xml; /** * Class CloverXML * * @package CaptainHook * @author Sebastian Feldmann <[email protected]> * @link https://github.com/captainhookphp/captainhook * @since Class available since Release 1.2.0 */ class CloverXML implements CoverageResolver { /** * Clover XML * * @var \SimpleXMLElement */ private $xml; /** * CloverXML constructor. * * @param string $pathToCloverXml */ public function __construct($pathToCloverXml) { $cloverFile = new Xml($pathToCloverXml); if (!$cloverFile->exists()) { throw new RuntimeException('could not find clover xml file: ' . $cloverFile->getPath()); } $this->xml = $cloverFile->read(); $this->validateXml(); } /** * Make sure you have a valid xml structure * * @return void * @throws \RuntimeException */ private function validateXml(): void { if (!isset($this->xml->project) || !isset($this->xml->project->metrics)) { throw new RuntimeException('invalid clover xml file'); } } /** * Return test coverage in percent. * * @return float */ public function getCoverage(): float { $statements = (string) $this->xml->project->metrics->attributes()->statements; $covered = (string) $this->xml->project->metrics->attributes()->coveredstatements; if ($statements < 1 || !is_numeric($covered)) { throw new RuntimeException( 'could not read coverage data from clover xml file ' . '(statements: ' . $statements . ', coveredstatements: ' . $covered . ')' ); } return $covered / ((int)$statements * 0.01); } }