diff --git a/src/Psalm/Codebase.php b/src/Psalm/Codebase.php index c0ca90926..ae0fab1a9 100644 --- a/src/Psalm/Codebase.php +++ b/src/Psalm/Codebase.php @@ -1162,8 +1162,6 @@ class Codebase * * Useful for emitting issues like InvalidArgument, where argument at the call site * should be a subset of the function parameter type. - * - * @psalm-suppress PossiblyUnusedMethod */ public function isTypeContainedByType( Type\Union $input_type, @@ -1184,8 +1182,6 @@ class Codebase * Useful for emitting issues like PossiblyInvalidArgument, where argument at the call * site should be a subtype of the function parameter type, but it's has some types that are * not a subtype of the required type. - * - * @psalm-suppress PossiblyUnusedMethod */ public function canTypeBeContainedByType( Type\Union $input_type, @@ -1207,7 +1203,6 @@ class Codebase * ``` * * @return array{Type\Union,Type\Union} - * @psalm-suppress PossiblyUnusedMethod */ public function getKeyValueParamsForTraversableObject(Type\Atomic $type): array { diff --git a/tests/CodebaseTest.php b/tests/CodebaseTest.php new file mode 100644 index 000000000..d3b913d3a --- /dev/null +++ b/tests/CodebaseTest.php @@ -0,0 +1,114 @@ +codebase = $this->project_analyzer->getCodebase(); + } + + /** + * @test + * @dataProvider typeContainments + * @return void + */ + public function isTypeContainedByType(string $input, string $container, bool $expected) + { + $input = Type::parseString($input); + $container = Type::parseString($container); + + $this->assertEquals( + $expected, + $this->codebase->isTypeContainedByType($input, $container), + 'Expected ' . $input->getId() . ($expected ? ' ' : ' not ') + . 'to be contained in ' . $container->getId() + ); + } + + + /** @return iterableassertEquals( + $expected, + $this->codebase->canTypeBeContainedByType($input, $container), + 'Expected ' . $input->getId() . ($expected ? ' ' : ' not ') + . 'to be contained in ' . $container->getId() + ); + } + + /** @return iterablegetTypes()); + + $expected_key_type = Type::parseString($expected[0]); + $expected_value_type = Type::parseString($expected[1]); + + $actual = $this->codebase->getKeyValueParamsForTraversableObject($input); + + $this->assertTrue( + $expected_key_type->equals($actual[0]), + 'Expected ' . $input->getId() . ' to have ' . $expected_key_type + . ' but got ' . $actual[0]->getId() + ); + + $this->assertTrue( + $expected_value_type->equals($actual[1]), + 'Expected ' . $input->getId() . ' to have ' . $expected_value_type + . ' but got ' . $actual[1]->getId() + ); + } + + /** @return iterable', ['int', 'string']]; + yield ['iterable