mirror of
https://github.com/rectorphp/rector.git
synced 2025-04-14 04:22:17 +02:00
[tests] decouple FixtureSplitter
This commit is contained in:
parent
9decd6136b
commit
d2e4adb7e5
@ -2,8 +2,6 @@
|
||||
|
||||
namespace Rector\DeadCode\Rector\Assign;
|
||||
|
||||
use PhpParser\Node\Stmt\Catch_;
|
||||
use PhpParser\Node\Stmt\Case_;
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\Assign;
|
||||
use PhpParser\Node\Expr\FuncCall;
|
||||
@ -11,6 +9,8 @@ use PhpParser\Node\Expr\MethodCall;
|
||||
use PhpParser\Node\Expr\PropertyFetch;
|
||||
use PhpParser\Node\Expr\StaticCall;
|
||||
use PhpParser\Node\Expr\Variable;
|
||||
use PhpParser\Node\Stmt\Case_;
|
||||
use PhpParser\Node\Stmt\Catch_;
|
||||
use PhpParser\Node\Stmt\Do_;
|
||||
use PhpParser\Node\Stmt\Else_;
|
||||
use PhpParser\Node\Stmt\ElseIf_;
|
||||
|
@ -2,9 +2,9 @@
|
||||
|
||||
namespace Rector\DeadCode\Rector\ClassMethod;
|
||||
|
||||
use PhpParser\Node\Stmt\Trait_;
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Stmt\ClassMethod;
|
||||
use PhpParser\Node\Stmt\Trait_;
|
||||
use Rector\NodeContainer\ParsedNodesByType;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\Rector\AbstractRector;
|
||||
|
@ -2,11 +2,11 @@
|
||||
|
||||
namespace Rector\DeadCode\Rector\Property;
|
||||
|
||||
use PhpParser\Node\Stmt\Trait_;
|
||||
use PhpParser\Node;
|
||||
use PhpParser\Node\Expr\Assign;
|
||||
use PhpParser\Node\Expr\PropertyFetch;
|
||||
use PhpParser\Node\Stmt\Property;
|
||||
use PhpParser\Node\Stmt\Trait_;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\PhpParser\Node\Manipulator\PropertyManipulator;
|
||||
use Rector\Rector\AbstractRector;
|
||||
|
@ -17,11 +17,6 @@ use Symplify\PackageBuilder\Tests\AbstractKernelTestCase;
|
||||
|
||||
abstract class AbstractRectorTestCase extends AbstractKernelTestCase
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private const SPLIT_LINE = '#-----\n#';
|
||||
|
||||
/**
|
||||
* @var FileProcessor
|
||||
*/
|
||||
@ -37,8 +32,15 @@ abstract class AbstractRectorTestCase extends AbstractKernelTestCase
|
||||
*/
|
||||
private $autoloadTestFixture = true;
|
||||
|
||||
/**
|
||||
* @var FixtureSplitter
|
||||
*/
|
||||
private $fixtureSplitter;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
$this->fixtureSplitter = new FixtureSplitter($this->getTempPath());
|
||||
|
||||
$configFile = $this->provideConfig();
|
||||
|
||||
if (! file_exists($configFile)) {
|
||||
@ -113,7 +115,10 @@ abstract class AbstractRectorTestCase extends AbstractKernelTestCase
|
||||
// 1. original to changed content
|
||||
foreach ($files as $file) {
|
||||
$smartFileInfo = new SmartFileInfo($file);
|
||||
[$originalFile, $changedFile] = $this->splitContentToOriginalFileAndExpectedFile($smartFileInfo);
|
||||
[$originalFile, $changedFile] = $this->fixtureSplitter->splitContentToOriginalFileAndExpectedFile(
|
||||
$smartFileInfo,
|
||||
$this->autoloadTestFixture
|
||||
);
|
||||
$this->doTestFileMatchesExpectedContent($originalFile, $changedFile, $smartFileInfo->getRealPath());
|
||||
}
|
||||
|
||||
@ -125,34 +130,6 @@ abstract class AbstractRectorTestCase extends AbstractKernelTestCase
|
||||
return sys_get_temp_dir() . '/rector_temp_tests';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
private function splitContentToOriginalFileAndExpectedFile(SmartFileInfo $smartFileInfo): array
|
||||
{
|
||||
if (Strings::match($smartFileInfo->getContents(), self::SPLIT_LINE)) {
|
||||
// original → expected
|
||||
[$originalContent, $expectedContent] = Strings::split($smartFileInfo->getContents(), self::SPLIT_LINE);
|
||||
} else {
|
||||
// no changes
|
||||
$originalContent = $smartFileInfo->getContents();
|
||||
$expectedContent = $originalContent;
|
||||
}
|
||||
|
||||
$originalFile = $this->createTemporaryPathWithPrefix($smartFileInfo, 'original');
|
||||
$expectedFile = $this->createTemporaryPathWithPrefix($smartFileInfo, 'expected');
|
||||
|
||||
FileSystem::write($originalFile, $originalContent);
|
||||
FileSystem::write($expectedFile, $expectedContent);
|
||||
|
||||
// file needs to be autoload PHPStan analyze
|
||||
if ($this->autoloadTestFixture) {
|
||||
require_once $originalFile;
|
||||
}
|
||||
|
||||
return [$originalFile, $expectedFile];
|
||||
}
|
||||
|
||||
private function doTestFileMatchesExpectedContent(
|
||||
string $originalFile,
|
||||
string $expectedFile,
|
||||
@ -170,13 +147,6 @@ abstract class AbstractRectorTestCase extends AbstractKernelTestCase
|
||||
$this->assertStringEqualsFile($expectedFile, $changedContent, 'Caused by ' . $fixtureFile);
|
||||
}
|
||||
|
||||
private function createTemporaryPathWithPrefix(SmartFileInfo $smartFileInfo, string $prefix): string
|
||||
{
|
||||
$hash = Strings::substring(md5($smartFileInfo->getRealPath()), 0, 5);
|
||||
|
||||
return sprintf($this->getTempPath() . '/%s_%s_%s', $prefix, $hash, $smartFileInfo->getBasename('.inc'));
|
||||
}
|
||||
|
||||
private function createFixtureHash(): string
|
||||
{
|
||||
return Strings::substring(
|
||||
|
62
src/Testing/PHPUnit/FixtureSplitter.php
Normal file
62
src/Testing/PHPUnit/FixtureSplitter.php
Normal file
@ -0,0 +1,62 @@
|
||||
<?php declare(strict_types=1);
|
||||
|
||||
namespace Rector\Testing\PHPUnit;
|
||||
|
||||
use Nette\Utils\FileSystem;
|
||||
use Nette\Utils\Strings;
|
||||
use Symplify\PackageBuilder\FileSystem\SmartFileInfo;
|
||||
|
||||
final class FixtureSplitter
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private const SPLIT_LINE = '#-----\n#';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $tempPath;
|
||||
|
||||
public function __construct(string $tempPath)
|
||||
{
|
||||
$this->tempPath = $tempPath;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string[]
|
||||
*/
|
||||
public function splitContentToOriginalFileAndExpectedFile(
|
||||
SmartFileInfo $smartFileInfo,
|
||||
bool $autoloadTestFixture
|
||||
): array {
|
||||
if (Strings::match($smartFileInfo->getContents(), self::SPLIT_LINE)) {
|
||||
// original → expected
|
||||
[$originalContent, $expectedContent] = Strings::split($smartFileInfo->getContents(), self::SPLIT_LINE);
|
||||
} else {
|
||||
// no changes
|
||||
$originalContent = $smartFileInfo->getContents();
|
||||
$expectedContent = $originalContent;
|
||||
}
|
||||
|
||||
$originalFile = $this->createTemporaryPathWithPrefix($smartFileInfo, 'original');
|
||||
$expectedFile = $this->createTemporaryPathWithPrefix($smartFileInfo, 'expected');
|
||||
|
||||
FileSystem::write($originalFile, $originalContent);
|
||||
FileSystem::write($expectedFile, $expectedContent);
|
||||
|
||||
// file needs to be autoload so PHPStan can analyze
|
||||
if ($autoloadTestFixture) {
|
||||
require_once $originalFile;
|
||||
}
|
||||
|
||||
return [$originalFile, $expectedFile];
|
||||
}
|
||||
|
||||
private function createTemporaryPathWithPrefix(SmartFileInfo $smartFileInfo, string $prefix): string
|
||||
{
|
||||
$hash = Strings::substring(md5($smartFileInfo->getRealPath()), 0, 5);
|
||||
|
||||
return sprintf($this->tempPath . '/%s_%s_%s', $prefix, $hash, $smartFileInfo->getBasename('.inc'));
|
||||
}
|
||||
}
|
@ -2,9 +2,9 @@
|
||||
|
||||
namespace Rector\Tests\Rector\Argument\ArgumentAdderRector\Fixture;
|
||||
|
||||
use Rector\Tests\Rector\Argument\ArgumentAdderRector\Source\ContainerBuilder;
|
||||
use Rector\Tests\Rector\Argument\ArgumentAdderRector\Source\SomeContainerBuilder;
|
||||
|
||||
class AlreadyAdded extends ContainerBuilder
|
||||
class AlreadyAdded extends SomeContainerBuilder
|
||||
{
|
||||
public function addCompilerPass($pass, $type, int $priority = 10)
|
||||
{
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
namespace Rector\Tests\Rector\Argument\ArgumentAdderRector\Fixture;
|
||||
|
||||
use Rector\Tests\Rector\Argument\ArgumentAdderRector\Source\ContainerBuilder;
|
||||
use Rector\Tests\Rector\Argument\ArgumentAdderRector\Source\SomeContainerBuilder;
|
||||
|
||||
class SomeClass
|
||||
{
|
||||
public function create()
|
||||
{
|
||||
$containerBuilder = new ContainerBuilder();
|
||||
$containerBuilder = new SomeContainerBuilder();
|
||||
$containerBuilder->compile();
|
||||
}
|
||||
}
|
||||
@ -19,13 +19,13 @@ class SomeClass
|
||||
|
||||
namespace Rector\Tests\Rector\Argument\ArgumentAdderRector\Fixture;
|
||||
|
||||
use Rector\Tests\Rector\Argument\ArgumentAdderRector\Source\ContainerBuilder;
|
||||
use Rector\Tests\Rector\Argument\ArgumentAdderRector\Source\SomeContainerBuilder;
|
||||
|
||||
class SomeClass
|
||||
{
|
||||
public function create()
|
||||
{
|
||||
$containerBuilder = new ContainerBuilder();
|
||||
$containerBuilder = new SomeContainerBuilder();
|
||||
$containerBuilder->compile(false);
|
||||
}
|
||||
}
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
namespace Rector\Tests\Rector\Argument\ArgumentAdderRector\Fixture;
|
||||
|
||||
use Rector\Tests\Rector\Argument\ArgumentAdderRector\Source\ContainerBuilder;
|
||||
use Rector\Tests\Rector\Argument\ArgumentAdderRector\Source\SomeContainerBuilder;
|
||||
|
||||
class SomeClass2
|
||||
{
|
||||
public function create()
|
||||
{
|
||||
$containerBuilder = new ContainerBuilder();
|
||||
$containerBuilder = new SomeContainerBuilder();
|
||||
$containerBuilder->addCompilerPass('pass', 'type');
|
||||
}
|
||||
}
|
||||
@ -19,13 +19,13 @@ class SomeClass2
|
||||
|
||||
namespace Rector\Tests\Rector\Argument\ArgumentAdderRector\Fixture;
|
||||
|
||||
use Rector\Tests\Rector\Argument\ArgumentAdderRector\Source\ContainerBuilder;
|
||||
use Rector\Tests\Rector\Argument\ArgumentAdderRector\Source\SomeContainerBuilder;
|
||||
|
||||
class SomeClass2
|
||||
{
|
||||
public function create()
|
||||
{
|
||||
$containerBuilder = new ContainerBuilder();
|
||||
$containerBuilder = new SomeContainerBuilder();
|
||||
$containerBuilder->addCompilerPass('pass', 'type', 0);
|
||||
}
|
||||
}
|
||||
|
@ -2,9 +2,9 @@
|
||||
|
||||
namespace Rector\Tests\Rector\Argument\ArgumentAdderRector\Fixture;
|
||||
|
||||
use Rector\Tests\Rector\Argument\ArgumentAdderRector\Source\ContainerBuilder;
|
||||
use Rector\Tests\Rector\Argument\ArgumentAdderRector\Source\SomeContainerBuilder;
|
||||
|
||||
class CustomContainerBuilder extends ContainerBuilder
|
||||
class CustomContainerBuilder extends SomeContainerBuilder
|
||||
{
|
||||
public function addCompilerPass($pass, $type)
|
||||
{
|
||||
@ -17,9 +17,9 @@ class CustomContainerBuilder extends ContainerBuilder
|
||||
|
||||
namespace Rector\Tests\Rector\Argument\ArgumentAdderRector\Fixture;
|
||||
|
||||
use Rector\Tests\Rector\Argument\ArgumentAdderRector\Source\ContainerBuilder;
|
||||
use Rector\Tests\Rector\Argument\ArgumentAdderRector\Source\SomeContainerBuilder;
|
||||
|
||||
class CustomContainerBuilder extends ContainerBuilder
|
||||
class CustomContainerBuilder extends SomeContainerBuilder
|
||||
{
|
||||
public function addCompilerPass($pass, $type, int $priority = 0)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user