diff --git a/src/Rector/ClassLike/RemoveTestSuffixFromAbstractTestClassesRector.php b/src/Rector/ClassLike/RemoveTestSuffixFromAbstractTestClassesRector.php new file mode 100644 index 00000000..af762465 --- /dev/null +++ b/src/Rector/ClassLike/RemoveTestSuffixFromAbstractTestClassesRector.php @@ -0,0 +1,90 @@ +> + */ + public function getNodeTypes(): array + { + return [ClassLike::class]; + } + + /** + * @param ClassLike $node + */ + public function refactor(Node $node): ?Node + { + if (!$node->isAbstract()) { + return null; + } + $directorySuffix = $this->getPhpUnitDirectorySuffix(); + + $filePath = $this->file->getFilePath(); + $basename = pathinfo($filePath, PATHINFO_FILENAME); + + if (!str_ends_with($basename, $directorySuffix)) { + return null; + } + + $className = $this->getName($node); + if ($className === null) { + return null; + } + + $classShortName = $this->nodeNameResolver->getShortName($className); + // no match → rename file + $newFileLocation = dirname($filePath) . DIRECTORY_SEPARATOR . $classShortName . 'Case.php'; + $this->removedAndAddedFilesCollector->addMovedFile($this->file, $newFileLocation); + + + return null; + } + + private function getPhpUnitDirectorySuffix(): string + { + // TODO check in phpunit config if this is different. + return 'Test'; + } +} diff --git a/tests/Rector/ClassLike/RemoveTestSuffixFromAbstractTestClassesRector/Fixture/replace_abstract_class_with_suffix_test.php.inc b/tests/Rector/ClassLike/RemoveTestSuffixFromAbstractTestClassesRector/Fixture/replace_abstract_class_with_suffix_test.php.inc new file mode 100644 index 00000000..844fa735 --- /dev/null +++ b/tests/Rector/ClassLike/RemoveTestSuffixFromAbstractTestClassesRector/Fixture/replace_abstract_class_with_suffix_test.php.inc @@ -0,0 +1,8 @@ +doTestFile($filePath); + + Assert::string($this->originalTempFilePath); + $originalDirectory = dirname($this->originalTempFilePath); + + $expectedAddedFileWithContent = new AddedFileWithContent( + $originalDirectory . '/ReplaceAbstractClassWithSuffixTestCase.php', + FileSystem::read(__DIR__ . '/Fixture/replace_abstract_class_with_suffix_test.php.inc') + ); + $this->assertFileWasAdded($expectedAddedFileWithContent); + +// $expectedAddedFileWithContent = new AddedFileWithContent( +// $originalDirectory . '/SkipAbstractClassWithoutSuffix.php', +// FileSystem::read(__DIR__ . '/Fixture/skip_abstract_class_without_suffix.php.inc') +// ); +// $this->assertFileWasAdded($expectedAddedFileWithContent); + } + + public function provideData(): Iterator + { + return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture'); + } + + public function provideConfigFilePath(): string + { + return __DIR__ . '/config/configured_rule.php'; + } +} diff --git a/tests/Rector/ClassLike/RemoveTestSuffixFromAbstractTestClassesRector/config/configured_rule.php b/tests/Rector/ClassLike/RemoveTestSuffixFromAbstractTestClassesRector/config/configured_rule.php new file mode 100644 index 00000000..b1ae9ae0 --- /dev/null +++ b/tests/Rector/ClassLike/RemoveTestSuffixFromAbstractTestClassesRector/config/configured_rule.php @@ -0,0 +1,10 @@ +rule(RemoveTestSuffixFromAbstractTestClassesRector::class); +};