mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-03 09:50:49 +00:00
aae549741f
0cb3fd0feb
[Php73] Handle crash Type Error on JsonThrowOnErrorRector (#4626)
62 lines
1.9 KiB
PHP
62 lines
1.9 KiB
PHP
<?php
|
|
|
|
declare (strict_types=1);
|
|
namespace Rector\Testing\PHPUnit;
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
use RectorPrefix202308\Psr\Container\ContainerInterface;
|
|
use Rector\Core\Exception\ShouldNotHappenException;
|
|
use Rector\Core\Kernel\RectorKernel;
|
|
use Rector\Core\Util\FileHasher;
|
|
abstract class AbstractTestCase extends TestCase
|
|
{
|
|
/**
|
|
* @var array<string, RectorKernel>
|
|
*/
|
|
private static $kernelsByHash = [];
|
|
/**
|
|
* @var \Psr\Container\ContainerInterface|null
|
|
*/
|
|
private static $currentContainer;
|
|
protected function boot() : void
|
|
{
|
|
$this->bootFromConfigFiles([]);
|
|
}
|
|
/**
|
|
* @param string[] $configFiles
|
|
*/
|
|
protected function bootFromConfigFiles(array $configFiles) : void
|
|
{
|
|
$fileHasher = new FileHasher();
|
|
$configsHash = $fileHasher->hashFiles($configFiles);
|
|
if (isset(self::$kernelsByHash[$configsHash])) {
|
|
$rectorKernel = self::$kernelsByHash[$configsHash];
|
|
self::$currentContainer = $rectorKernel->getContainer();
|
|
} else {
|
|
$rectorKernel = new RectorKernel();
|
|
$containerBuilder = $rectorKernel->createFromConfigs($configFiles);
|
|
self::$kernelsByHash[$configsHash] = $rectorKernel;
|
|
self::$currentContainer = $containerBuilder;
|
|
}
|
|
}
|
|
/**
|
|
* Syntax-sugar to remove static
|
|
*
|
|
* @template T of object
|
|
* @param class-string<T> $type
|
|
* @return T
|
|
*/
|
|
protected function getService(string $type) : object
|
|
{
|
|
if (!self::$currentContainer instanceof ContainerInterface) {
|
|
throw new ShouldNotHappenException('First, create container with "boot()" or "bootWithConfigFileInfos([...])"');
|
|
}
|
|
$object = self::$currentContainer->get($type);
|
|
if ($object === null) {
|
|
$message = \sprintf('Service "%s" was not found', $type);
|
|
throw new ShouldNotHappenException($message);
|
|
}
|
|
return $object;
|
|
}
|
|
}
|