From d2e4adb7e579d0caad2b07b3019a74ec9154c9ba Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Fri, 26 Apr 2019 14:03:31 +0200 Subject: [PATCH] [tests] decouple FixtureSplitter --- .../Assign/RemoveDoubleAssignRector.php | 4 +- .../RemoveUnusedPrivateMethodRector.php | 2 +- .../RemoveUnusedPrivatePropertyRector.php | 2 +- .../PHPUnit/AbstractRectorTestCase.php | 52 ++++------------ src/Testing/PHPUnit/FixtureSplitter.php | 62 +++++++++++++++++++ .../Fixture/already_added.php.inc | 4 +- .../Fixture/fixture.php.inc | 8 +-- .../Fixture/fixture2.php.inc | 8 +-- .../Fixture/fixture3.php.inc | 8 +-- 9 files changed, 91 insertions(+), 59 deletions(-) create mode 100644 src/Testing/PHPUnit/FixtureSplitter.php diff --git a/packages/DeadCode/src/Rector/Assign/RemoveDoubleAssignRector.php b/packages/DeadCode/src/Rector/Assign/RemoveDoubleAssignRector.php index c1218d09757..e928a9ddf0f 100644 --- a/packages/DeadCode/src/Rector/Assign/RemoveDoubleAssignRector.php +++ b/packages/DeadCode/src/Rector/Assign/RemoveDoubleAssignRector.php @@ -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_; diff --git a/packages/DeadCode/src/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php b/packages/DeadCode/src/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php index 0a89738af0f..39264448cea 100644 --- a/packages/DeadCode/src/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php +++ b/packages/DeadCode/src/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php @@ -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; diff --git a/packages/DeadCode/src/Rector/Property/RemoveUnusedPrivatePropertyRector.php b/packages/DeadCode/src/Rector/Property/RemoveUnusedPrivatePropertyRector.php index da290ddefd2..2d976ef94ad 100644 --- a/packages/DeadCode/src/Rector/Property/RemoveUnusedPrivatePropertyRector.php +++ b/packages/DeadCode/src/Rector/Property/RemoveUnusedPrivatePropertyRector.php @@ -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; diff --git a/src/Testing/PHPUnit/AbstractRectorTestCase.php b/src/Testing/PHPUnit/AbstractRectorTestCase.php index bb6de9b592f..6d02043029d 100644 --- a/src/Testing/PHPUnit/AbstractRectorTestCase.php +++ b/src/Testing/PHPUnit/AbstractRectorTestCase.php @@ -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( diff --git a/src/Testing/PHPUnit/FixtureSplitter.php b/src/Testing/PHPUnit/FixtureSplitter.php new file mode 100644 index 00000000000..7cb7e713149 --- /dev/null +++ b/src/Testing/PHPUnit/FixtureSplitter.php @@ -0,0 +1,62 @@ +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')); + } +} diff --git a/tests/Rector/Argument/ArgumentAdderRector/Fixture/already_added.php.inc b/tests/Rector/Argument/ArgumentAdderRector/Fixture/already_added.php.inc index 72e273957ed..f29e56b3f17 100644 --- a/tests/Rector/Argument/ArgumentAdderRector/Fixture/already_added.php.inc +++ b/tests/Rector/Argument/ArgumentAdderRector/Fixture/already_added.php.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) { diff --git a/tests/Rector/Argument/ArgumentAdderRector/Fixture/fixture.php.inc b/tests/Rector/Argument/ArgumentAdderRector/Fixture/fixture.php.inc index 64c136f7d57..911db69d08d 100644 --- a/tests/Rector/Argument/ArgumentAdderRector/Fixture/fixture.php.inc +++ b/tests/Rector/Argument/ArgumentAdderRector/Fixture/fixture.php.inc @@ -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); } } diff --git a/tests/Rector/Argument/ArgumentAdderRector/Fixture/fixture2.php.inc b/tests/Rector/Argument/ArgumentAdderRector/Fixture/fixture2.php.inc index 3ab94af1ed7..55833b6fd9f 100644 --- a/tests/Rector/Argument/ArgumentAdderRector/Fixture/fixture2.php.inc +++ b/tests/Rector/Argument/ArgumentAdderRector/Fixture/fixture2.php.inc @@ -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); } } diff --git a/tests/Rector/Argument/ArgumentAdderRector/Fixture/fixture3.php.inc b/tests/Rector/Argument/ArgumentAdderRector/Fixture/fixture3.php.inc index 82a44a96fda..5895a6a7c0b 100644 --- a/tests/Rector/Argument/ArgumentAdderRector/Fixture/fixture3.php.inc +++ b/tests/Rector/Argument/ArgumentAdderRector/Fixture/fixture3.php.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 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) {