tools/CoverageUtil.php
<?php
declare(strict_types=1);
use SebastianBergmann\CodeCoverage\CodeCoverage;
use SebastianBergmann\CodeCoverage\Driver\Selector as DriverSelector;
use SebastianBergmann\CodeCoverage\Filter;
use SebastianBergmann\CodeCoverage\Report;
final class CoverageUtil
{
/** @var CodeCoverage */
private static $coverage;
private function __construct()
{
// zeroton
}
public static function start(): void
{
if (self::$coverage !== null) {
throw new \Error('Coverage already started');
}
$filter = new Filter();
$filter->includeDirectory(__DIR__ . '/../src');
self::$coverage = new CodeCoverage((new DriverSelector())->forLineCoverage($filter), $filter);
self::$coverage->start($_SERVER['SCRIPT_NAME']);
}
public static function saveData(): void
{
self::$coverage->stop();
$writer = new Report\PHP();
$writer->process(self::$coverage, dirname(__DIR__) . '/coverage/' . basename($_SERVER['SCRIPT_NAME'], '.php') . '-' . hash('sha256', microtime(true) . random_bytes(64)) . '.cov');
}
}