Skip to content

Commit 7ee523f

Browse files
committed
Fix assertSuperType logic
1 parent c0f2e9e commit 7ee523f

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

src/Testing/TypeInferenceTestCase.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
use PHPStan\Php\PhpVersion;
1818
use PHPStan\PhpDoc\PhpDocInheritanceResolver;
1919
use PHPStan\PhpDoc\StubPhpDocProvider;
20+
use PHPStan\PhpDoc\TypeStringResolver;
2021
use PHPStan\Reflection\AttributeReflectionFactory;
2122
use PHPStan\Reflection\Deprecation\DeprecationProvider;
2223
use PHPStan\Reflection\InitializerExprTypeResolver;
@@ -28,6 +29,7 @@
2829
use PHPStan\Type\ConstantScalarType;
2930
use PHPStan\Type\FileTypeMapper;
3031
use PHPStan\Type\Type;
32+
use PHPStan\Type\TypeCombinator;
3133
use PHPStan\Type\VerbosityLevel;
3234
use Symfony\Component\Finder\Finder;
3335
use function array_map;
@@ -203,12 +205,13 @@ public static function gatherAssertTypes(string $file): array
203205

204206
$relativePathHelper = new SystemAgnosticSimpleRelativePathHelper($fileHelper);
205207
$reflectionProvider = self::getContainer()->getByType(ReflectionProvider::class);
208+
$typeStringResolver = self::getContainer()->getByType(TypeStringResolver::class);
206209

207210
$file = $fileHelper->normalizePath($file);
208211

209212
$asserts = [];
210213
$delayedErrors = [];
211-
self::processFile($file, static function (Node $node, Scope $scope) use (&$asserts, &$delayedErrors, $file, $relativePathHelper, $reflectionProvider): void {
214+
self::processFile($file, static function (Node $node, Scope $scope) use (&$asserts, &$delayedErrors, $file, $relativePathHelper, $reflectionProvider, $typeStringResolver): void {
212215
if ($node instanceof InClassNode) {
213216
if (!$reflectionProvider->hasClass($node->getClassReflection()->getName())) {
214217
$delayedErrors[] = sprintf(
@@ -278,8 +281,16 @@ public static function gatherAssertTypes(string $file): array
278281
$node->getStartLine(),
279282
));
280283
}
284+
281285
$actualType = $scope->getType($node->getArgs()[1]->value);
282-
$assert = ['superType', $file, $expectedType->getValue(), $actualType->describe(VerbosityLevel::precise()), $expectedType->isSuperTypeOf($actualType)->yes(), $node->getStartLine()];
286+
$isCorrect = TypeCombinator::union(
287+
...array_map(
288+
fn ($expectedTypeString) => $typeStringResolver->resolve($expectedTypeString->getValue()),
289+
$expectedType->getConstantStrings(),
290+
),
291+
)->isSuperTypeOf($actualType)->yes();
292+
293+
$assert = ['superType', $file, $expectedType->getValue(), $actualType->describe(VerbosityLevel::precise()), $isCorrect, $node->getStartLine()];
283294
} elseif ($functionName === 'PHPStan\\Testing\\assertVariableCertainty') {
284295
$certainty = $node->getArgs()[0]->value;
285296
if (!$certainty instanceof StaticCall) {

0 commit comments

Comments
 (0)