Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions tests/PHPStan/Type/FileTypeMapperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,59 +32,71 @@ public function testGetResolvedPhpDoc(): void
$this->assertCount(0, $resolvedA->getVarTags());
$this->assertCount(0, $resolvedA->getParamTags());
$this->assertCount(2, $resolvedA->getPropertyTags());
$this->assertArrayHasKey('numericBazBazProperty', $resolvedA->getPropertyTags());
$this->assertNull($resolvedA->getReturnTag());
$this->assertNotNull($resolvedA->getPropertyTags()['numericBazBazProperty']->getReadableType());
$this->assertNotNull($resolvedA->getPropertyTags()['numericBazBazProperty']->getWritableType());
$this->assertSame('float|int', $resolvedA->getPropertyTags()['numericBazBazProperty']->getReadableType()->describe(VerbosityLevel::precise()));
$this->assertSame('float|int', $resolvedA->getPropertyTags()['numericBazBazProperty']->getWritableType()->describe(VerbosityLevel::precise()));
$this->assertArrayHasKey('singleLetterObjectName', $resolvedA->getPropertyTags());
$this->assertNotNull($resolvedA->getPropertyTags()['singleLetterObjectName']->getReadableType());
$this->assertNotNull($resolvedA->getPropertyTags()['singleLetterObjectName']->getWritableType());
$this->assertSame('TestAnnotations\\X', $resolvedA->getPropertyTags()['singleLetterObjectName']->getReadableType()->describe(VerbosityLevel::precise()));
$this->assertSame('TestAnnotations\\X', $resolvedA->getPropertyTags()['singleLetterObjectName']->getWritableType()->describe(VerbosityLevel::precise()));

$this->assertCount(6, $resolvedA->getMethodTags());
$this->assertArrayNotHasKey('complicatedParameters', $resolvedA->getMethodTags()); // ambiguous parameter types
$this->assertArrayHasKey('simpleMethod', $resolvedA->getMethodTags());
$simpleMethod = $resolvedA->getMethodTags()['simpleMethod'];
$this->assertSame('void', $simpleMethod->getReturnType()->describe(VerbosityLevel::precise()));
$this->assertFalse($simpleMethod->isStatic());
$this->assertCount(0, $simpleMethod->getParameters());

$this->assertArrayHasKey('returningMethod', $resolvedA->getMethodTags());
$returningMethod = $resolvedA->getMethodTags()['returningMethod'];
$this->assertSame('string', $returningMethod->getReturnType()->describe(VerbosityLevel::precise()));
$this->assertFalse($returningMethod->isStatic());
$this->assertCount(0, $returningMethod->getParameters());

$this->assertArrayHasKey('returningNullableScalar', $resolvedA->getMethodTags());
$returningNullableScalar = $resolvedA->getMethodTags()['returningNullableScalar'];
$this->assertSame('float|null', $returningNullableScalar->getReturnType()->describe(VerbosityLevel::precise()));
$this->assertFalse($returningNullableScalar->isStatic());
$this->assertCount(0, $returningNullableScalar->getParameters());

$this->assertArrayHasKey('returningNullableObject', $resolvedA->getMethodTags());
$returningNullableObject = $resolvedA->getMethodTags()['returningNullableObject'];
$this->assertSame('stdClass|null', $returningNullableObject->getReturnType()->describe(VerbosityLevel::precise()));
$this->assertFalse($returningNullableObject->isStatic());
$this->assertCount(0, $returningNullableObject->getParameters());

$this->assertArrayHasKey('rotate', $resolvedA->getMethodTags());
$rotate = $resolvedA->getMethodTags()['rotate'];
$this->assertSame('TestAnnotations\\Image', $rotate->getReturnType()->describe(VerbosityLevel::precise()));
$this->assertFalse($rotate->isStatic());
$this->assertCount(2, $rotate->getParameters());
$this->assertArrayHasKey('angle', $rotate->getParameters());
$this->assertSame('float', $rotate->getParameters()['angle']->getType()->describe(VerbosityLevel::precise()));
$this->assertTrue($rotate->getParameters()['angle']->passedByReference()->no());
$this->assertFalse($rotate->getParameters()['angle']->isOptional());
$this->assertFalse($rotate->getParameters()['angle']->isVariadic());
$this->assertArrayHasKey('backgroundColor', $rotate->getParameters());
$this->assertSame('mixed', $rotate->getParameters()['backgroundColor']->getType()->describe(VerbosityLevel::precise()));
$this->assertTrue($rotate->getParameters()['backgroundColor']->passedByReference()->no());
$this->assertFalse($rotate->getParameters()['backgroundColor']->isOptional());
$this->assertFalse($rotate->getParameters()['backgroundColor']->isVariadic());

$this->assertArrayHasKey('paramMultipleTypesWithExtraSpaces', $resolvedA->getMethodTags());
$paramMultipleTypesWithExtraSpaces = $resolvedA->getMethodTags()['paramMultipleTypesWithExtraSpaces'];
$this->assertSame('float|int', $paramMultipleTypesWithExtraSpaces->getReturnType()->describe(VerbosityLevel::precise()));
$this->assertFalse($paramMultipleTypesWithExtraSpaces->isStatic());
$this->assertCount(2, $paramMultipleTypesWithExtraSpaces->getParameters());
$this->assertArrayHasKey('string', $paramMultipleTypesWithExtraSpaces->getParameters());
$this->assertSame('string|null', $paramMultipleTypesWithExtraSpaces->getParameters()['string']->getType()->describe(VerbosityLevel::precise()));
$this->assertTrue($paramMultipleTypesWithExtraSpaces->getParameters()['string']->passedByReference()->no());
$this->assertFalse($paramMultipleTypesWithExtraSpaces->getParameters()['string']->isOptional());
$this->assertFalse($paramMultipleTypesWithExtraSpaces->getParameters()['string']->isVariadic());
$this->assertArrayHasKey('object', $paramMultipleTypesWithExtraSpaces->getParameters());
$this->assertSame('TestAnnotations\\stdClass|null', $paramMultipleTypesWithExtraSpaces->getParameters()['object']->getType()->describe(VerbosityLevel::precise()));
$this->assertTrue($paramMultipleTypesWithExtraSpaces->getParameters()['object']->passedByReference()->no());
$this->assertFalse($paramMultipleTypesWithExtraSpaces->getParameters()['object']->isOptional());
Expand All @@ -110,6 +122,7 @@ public function testFileWithDependentPhpDocs(): void
);

$this->assertCount(1, $resolved->getParamTags());
$this->assertArrayHasKey('pages', $resolved->getParamTags());
$this->assertSame(
'(DependentPhpDocs\Foo&iterable<DependentPhpDocs\Foo>)|(iterable<DependentPhpDocs\Foo>&Iterator)',
$resolved->getParamTags()['pages']->getType()->describe(VerbosityLevel::precise()),
Expand Down Expand Up @@ -191,7 +204,9 @@ public function testFilesWithIdenticalPhpDocsUsingDifferentAliases(): void
$doc1 = $fileTypeMapper->getResolvedPhpDoc(__DIR__ . '/data/alias-collision1.php', null, null, null, '/** @var Foo $x */');
$doc2 = $fileTypeMapper->getResolvedPhpDoc(__DIR__ . '/data/alias-collision2.php', null, null, null, '/** @var Foo $x */');

$this->assertArrayHasKey('x', $doc1->getVarTags());
$this->assertSame('AliasCollisionNamespace1\Foo', $doc1->getVarTags()['x']->getType()->describe(VerbosityLevel::precise()));
$this->assertArrayHasKey('x', $doc2->getVarTags());
$this->assertSame('AliasCollisionNamespace2\Foo', $doc2->getVarTags()['x']->getType()->describe(VerbosityLevel::precise()));
}

Expand Down
Loading