Skip to content

Commit 3838002

Browse files
Add non regression test for 3589
1 parent 8ae740c commit 3838002

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

tests/PHPStan/Rules/Methods/CallMethodsRuleTest.php

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3608,6 +3608,25 @@ public function testBug9141(): void
36083608
$this->analyse([__DIR__ . '/data/bug-9141.php'], []);
36093609
}
36103610

3611+
public function testBug3589(): void
3612+
{
3613+
$this->checkThisOnly = false;
3614+
$this->checkNullables = true;
3615+
$this->checkUnionTypes = true;
3616+
$this->checkExplicitMixed = true;
3617+
3618+
$this->analyse([__DIR__ . '/data/bug-3589.php'], [
3619+
[
3620+
'Parameter #1 $fooId of method Bug3589\FooRepository::load() expects Bug3589\Id<Bug3589\Foo>, Bug3589\Id<Bug3589\Bar> given.',
3621+
35,
3622+
],
3623+
[
3624+
'Parameter #1 $fooId of method Bug3589\FooRepository::load() expects Bug3589\Id<Bug3589\Foo>, Bug3589\Id<mixed> given.',
3625+
41,
3626+
],
3627+
]);
3628+
}
3629+
36113630
public function testBug3396(): void
36123631
{
36133632
$this->checkThisOnly = false;
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Bug3589;
4+
5+
class Foo{}
6+
class Bar{}
7+
8+
/**
9+
* @template Tpl
10+
*/
11+
class Id{}
12+
13+
class FooRepository
14+
{
15+
/**
16+
* @param Id<Foo> $fooId
17+
*/
18+
public function load(Id $fooId): Foo
19+
{
20+
// ...
21+
return new Foo;
22+
}
23+
}
24+
25+
$fooRepository = new FooRepository;
26+
27+
// Expected behavior: no error
28+
/** @var Id<Foo> */
29+
$fooId = new Id;
30+
$fooRepository->load($fooId);
31+
32+
// Expected behavior: error on line 33
33+
/** @var Id<Bar> */
34+
$barId = new Id;
35+
$fooRepository->load($barId);
36+
37+
// Expected behavior: errors
38+
// - line 38 - Template Tpl is not specified
39+
// - line 39 - Parameter #1 fooId of method FooRepository::load() expects Id<Foo>, nonspecified Id given.
40+
$unknownId = new Id;
41+
$fooRepository->load($unknownId);

0 commit comments

Comments
 (0)