1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
<?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.
*/
use PHPUnit\Framework\TestCase;
use PHPUnit\Runner\BaseTestRunner;
use PHPUnit\Runner\DefaultTestResultCache;
/**
* @group test-reorder
* @small
*/
final class TestResultCacheTest extends TestCase
{
public function testReadsCacheFromProvidedFilename(): void
{
$cacheFile = TEST_FILES_PATH . '../end-to-end/execution-order/_files/MultiDependencyTest_result_cache.txt';
$cache = new DefaultTestResultCache($cacheFile);
$cache->load();
$this->assertSame(BaseTestRunner::STATUS_UNKNOWN, $cache->getState(\MultiDependencyTest::class . '::testOne'));
$this->assertSame(BaseTestRunner::STATUS_SKIPPED, $cache->getState(\MultiDependencyTest::class . '::testFive'));
}
public function testDoesClearCacheBeforeLoad(): void
{
$cacheFile = TEST_FILES_PATH . '../end-to-end/execution-order/_files/MultiDependencyTest_result_cache.txt';
$cache = new DefaultTestResultCache($cacheFile);
$cache->setState('someTest', BaseTestRunner::STATUS_FAILURE);
$this->assertSame(BaseTestRunner::STATUS_UNKNOWN, $cache->getState(\MultiDependencyTest::class . '::testFive'));
$cache->load();
$this->assertSame(BaseTestRunner::STATUS_UNKNOWN, $cache->getState(\MultiDependencyTest::class . '::someTest'));
$this->assertSame(BaseTestRunner::STATUS_SKIPPED, $cache->getState(\MultiDependencyTest::class . '::testFive'));
}
public function testShouldNotSerializePassedTestsAsDefectButTimeIsStored(): void
{
$cache = new DefaultTestResultCache;
$cache->setState('testOne', BaseTestRunner::STATUS_PASSED);
$cache->setTime('testOne', 123);
$data = \serialize($cache);
$this->assertSame('C:37:"PHPUnit\Runner\DefaultTestResultCache":64:{a:2:{s:7:"defects";a:0:{}s:5:"times";a:1:{s:7:"testOne";d:123;}}}', $data);
}
public function testCanPersistCacheToFile(): void
{
// Create a cache with one result and store it
$cacheFile = \tempnam(\sys_get_temp_dir(), 'phpunit_');
$cache = new DefaultTestResultCache($cacheFile);
$testName = 'test' . \uniqid();
$cache->setState($testName, BaseTestRunner::STATUS_SKIPPED);
$cache->persist();
unset($cache);
// Load the cache we just created
$loadedCache = new DefaultTestResultCache($cacheFile);
$loadedCache->load();
$this->assertSame(BaseTestRunner::STATUS_SKIPPED, $loadedCache->getState($testName));
// Clean up
\unlink($cacheFile);
}
public function testShouldReturnEmptyCacheWhenFileDoesNotExist(): void
{
$cache = new DefaultTestResultCache('/a/wrong/path/file');
$cache->load();
$this->assertTrue($this->isSerializedEmptyCache(\serialize($cache)));
}
public function testShouldReturnEmptyCacheFromInvalidFile(): void
{
$cacheFile = \tempnam(\sys_get_temp_dir(), 'phpunit_');
\file_put_contents($cacheFile, '<certainly not serialized php>');
$cache = new DefaultTestResultCache($cacheFile);
$cache->load();
$this->assertTrue($this->isSerializedEmptyCache(\serialize($cache)));
\unlink($cacheFile);
}
public function isSerializedEmptyCache(string $data): bool
{
return $data === 'C:37:"PHPUnit\Runner\DefaultTestResultCache":44:{a:2:{s:7:"defects";a:0:{}s:5:"times";a:0:{}}}';
}
}
|