Skip to content

Commit 615d5e6

Browse files
committed
Add tests
1 parent f4cfd00 commit 615d5e6

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
@@ -509,27 +509,39 @@ public function testClassString(): void
509509
$this->analyse([__DIR__ . '/data/class-string.php'], [
510510
[
511511
'Parameter #1 $i of class ClassString\A constructor expects int, string given.',
512-
26,
512+
65,
513513
],
514514
[
515515
'Parameter #1 $i of class ClassString\A constructor expects int, string given.',
516-
27,
516+
66,
517517
],
518518
[
519519
'Parameter #1 $i of class ClassString\A constructor expects int, string given.',
520-
28,
520+
67,
521+
],
522+
[
523+
'Parameter #1 $i of class ClassString\C constructor expects int, string given.',
524+
75,
525+
],
526+
[
527+
'Parameter #1 $i of class ClassString\C constructor expects int, string given.',
528+
76,
529+
],
530+
[
531+
'Parameter #1 $i of class ClassString\C constructor expects int, string given.',
532+
77,
521533
],
522534
[
523535
'Parameter #1 $i of class ClassString\A constructor expects int, string given.',
524-
31,
536+
85,
525537
],
526538
[
527539
'Parameter #1 $i of class ClassString\A constructor expects int, string given.',
528-
32,
540+
86,
529541
],
530542
[
531543
'Parameter #1 $i of class ClassString\A constructor expects int, string given.',
532-
34,
544+
87,
533545
],
534546
]);
535547
}

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)