8000 minor #59848 [TypeInfo] rewrite tests to not fail when self/parent ar… · symfony/symfony@a9f661e · GitHub
[go: up one dir, main page]

Skip to content

Commit a9f661e

Browse files
committed
minor #59848 [TypeInfo] rewrite tests to not fail when self/parent are resolved at compile time (xabbuh)
This PR was merged into the 7.2 branch. Discussion ---------- [TypeInfo] rewrite tests to not fail when self/parent are resolved at compile time | Q | A | ------------- | --- | Branch? | 7.2 | Bug fix? | no | New feature? | no | Deprecations? | no | Issues | | License | MIT see php/php-src#17755 Commits ------- 9ea45d0 rewrite tests to not fail when self/parent are resolved at compile time
2 parents b7a8ab3 + 9ea45d0 commit a9f661e

6 files changed

+125
-22
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\TypeInfo\Tests\Fixtures;
13+
14+
class ReflectionExtractableDummyUsingTrait
15+
{
16+
use ReflectionExtractableTrait;
17+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\TypeInfo\Tests\Fixtures;
13+
14+
trait ReflectionExtractableTrait
15+
{
16+
public self $self;
17+
18+
public function getSelf(): self
19+
{
20+
return $this;
21+
}
22+
23+
public function setSelf(self $self): void
24+
{
25+
$this->self = $self;
26+
}
27+
}

src/Symfony/Component/TypeInfo/Tests/TypeResolver/ReflectionParameterTypeResolverTest.php

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\TypeInfo\Exception\UnsupportedException;
1616
use Symfony\Component\TypeInfo\Tests\Fixtures\ReflectionExtractableDummy;
17+
use Symfony\Component\TypeInfo\Tests\Fixtures\ReflectionExtractableDummyUsingTrait;
18+
use Symfony\Component\TypeInfo\Tests\Fixtures\ReflectionExtractableTrait;
1719
use Symfony\Component\TypeInfo\Type;
1820
use Symfony\Component\TypeInfo\TypeContext\TypeContextFactory;
1921
use Symfony\Component\TypeInfo\TypeResolver\ReflectionParameterTypeResolver;
@@ -71,15 +73,29 @@ public function testResolveOptionalParameter()
7173
$this->assertEquals(Type::nullable(Type::int()), $this->resolver->resolve($reflectionParameter));
7274
}
7375

74-
public function testCreateTypeContextOrUseProvided()
76+
public function testResolveSelfFromClassWithoutContext()
7577
{
7678
$reflectionClass = new \ReflectionClass(ReflectionExtractableDummy::class);
7779
$reflectionParameter = $reflectionClass->getMethod('setSelf')->getParameters()[0];
7880

7981
$this->assertEquals(Type::object(ReflectionExtractableDummy::class), $this->resolver->resolve($reflectionParameter));
82+
}
83+
84+
public function testResolveSelfFromTraitWithoutContext()
85+
{
86+
$reflectionClass = new \ReflectionClass(ReflectionExtractableTrait::class);
87+
$reflectionParameter = $reflectionClass->getMethod('setSelf')->getParameters()[0];
88+
89+
$this->assertEquals(Type::object(ReflectionExtractableTrait::class), $this->resolver->resolve($reflectionParameter));
90+
}
91+
92+
public function testResolveSelfFromTraitWithClassContext()
93+
{
94+
$reflectionClass = new \ReflectionClass(ReflectionExtractableTrait::class);
95+
$reflectionParameter = $reflectionClass->getMethod('setSelf')->getParameters()[0];
8096

81-
$typeContext = (new TypeContextFactory())->createFromClassName(self::class);
97+
$typeContext = (new TypeContextFactory())->createFromClassName(ReflectionExtractableDummyUsingTrait::class);
8298

83-
$this->assertEquals(Type::object(self::class), $this->resolver->resolve($reflectionParameter, $typeContext));
99+
$this->assertEquals(Type::object(ReflectionExtractableDummyUsingTrait::class), $this->resolver->resolve($reflectionParameter, $typeContext));
84100
}
85101
}

src/Symfony/Component/TypeInfo/Tests/TypeResolver/ReflectionPropertyTypeResolverTest.php

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\TypeInfo\Exception\UnsupportedException;
1616
use Symfony\Component\TypeInfo\Tests\Fixtures\ReflectionExtractableDummy;
17+
use Symfony\Component\TypeInfo\Tests\Fixtures\ReflectionExtractableDummyUsingTrait;
18+
use Symfony\Component\TypeInfo\Tests\Fixtures\ReflectionExtractableTrait;
1719
use Symfony\Component\TypeInfo\Type;
1820
use Symfony\Component\TypeInfo\TypeContext\TypeContextFactory;
1921
use Symfony\Component\TypeInfo\TypeResolver\ReflectionPropertyTypeResolver;
@@ -52,15 +54,29 @@ public function testResolve()
5254
$this->assertEquals(Type::int(), $this->resolver->resolve($reflectionProperty));
5355
}
5456

55-
public function testCreateTypeContextOrUseProvided()
57+
public function testResolveSelfFromClassWithoutContext()
5658
{
5759
$reflectionClass = new \ReflectionClass(ReflectionExtractableDummy::class);
5860
$reflectionProperty = $reflectionClass->getProperty('self');
5961

6062
$this->assertEquals(Type::object(ReflectionExtractableDummy::class), $this->resolver->resolve($reflectionProperty));
63+
}
64+
65+
public function testResolveSelfFromTraitWithoutContext()
66+
{
67+
$reflectionClass = new \ReflectionClass(ReflectionExtractableTrait::class);
68+
$reflectionProperty = $reflectionClass->getProperty('self');
69+
70+
$this->assertEquals(Type::object(ReflectionExtractableTrait::class), $this->resolver->resolve($reflectionProperty));
71+
}
72+
73+
public function testResolveSelfFromTraitWithClassContext()
74+
{
75+
$reflectionClass = new \ReflectionClass(ReflectionExtractableTrait::class);
76+
$reflectionProperty = $reflectionClass->getProperty('self');
6177

62-
$typeContext = (new TypeContextFactory())->createFromClassName(self::class);
78+
$typeContext = (new TypeContextFactory())->createFromClassName(ReflectionExtractableDummyUsingTrait::class);
6379

64-
$this->assertEquals(Type::object(self::class), $this->resolver->resolve($reflectionProperty, $typeContext));
80+
$this->assertEquals(Type::object(ReflectionExtractableDummyUsingTrait::class), $this->resolver->resolve($reflectionProperty, $typeContext));
6581
}
6682
}

src/Symfony/Component/TypeInfo/Tests/TypeResolver/ReflectionReturnTypeResolverTest.php

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\TypeInfo\Exception\UnsupportedException;
1616
use Symfony\Component\TypeInfo\Tests\Fixtures\ReflectionExtractableDummy;
17+
use Symfony\Component\TypeInfo\Tests\Fixtures\ReflectionExtractableDummyUsingTrait;
18+
use Symfony\Component\TypeInfo\Tests\Fixtures\ReflectionExtractableTrait;
1719
use Symfony\Component\TypeInfo\Type;
1820
use Symfony\Component\TypeInfo\TypeContext\TypeContextFactory;
1921
use Symfony\Component\TypeInfo\TypeResolver\ReflectionReturnTypeResolver;
@@ -62,15 +64,29 @@ public function testResolve()
6264
$this->assertEquals(Type::int(), $this->resolver->resolve($reflectionFunction));
6365
}
6466

65-
public function testCreateTypeContextOrUseProvided()
67+
public function testResolveSelfFromClassWithoutContext()
6668
{
6769
$reflectionClass = new \ReflectionClass(ReflectionExtractableDummy::class);
6870
$reflectionFunction = $reflectionClass->getMethod('getSelf');
6971

7072
$this->assertEquals(Type::object(ReflectionExtractableDummy::class), $this->resolver->resolve($reflectionFunction));
73+
}
74+
75+
public function testResolveSelfFromTraitWithoutContext()
76+
{
77+
$reflectionClass = new \ReflectionClass(ReflectionExtractableTrait::class);
78+
$reflectionFunction = $reflectionClass->getMethod('getSelf');
79+
80+
$this->assertEquals(Type::object(ReflectionExtractableTrait::class), $this->resolver->resolve($reflectionFunction));
81+
}
82+
83+
public function testResolveSelfFromTraitWithClassContext()
84+
{
85+
$reflectionClass = new \ReflectionClass(ReflectionExtractableTrait::class);
86+
$reflectionFunction = $reflectionClass->getMethod('getSelf');
7187

72-
$typeContext = (new TypeContextFactory())->createFromClassName(self::class);
88+
$typeContext = (new TypeContextFactory())->createFromClassName(ReflectionExtractableDummyUsingTrait::class);
7389

74-
$this->assertEquals(Type::object(self::class), $this->resolver->resolve($reflectionFunction, $typeContext));
90+
$this->assertEquals(Type::object(ReflectionExtractableDummyUsingTrait::class), $this->resolver->resolve($reflectionFunction, $typeContext));
7591
}
7692
}

src/Symfony/Component/TypeInfo/Tests/TypeResolver/ReflectionTypeResolverTest.php

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -77,24 +77,35 @@ public function testCannotResolveNonProperReflectionType()
7777
$this->resolver->resolve(new \ReflectionClass(self::class));
7878
}
7979

80-
/**
81-
* @dataProvider classKeywordsTypesDataProvider
82-
*/
83-
public function testCannotResolveClassKeywordsWithoutTypeContext(\ReflectionType $reflection)
80+
public function testCannotResolveStaticKeywordWithoutTypeContext()
8481
{
82+
$subject = (new \ReflectionClass(ReflectionExtractableDummy::class))->getMethod('getStatic')->getReturnType();
83+
8584
$this->expectException(InvalidArgumentException::class);
86-
$this->resolver->resolve($reflection);
85+
$this->resolver->resolve($subject);
8786
}
8887

89-
/**
90-
* @return iterable<array{0: \ReflectionType}>
91-
*/
92-
public static function classKeywordsTypesDataProvider(): iterable
88+
public function testResolveSelfKeywordWithoutTypeContext()
9389
{
94-
$reflection = new \ReflectionClass(ReflectionExtractableDummy::class);
90+
$subject = (new \ReflectionClass(ReflectionExtractableDummy::class))->getProperty('self')->getType();
91+
92+
if (\PHP_VERSION_ID >= 80500) {
93+
$this->assertEquals(Type::object(ReflectionExtractableDummy::class), $this->resolver->resolve($subject));
94+
} else {
95+
$this->expectException(InvalidArgumentException::class);
96+
$this->resolver->resolve($subject);
97+
}
98+
}
99+
100+
public function testResolveParentKeywordsWithoutTypeContext()
101+
{
102+
$subject = (new \ReflectionClass(ReflectionExtractableDummy::class))->getProperty('parent')->getType();
95103

96-
yield [$reflection->getProperty('self')->getType()];
97-
yield [$reflection->getMethod('getStatic')->getReturnType()];
98-
yield [$reflection->getProperty('parent')->getType()];
104+
if (\PHP_VERSION_ID >= 80500) {
105+
$this->assertEquals(Type::object(AbstractDummy::class), $this->resolver->resolve($subject));
106+
} else {
107+
$this->expectException(InvalidArgumentException::class);
108+
$this->resolver->resolve($subject);
109+
}
99110
}
100111
}

0 commit comments

Comments
 (0)
0