diff --git a/composer-dependency-analyser.php b/composer-dependency-analyser.php index a957d7e02..d7bcf05cc 100644 --- a/composer-dependency-analyser.php +++ b/composer-dependency-analyser.php @@ -14,8 +14,12 @@ ->ignoreErrorsOnPackage('symfony/config', [ErrorType::DEV_DEPENDENCY_IN_PROD]) ->ignoreErrorsOnPackage('symfony/dependency-injection', [ErrorType::DEV_DEPENDENCY_IN_PROD]) - // test fixture + // test fixtures ->ignoreErrorsOnPath( __DIR__ . '/tests/EntityClassResolver/Fixture/Anything/SomeAttributeDocument.php', [ErrorType::UNKNOWN_CLASS] + ) + ->ignoreErrorsOnPath( + __DIR__ . '/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/Fixture', + [ErrorType::UNKNOWN_CLASS] ); diff --git a/composer.json b/composer.json index 0077e5ef1..f462a3ed1 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,7 @@ "symfony/console": "^6.4.24", "symfony/finder": "^7.4", "symfony/yaml": "^7.4", - "webmozart/assert": "^1.12" + "webmozart/assert": "^2.1" }, "require-dev": { "symplify/easy-coding-standard": "^13.0", diff --git a/src/Command/GenerateSymfonyConfigBuildersCommand.php b/src/Command/GenerateSymfonyConfigBuildersCommand.php index 66ebc0303..c2483b89d 100644 --- a/src/Command/GenerateSymfonyConfigBuildersCommand.php +++ b/src/Command/GenerateSymfonyConfigBuildersCommand.php @@ -1,5 +1,7 @@ createConfiguredStub(\SomeNamespace\SomeConfiguredStubClass::class, []); + } +} diff --git a/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/Fixture/CreateMockCall.php b/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/Fixture/CreateMockCall.php new file mode 100644 index 000000000..7bb23d669 --- /dev/null +++ b/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/Fixture/CreateMockCall.php @@ -0,0 +1,15 @@ +createMock(\SomeNamespace\SomeMockedClass::class); + } +} diff --git a/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/Fixture/CreateStubCall.php b/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/Fixture/CreateStubCall.php new file mode 100644 index 000000000..fba16d93b --- /dev/null +++ b/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/Fixture/CreateStubCall.php @@ -0,0 +1,15 @@ +createStub(\SomeNamespace\SomeStubClass::class); + } +} diff --git a/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/Fixture/CreateStubForIntersectionCall.php b/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/Fixture/CreateStubForIntersectionCall.php new file mode 100644 index 000000000..80f026ca8 --- /dev/null +++ b/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/Fixture/CreateStubForIntersectionCall.php @@ -0,0 +1,15 @@ +createStubForIntersectionOfInterfaces(\SomeNamespace\SomeIntersectionClass::class); + } +} diff --git a/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/Fixture/UnrelatedMethodCall.php b/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/Fixture/UnrelatedMethodCall.php new file mode 100644 index 000000000..9d3ea6b00 --- /dev/null +++ b/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/Fixture/UnrelatedMethodCall.php @@ -0,0 +1,16 @@ +assertTrue(true); + $this->someRandomMethod(\SomeNamespace\ShouldNotBeDetected::class); + } +} diff --git a/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/MockedClassNameCollectingNodeVisitorTest.php b/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/MockedClassNameCollectingNodeVisitorTest.php new file mode 100644 index 000000000..9f645f6ee --- /dev/null +++ b/tests/PhpParser/NodeVisitor/MockedClassNameCollectingNodeVisitor/MockedClassNameCollectingNodeVisitorTest.php @@ -0,0 +1,57 @@ +addVisitor($mockedClassNameCollectingNodeVisitor); + + $parser = (new ParserFactory())->createForNewestSupportedVersion(); + $stmts = $parser->parse((string) file_get_contents($filePath)); + $this->assertNotNull($stmts); + + $nodeTraverser->traverse($stmts); + + $this->assertSame($expectedClassNames, $mockedClassNameCollectingNodeVisitor->getMockedClassNames()); + } + + /** + * @return Iterator + */ + public static function provideData(): Iterator + { + yield 'createMock' => [__DIR__ . '/Fixture/CreateMockCall.php', ['SomeNamespace\SomeMockedClass']]; + + yield 'createStub' => [__DIR__ . '/Fixture/CreateStubCall.php', ['SomeNamespace\SomeStubClass']]; + + yield 'createStubForIntersectionOfInterfaces' => [ + __DIR__ . '/Fixture/CreateStubForIntersectionCall.php', + ['SomeNamespace\SomeIntersectionClass'], + ]; + + yield 'createConfiguredStub' => [ + __DIR__ . '/Fixture/CreateConfiguredStubCall.php', + ['SomeNamespace\SomeConfiguredStubClass'], + ]; + + yield 'unrelated method is not detected' => [__DIR__ . '/Fixture/UnrelatedMethodCall.php', []]; + } +}