From eafea9d1c7d9ba19bdbb2688e67e3d461c3e795c Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Fri, 17 Jan 2020 00:40:38 +0100 Subject: [PATCH] [PHPUnit] Add GetMockBuilderGetMockToCreateMockRector --- config/set/phpunit/phpunit60.yaml | 1 + ...etMockBuilderGetMockToCreateMockRector.php | 91 +++++++++++++++++++ .../Fixture/fixture.php.inc | 29 ++++++ .../Fixture/get_mock_only.php.inc | 28 ++++++ ...ckBuilderGetMockToCreateMockRectorTest.php | 30 ++++++ 5 files changed, 179 insertions(+) create mode 100644 packages/PHPUnit/src/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector.php create mode 100644 packages/PHPUnit/tests/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector/Fixture/fixture.php.inc create mode 100644 packages/PHPUnit/tests/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector/Fixture/get_mock_only.php.inc create mode 100644 packages/PHPUnit/tests/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector/GetMockBuilderGetMockToCreateMockRectorTest.php diff --git a/config/set/phpunit/phpunit60.yaml b/config/set/phpunit/phpunit60.yaml index 95dbad58a437..d3bcf7e82a62 100644 --- a/config/set/phpunit/phpunit60.yaml +++ b/config/set/phpunit/phpunit60.yaml @@ -10,3 +10,4 @@ services: - 'PHPUnit_Framework_MockObject_MockObject' Rector\PHPUnit\Rector\ClassMethod\AddDoesNotPerformAssertionToNonAssertingTestRector: null + Rector\PHPUnit\Rector\MethodCall\GetMockBuilderGetMockToCreateMockRector: null diff --git a/packages/PHPUnit/src/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector.php b/packages/PHPUnit/src/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector.php new file mode 100644 index 000000000000..d19198c8a970 --- /dev/null +++ b/packages/PHPUnit/src/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector.php @@ -0,0 +1,91 @@ +getMockBuilder('SomeClass') + ->disableOriginalConstructor() + ->getMock(); + } +} +PHP +, + <<<'PHP' +class SomeTest extends \PHPUnit\Framework\TestCase +{ + public function test() + { + $applicationMock = $this->createMock('SomeClass'); + } +} +PHP + + ), + ]); + } + + /** + * @return string[] + */ + public function getNodeTypes(): array + { + return [MethodCall::class]; + } + + /** + * @param MethodCall $node + */ + public function refactor(Node $node): ?Node + { + if (! $this->isName($node->name, 'getMock')) { + return null; + } + + if (! $node->var instanceof MethodCall) { + return null; + } + + if ($this->isName($node->var->name, 'disableOriginalConstructor')) { + $getMockBuilderMethodCall = $node->var->var; // null; + } else { + $getMockBuilderMethodCall = $node->var; + } + + /** @var MethodCall|null $getMockBuilderMethodCall */ + if ($getMockBuilderMethodCall === null) { + return null; + } + + if (! $this->isName($getMockBuilderMethodCall->name, 'getMockBuilder')) { + return null; + } + + $args = $getMockBuilderMethodCall->args; + $thisVariable = $getMockBuilderMethodCall->var; + + return new MethodCall($thisVariable, 'createMock', $args); + } +} diff --git a/packages/PHPUnit/tests/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector/Fixture/fixture.php.inc b/packages/PHPUnit/tests/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector/Fixture/fixture.php.inc new file mode 100644 index 000000000000..446ab7cf4d42 --- /dev/null +++ b/packages/PHPUnit/tests/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector/Fixture/fixture.php.inc @@ -0,0 +1,29 @@ +getMockBuilder('SomeClass') + ->disableOriginalConstructor() + ->getMock(); + } +} + +?> +----- +createMock('SomeClass'); + } +} + +?> diff --git a/packages/PHPUnit/tests/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector/Fixture/get_mock_only.php.inc b/packages/PHPUnit/tests/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector/Fixture/get_mock_only.php.inc new file mode 100644 index 000000000000..9b8da001c9fc --- /dev/null +++ b/packages/PHPUnit/tests/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector/Fixture/get_mock_only.php.inc @@ -0,0 +1,28 @@ +getMockBuilder('SomeClass') + ->getMock(); + } +} + +?> +----- +createMock('SomeClass'); + } +} + +?> diff --git a/packages/PHPUnit/tests/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector/GetMockBuilderGetMockToCreateMockRectorTest.php b/packages/PHPUnit/tests/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector/GetMockBuilderGetMockToCreateMockRectorTest.php new file mode 100644 index 000000000000..142f2a03005c --- /dev/null +++ b/packages/PHPUnit/tests/Rector/MethodCall/GetMockBuilderGetMockToCreateMockRector/GetMockBuilderGetMockToCreateMockRectorTest.php @@ -0,0 +1,30 @@ +doTestFile($file); + } + + public function provideDataForTest(): Iterator + { + return $this->yieldFilesFromDirectory(__DIR__ . '/Fixture'); + } + + protected function getRectorClass(): string + { + return GetMockBuilderGetMockToCreateMockRector::class; + } +}