Viewing file: DefaultTestResultCache.php (3.74 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php declare(strict_types=1); /* * This file is part of PHPUnit. * * (c) Sebastian Bergmann <sebastian@phpunit.de> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace PHPUnit\Runner;
use const DIRECTORY_SEPARATOR; use const LOCK_EX; use function assert; use function dirname; use function file_get_contents; use function file_put_contents; use function in_array; use function is_array; use function is_dir; use function is_file; use function json_decode; use function json_encode; use function sprintf; use PHPUnit\Util\Filesystem;
/** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class DefaultTestResultCache implements TestResultCache { /** * @var int */ private const VERSION = 1;
/** * @psalm-var list<int> */ private const ALLOWED_TEST_STATUSES = [ BaseTestRunner::STATUS_SKIPPED, BaseTestRunner::STATUS_INCOMPLETE, BaseTestRunner::STATUS_FAILURE, BaseTestRunner::STATUS_ERROR, BaseTestRunner::STATUS_RISKY, BaseTestRunner::STATUS_WARNING, ];
/** * @var string */ private const DEFAULT_RESULT_CACHE_FILENAME = '.phpunit.result.cache';
/** * @var string */ private $cacheFilename;
/** * @psalm-var array<string, int> */ private $defects = [];
/** * @psalm-var array<string, float> */ private $times = [];
public function __construct(?string $filepath = null) { if ($filepath !== null && is_dir($filepath)) { $filepath .= DIRECTORY_SEPARATOR . self::DEFAULT_RESULT_CACHE_FILENAME; }
$this->cacheFilename = $filepath ?? $_ENV['PHPUNIT_RESULT_CACHE'] ?? self::DEFAULT_RESULT_CACHE_FILENAME; }
public function setState(string $testName, int $state): void { if (!in_array($state, self::ALLOWED_TEST_STATUSES, true)) { return; }
$this->defects[$testName] = $state; }
public function getState(string $testName): int { return $this->defects[$testName] ?? BaseTestRunner::STATUS_UNKNOWN; }
public function setTime(string $testName, float $time): void { $this->times[$testName] = $time; }
public function getTime(string $testName): float { return $this->times[$testName] ?? 0.0; }
public function load(): void { if (!is_file($this->cacheFilename)) { return; }
$data = json_decode( file_get_contents($this->cacheFilename), true, );
if ($data === null) { return; }
if (!isset($data['version'])) { return; }
if ($data['version'] !== self::VERSION) { return; }
assert(isset($data['defects']) && is_array($data['defects'])); assert(isset($data['times']) && is_array($data['times']));
$this->defects = $data['defects']; $this->times = $data['times']; }
/** * @throws Exception */ public function persist(): void { if (!Filesystem::createDirectory(dirname($this->cacheFilename))) { throw new Exception( sprintf( 'Cannot create directory "%s" for result cache file', $this->cacheFilename, ), ); }
file_put_contents( $this->cacheFilename, json_encode( [ 'version' => self::VERSION, 'defects' => $this->defects, 'times' => $this->times, ], ), LOCK_EX, ); } }
|