2021-08-17 18:40:11 +02:00
|
|
|
<?php
|
2021-12-15 04:42:37 +01:00
|
|
|
|
2021-08-17 18:40:11 +02:00
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
|
|
namespace Psalm\Tests\Internal\Codebase;
|
|
|
|
|
|
|
|
use Psalm\Internal\Codebase\ClassLikes;
|
|
|
|
use Psalm\Internal\Provider\ClassLikeStorageProvider;
|
|
|
|
use Psalm\Storage\ClassLikeStorage;
|
|
|
|
use Psalm\Tests\TestCase;
|
|
|
|
|
|
|
|
final class ClassLikesTest extends TestCase
|
|
|
|
{
|
2022-12-16 19:58:47 +01:00
|
|
|
private ClassLikes $classlikes;
|
|
|
|
|
|
|
|
private ClassLikeStorageProvider $storage_provider;
|
2021-08-17 18:40:11 +02:00
|
|
|
|
|
|
|
public function setUp(): void
|
|
|
|
{
|
|
|
|
parent::setUp();
|
2021-08-17 21:46:00 +02:00
|
|
|
$this->classlikes = $this->project_analyzer->getCodebase()->classlikes;
|
|
|
|
$this->storage_provider = $this->project_analyzer->getCodebase()->classlike_storage_provider;
|
2021-08-17 18:40:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public function testWillDetectClassImplementingAliasedInterface(): void
|
|
|
|
{
|
2022-09-08 14:41:55 +02:00
|
|
|
$this->classlikes->addClassAlias('Foo', 'Bar');
|
2021-08-17 18:40:11 +02:00
|
|
|
|
|
|
|
$classStorage = new ClassLikeStorage('Baz');
|
|
|
|
$classStorage->class_implements['bar'] = 'Bar';
|
|
|
|
|
2021-08-17 21:46:00 +02:00
|
|
|
$this->storage_provider->addMore(['baz' => $classStorage]);
|
2021-08-17 18:40:11 +02:00
|
|
|
|
2021-08-17 21:46:00 +02:00
|
|
|
self::assertTrue($this->classlikes->classImplements('Baz', 'Foo'));
|
2021-08-17 18:40:11 +02:00
|
|
|
}
|
2021-08-18 16:18:44 +02:00
|
|
|
|
|
|
|
public function testWillResolveAliasedAliases(): void
|
|
|
|
{
|
2022-09-08 14:41:55 +02:00
|
|
|
$this->classlikes->addClassAlias('Foo', 'Bar');
|
|
|
|
$this->classlikes->addClassAlias('Bar', 'Baz');
|
|
|
|
$this->classlikes->addClassAlias('Baz', 'Qoo');
|
2021-08-18 16:18:44 +02:00
|
|
|
|
|
|
|
self::assertSame('Foo', $this->classlikes->getUnAliasedName('Qoo'));
|
|
|
|
}
|
2021-08-17 18:40:11 +02:00
|
|
|
}
|