Skip to content

Commit fe4e107

Browse files
committed
add test
1 parent dcd69eb commit fe4e107

File tree

1 file changed

+71
-0
lines changed

1 file changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<?php
2+
3+
namespace StaticWithThisChained;
4+
5+
use function PHPStan\Testing\assertType;
6+
7+
class Foo
8+
{
9+
/** @var $this */
10+
public $propThis;
11+
12+
/** @var static */
13+
public $propStatic;
14+
15+
/** @var static */
16+
public static $propStaticStatic;
17+
18+
/**
19+
* @return $this
20+
*/
21+
public function getThis()
22+
{
23+
return $this;
24+
}
25+
26+
/**
27+
* @return static
28+
*/
29+
public function newStatic()
30+
{
31+
return new static();
32+
}
33+
34+
/**
35+
* @return static
36+
*/
37+
public static function newStaticStatic()
38+
{
39+
return new static();
40+
}
41+
42+
public function testMethodChained(): void
43+
{
44+
assertType('$this(StaticWithThisChained\Foo)', $this->getThis());
45+
assertType('static(StaticWithThisChained\Foo)', $this->newStatic());
46+
assertType('static(StaticWithThisChained\Foo)', static::newStaticStatic());
47+
assertType('StaticWithThisChained\Foo', self::newStaticStatic());
48+
assertType('StaticWithThisChained\Foo', Foo::newStaticStatic());
49+
50+
assertType('$this(StaticWithThisChained\Foo)', $this->getThis()->getThis());
51+
assertType('static(StaticWithThisChained\Foo)', $this->newStatic()->getThis());
52+
assertType('static(StaticWithThisChained\Foo)', static::newStaticStatic()->getThis());
53+
assertType('StaticWithThisChained\Foo', self::newStaticStatic()->getThis());
54+
assertType('StaticWithThisChained\Foo', Foo::newStaticStatic()->getThis());
55+
}
56+
57+
public function testPropertyChained(): void
58+
{
59+
assertType('$this(StaticWithThisChained\Foo)', $this->propThis);
60+
assertType('static(StaticWithThisChained\Foo)', $this->propStatic);
61+
assertType('static(StaticWithThisChained\Foo)', static::$propStaticStatic);
62+
assertType('StaticWithThisChained\Foo', self::$propStaticStatic);
63+
assertType('StaticWithThisChained\Foo', Foo::$propStaticStatic);
64+
65+
assertType('$this(StaticWithThisChained\Foo)', $this->propThis->propThis);
66+
assertType('static(StaticWithThisChained\Foo)', $this->propStatic->propThis);
67+
assertType('static(StaticWithThisChained\Foo)', static::$propStaticStatic->propThis);
68+
assertType('StaticWithThisChained\Foo', self::$propStaticStatic->propThis);
69+
assertType('StaticWithThisChained\Foo', Foo::$propStaticStatic->propThis);
70+
}
71+
}

0 commit comments

Comments
 (0)