Skip to content

Commit 18529dc

Browse files
committed
Add tests
1 parent c4948fe commit 18529dc

File tree

2 files changed

+81
-16
lines changed

2 files changed

+81
-16
lines changed

tests/PHPStan/Rules/Classes/InstantiationRuleTest.php

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -504,27 +504,39 @@ public function testClassString(): void
504504
$this->analyse([__DIR__ . '/data/class-string.php'], [
505505
[
506506
'Parameter #1 $i of class ClassString\A constructor expects int, string given.',
507-
26,
507+
65,
508508
],
509509
[
510510
'Parameter #1 $i of class ClassString\A constructor expects int, string given.',
511-
27,
511+
66,
512512
],
513513
[
514514
'Parameter #1 $i of class ClassString\A constructor expects int, string given.',
515-
28,
515+
67,
516+
],
517+
[
518+
'Parameter #1 $i of class ClassString\C constructor expects int, string given.',
519+
75,
520+
],
521+
[
522+
'Parameter #1 $i of class ClassString\C constructor expects int, string given.',
523+
76,
524+
],
525+
[
526+
'Parameter #1 $i of class ClassString\C constructor expects int, string given.',
527+
77,
516528
],
517529
[
518530
'Parameter #1 $i of class ClassString\A constructor expects int, string given.',
519-
31,
531+
85,
520532
],
521533
[
522534
'Parameter #1 $i of class ClassString\A constructor expects int, string given.',
523-
32,
535+
86,
524536
],
525537
[
526538
'Parameter #1 $i of class ClassString\A constructor expects int, string given.',
527-
34,
539+
87,
528540
],
529541
]);
530542
}

tests/PHPStan/Rules/Classes/data/class-string.php

Lines changed: 63 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,77 @@ public function __construct(public int $i)
1111
}
1212
}
1313

14-
class HelloWorld
14+
abstract class B
15+
{
16+
public function __construct(public int $i)
17+
{
18+
}
19+
}
20+
21+
class C extends B
22+
{
23+
}
24+
25+
interface D
26+
{
27+
}
28+
29+
class Foo
1530
{
1631
/**
1732
* @return class-string<A>
1833
*/
19-
public static function sayHelloBug(): string
34+
public static function returnClassStringA(): string
2035
{
2136
return A::class;
2237
}
38+
39+
/**
40+
* @return class-string<B>
41+
*/
42+
public static function returnClassStringB(): string
43+
{
44+
return B::class;
45+
}
46+
47+
/**
48+
* @return class-string<C>
49+
*/
50+
public static function returnClassStringC(): string
51+
{
52+
return C::class;
53+
}
54+
55+
/**
56+
* @return class-string<D>
57+
*/
58+
public static function returnClassStringD(): string
59+
{
60+
return D::class;
61+
}
2362
}
2463

25-
$classString = HelloWorld::sayHelloBug();
26-
$bug = new (HelloWorld::sayHelloBug())('O_O');
27-
$bug = new ($classString)('O_O');
28-
$bug = new $classString('O_O');
64+
$classString = Foo::returnClassStringA();
65+
$error = new (Foo::returnClassStringA())('O_O');
66+
$error = new ($classString)('O_O');
67+
$error = new $classString('O_O');
2968

30-
$className = A::class;
31-
$ok = new ($className)('O_O');
32-
$ok = new $className('O_O');
69+
$classString = Foo::returnClassStringB();
70+
$ok = new (Foo::returnClassStringB())('O_O');
71+
$ok = new ($classString)('O_O');
72+
$ok = new $classString('O_O');
3373

34-
$ok = new A('O_O');
74+
$classString = Foo::returnClassStringC();
75+
$error = new (Foo::returnClassStringC())('O_O');
76+
$error = new ($classString)('O_O');
77+
$error = new $classString('O_O');
78+
79+
$classString = Foo::returnClassStringD();
80+
$ok = new (Foo::returnClassStringD())('O_O');
81+
$ok = new ($classString)('O_O');
82+
$ok = new $classString('O_O');
83+
84+
$className = A::class;
85+
$error = new ($className)('O_O');
86+
$error = new $className('O_O');
87+
$error = new A('O_O');

0 commit comments

Comments
 (0)