diff --git a/tests/Core/Ast/Parser/Fixtures/MethodSignatures.php b/tests/Core/Ast/Parser/Fixtures/MethodSignatures.php new file mode 100644 index 000000000..529adb472 --- /dev/null +++ b/tests/Core/Ast/Parser/Fixtures/MethodSignatures.php @@ -0,0 +1,30 @@ +getA(); + + // Not tracked yet: + $a->foo(); + } + +} + diff --git a/tests/Core/Ast/Parser/FunctionLikeExtractorTest.php b/tests/Core/Ast/Parser/FunctionLikeExtractorTest.php new file mode 100644 index 000000000..28a7ae18f --- /dev/null +++ b/tests/Core/Ast/Parser/FunctionLikeExtractorTest.php @@ -0,0 +1,80 @@ +create(ParserFactory::ONLY_PHP7, new Lexer()), + new AstFileReferenceInMemoryCache(), + $typeResolver, + [ + new FunctionLikeExtractor($typeResolver), + ] + ); + + $filePath = __DIR__.'/Fixtures/MethodSignatures.php'; + $astFileReference = $parser->parseFile($filePath); + + $astClassReferences = $astFileReference->classLikeReferences; + + self::assertCount(3, $astClassReferences); + [$classA, $classB, $classC] = $astClassReferences; + + self::assertArrayValuesEquals( + [], + $this->getDependenciesAsString($classA) + ); + + self::assertArrayValuesEquals( + [ + 'Tests\Qossmic\Deptrac\Core\Ast\Parser\Fixtures\MethodSignaturesA::12 (returntype)', + ], + $this->getDependenciesAsString($classB) + ); + + self::assertArrayValuesEquals( + [ + 'Tests\Qossmic\Deptrac\Core\Ast\Parser\Fixtures\MethodSignaturesB::21 (parameter)', + // NOTE: We are not yet tracking the call from MethodSignatureC::test() + // to MethodSignatureA::foo(). + ], + $this->getDependenciesAsString($classC) + ); + } + + /** + * @return string[] + */ + private function getDependenciesAsString(?ClassLikeReference $classReference): array + { + if (null === $classReference) { + return []; + } + + return array_map( + static function (DependencyToken $dependency) { + return "{$dependency->token->toString()}::{$dependency->fileOccurrence->line} ({$dependency->type->value})"; + }, + $classReference->dependencies + ); + } +}