From 9944485d112e09791eb7cbec7c7bd5af99984c65 Mon Sep 17 00:00:00 2001 From: TomasVotruba <tomas.vot@gmail.com> Date: Fri, 17 Jan 2020 01:16:38 +0100 Subject: [PATCH] [PHPUnit] Add ClassMethod/RemoveEmptyTestMethodRector --- config/set/dead-code/dead-code.yaml | 1 + docs/AllRectorsOverview.md | 45 +++++++++++- .../RemoveEmptyTestMethodRector.php | 71 +++++++++++++++++++ .../Fixture/fixture.php.inc | 27 +++++++ .../RemoveEmptyTestMethodRectorTest.php | 30 ++++++++ 5 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 packages/PHPUnit/src/Rector/ClassMethod/RemoveEmptyTestMethodRector.php create mode 100644 packages/PHPUnit/tests/Rector/ClassMethod/RemoveEmptyTestMethodRector/Fixture/fixture.php.inc create mode 100644 packages/PHPUnit/tests/Rector/ClassMethod/RemoveEmptyTestMethodRector/RemoveEmptyTestMethodRectorTest.php diff --git a/config/set/dead-code/dead-code.yaml b/config/set/dead-code/dead-code.yaml index dfdc5e4657b..3e7ab49ddc4 100644 --- a/config/set/dead-code/dead-code.yaml +++ b/config/set/dead-code/dead-code.yaml @@ -30,3 +30,4 @@ services: Rector\DeadCode\Rector\Stmt\RemoveUnreachableStatementRector: null Rector\DeadCode\Rector\If_\SimplifyIfElseWithSameContentRector: null Rector\DeadCode\Rector\Ternary\TernaryToBooleanOrFalseToBooleanAndRector: null + Rector\PHPUnit\Rector\ClassMethod\RemoveEmptyTestMethodRector: null diff --git a/docs/AllRectorsOverview.md b/docs/AllRectorsOverview.md index 2a8268a0b66..d09fc2a27ac 100644 --- a/docs/AllRectorsOverview.md +++ b/docs/AllRectorsOverview.md @@ -1,4 +1,4 @@ -# All 430 Rectors Overview +# All 432 Rectors Overview - [Projects](#projects) - [General](#general) @@ -4536,6 +4536,27 @@ Fix data provider annotation typos <br> +### `GetMockBuilderGetMockToCreateMockRector` + +- class: `Rector\PHPUnit\Rector\MethodCall\GetMockBuilderGetMockToCreateMockRector` + +Remove getMockBuilder() to createMock() + +```diff + class SomeTest extends \PHPUnit\Framework\TestCase + { + public function test() + { +- $applicationMock = $this->getMockBuilder('SomeClass') +- ->disableOriginalConstructor() +- ->getMock(); ++ $applicationMock = $this->createMock('SomeClass'); + } + } +``` + +<br> + ### `GetMockRector` - class: `Rector\PHPUnit\Rector\GetMockRector` @@ -4582,6 +4603,28 @@ Data provider methods cannot start with "test" prefix <br> +### `RemoveEmptyTestMethodRector` + +- class: `Rector\PHPUnit\Rector\ClassMethod\RemoveEmptyTestMethodRector` + +Remove empty test methods + +```diff + class SomeTest extends \PHPUnit\Framework\TestCase + { +- /** +- * testGetTranslatedModelField method +- * +- * @return void +- */ +- public function testGetTranslatedModelField() +- { +- } + } +``` + +<br> + ### `RemoveExpectAnyFromMockRector` - class: `Rector\PHPUnit\Rector\MethodCall\RemoveExpectAnyFromMockRector` diff --git a/packages/PHPUnit/src/Rector/ClassMethod/RemoveEmptyTestMethodRector.php b/packages/PHPUnit/src/Rector/ClassMethod/RemoveEmptyTestMethodRector.php new file mode 100644 index 00000000000..30b0b58de2d --- /dev/null +++ b/packages/PHPUnit/src/Rector/ClassMethod/RemoveEmptyTestMethodRector.php @@ -0,0 +1,71 @@ +<?php + +declare(strict_types=1); + +namespace Rector\PHPUnit\Rector\ClassMethod; + +use PhpParser\Node; +use PhpParser\Node\Stmt\ClassMethod; +use Rector\Rector\AbstractPHPUnitRector; +use Rector\RectorDefinition\CodeSample; +use Rector\RectorDefinition\RectorDefinition; + +/** + * @see \Rector\PHPUnit\Tests\Rector\ClassMethod\RemoveEmptyTestMethodRector\RemoveEmptyTestMethodRectorTest + */ +final class RemoveEmptyTestMethodRector extends AbstractPHPUnitRector +{ + public function getDefinition(): RectorDefinition + { + return new RectorDefinition('Remove empty test methods', [ + new CodeSample( + <<<'PHP' +class SomeTest extends \PHPUnit\Framework\TestCase +{ + /** + * testGetTranslatedModelField method + * + * @return void + */ + public function testGetTranslatedModelField() + { + } +} +PHP +, + <<<'PHP' +class SomeTest extends \PHPUnit\Framework\TestCase +{ +} +PHP + + ), + ]); + } + + /** + * @return string[] + */ + public function getNodeTypes(): array + { + return [ClassMethod::class]; + } + + /** + * @param ClassMethod $node + */ + public function refactor(Node $node): ?Node + { + if (! $this->isInTestClass($node)) { + return null; + } + + if (! $this->isName($node->name, 'test*')) { + return null; + } + + $this->removeNode($node); + + return null; + } +} diff --git a/packages/PHPUnit/tests/Rector/ClassMethod/RemoveEmptyTestMethodRector/Fixture/fixture.php.inc b/packages/PHPUnit/tests/Rector/ClassMethod/RemoveEmptyTestMethodRector/Fixture/fixture.php.inc new file mode 100644 index 00000000000..dd5f3fc1291 --- /dev/null +++ b/packages/PHPUnit/tests/Rector/ClassMethod/RemoveEmptyTestMethodRector/Fixture/fixture.php.inc @@ -0,0 +1,27 @@ +<?php + +namespace Rector\PHPUnit\Tests\Rector\ClassMethod\RemoveEmptyTestMethodRector\Fixture; + +class SomeTest extends \PHPUnit\Framework\TestCase +{ + /** + * testGetTranslatedModelField method + * + * @return void + */ + public function testGetTranslatedModelField() + { + } +} + +?> +----- +<?php + +namespace Rector\PHPUnit\Tests\Rector\ClassMethod\RemoveEmptyTestMethodRector\Fixture; + +class SomeTest extends \PHPUnit\Framework\TestCase +{ +} + +?> diff --git a/packages/PHPUnit/tests/Rector/ClassMethod/RemoveEmptyTestMethodRector/RemoveEmptyTestMethodRectorTest.php b/packages/PHPUnit/tests/Rector/ClassMethod/RemoveEmptyTestMethodRector/RemoveEmptyTestMethodRectorTest.php new file mode 100644 index 00000000000..d807293e60c --- /dev/null +++ b/packages/PHPUnit/tests/Rector/ClassMethod/RemoveEmptyTestMethodRector/RemoveEmptyTestMethodRectorTest.php @@ -0,0 +1,30 @@ +<?php + +declare(strict_types=1); + +namespace Rector\PHPUnit\Tests\Rector\ClassMethod\RemoveEmptyTestMethodRector; + +use Iterator; +use Rector\PHPUnit\Rector\ClassMethod\RemoveEmptyTestMethodRector; +use Rector\Testing\PHPUnit\AbstractRectorTestCase; + +final class RemoveEmptyTestMethodRectorTest extends AbstractRectorTestCase +{ + /** + * @dataProvider provideDataForTest() + */ + public function test(string $file): void + { + $this->doTestFile($file); + } + + public function provideDataForTest(): Iterator + { + return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture'); + } + + protected function getRectorClass(): string + { + return RemoveEmptyTestMethodRector::class; + } +}