Skip to content

Commit 2c43cf7

Browse files
committed
Added more unit tests
1 parent be782ce commit 2c43cf7

File tree

3 files changed

+112
-14
lines changed

3 files changed

+112
-14
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<?php declare(strict_types=1);
2+
3+
namespace MabeEnum\PHPStan\tests\unit;
4+
5+
use MabeEnum\Enum;
6+
use MabeEnumPHPStan\EnumDynamicReturnTypeExtension;
7+
use MabeEnumPHPStan\EnumMethodsClassReflectionExtension;
8+
use PHPStan\Reflection\Dummy\DummyMethodReflection;
9+
use PHPStan\Testing\TestCase;
10+
11+
class EnumDynamicReturnTypeExtensionTest extends TestCase
12+
{
13+
/**
14+
* @var EnumMethodsClassReflectionExtension
15+
*/
16+
protected $extension;
17+
18+
public function setUp(): void
19+
{
20+
$this->extension = new EnumDynamicReturnTypeExtension();
21+
}
22+
23+
public function testGetClass(): void
24+
{
25+
$this->assertSame(Enum::class, $this->extension->getClass());
26+
}
27+
28+
/** @dataProvider staticMethodsProvider */
29+
public function testIsStaticMethodSupportedShouldReturnTrue(string $method): void
30+
{
31+
$reflectionMethod = new DummyMethodReflection($method);
32+
$this->assertTrue($this->extension->isStaticMethodSupported($reflectionMethod));
33+
34+
$reflectionMethod = new DummyMethodReflection(strtolower($method));
35+
$this->assertTrue($this->extension->isStaticMethodSupported($reflectionMethod));
36+
37+
$reflectionMethod = new DummyMethodReflection(strtoupper($method));
38+
$this->assertTrue($this->extension->isStaticMethodSupported($reflectionMethod));
39+
}
40+
41+
public function testIsStaticMethodSupportedShouldReturnFalse(): void
42+
{
43+
$reflectionMethod = new DummyMethodReflection('fooBar');
44+
$this->assertFalse($this->extension->isStaticMethodSupported($reflectionMethod));
45+
}
46+
47+
/** @dataProvider objectMethodsProvider */
48+
public function testIsMethodSupportedShouldReturnTrue(string $method): void
49+
{
50+
$reflectionMethod = new DummyMethodReflection($method);
51+
$this->assertTrue($this->extension->isMethodSupported($reflectionMethod));
52+
53+
$reflectionMethod = new DummyMethodReflection(strtolower($method));
54+
$this->assertTrue($this->extension->isMethodSupported($reflectionMethod));
55+
56+
$reflectionMethod = new DummyMethodReflection(strtoupper($method));
57+
$this->assertTrue($this->extension->isMethodSupported($reflectionMethod));
58+
}
59+
60+
public function testIsMethodSupportedShouldReturnFalse(): void
61+
{
62+
$reflectionMethod = new DummyMethodReflection('fooBar');
63+
$this->assertFalse($this->extension->isMethodSupported($reflectionMethod));
64+
}
65+
66+
public function staticMethodsProvider(): array
67+
{
68+
$staticMethods = [];
69+
70+
if (method_exists(Enum::class, 'getValues')) {
71+
$staticMethods[] = ['getValues'];
72+
}
73+
74+
return $staticMethods;
75+
}
76+
77+
public function objectMethodsProvider(): array
78+
{
79+
return array_merge([
80+
['getValue'],
81+
], $this->staticMethodsProvider());
82+
}
83+
}

tests/unit/EnumMethodReflectionTest.php

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,12 @@
22

33
namespace MabeEnum\PHPStan\tests\unit;
44

5-
use MabeEnumPHPStan\EnumMethodReflection;
65
use MabeEnumPHPStan\EnumMethodsClassReflectionExtension;
76
use MabeEnum\PHPStan\tests\assets\DeprecatedEnum;
87
use MabeEnum\PHPStan\tests\assets\DocCommentEnum;
9-
use MabeEnum\PHPStan\tests\assets\NotAnEnum;
108
use MabeEnum\PHPStan\tests\assets\VisibilityEnum;
119
use PHPStan\Reflection\ParametersAcceptorSelector;
1210
use PHPStan\Testing\TestCase;
13-
use PHPStan\TrinaryLogic;
1411
use PHPStan\Type\VerbosityLevel;
1512

1613
class EnumMethodReflectionTest extends TestCase
@@ -98,10 +95,10 @@ public function testGetDocComment(): void
9895
$this->assertSame(null, $noDocMethodRefl->getDocComment());
9996

10097
// return the correct doc block
101-
$this->assertRegExp('/With doc block/', $docMethodRefl->getDocComment());
98+
$this->assertMatchesRegularExpression('/With doc block/', $docMethodRefl->getDocComment());
10299

103100
// remove @var declaration
104-
$this->assertNotRegExp('/@var/', $docMethodRefl->getDocComment());
101+
$this->assertDoesNotMatchRegularExpression('/@var/', $docMethodRefl->getDocComment());
105102
}
106103

107104
public function testIsDeprecated(): void
@@ -155,4 +152,24 @@ public function testHasSideEffects(): void
155152

156153
$this->assertTrue($methodReflection->hasSideEffects()->no());
157154
}
155+
156+
public static function assertMatchesRegularExpression(string $pattern, string $string, string $message = ''): void
157+
{
158+
if (method_exists(parent::class, 'assertMatchesRegularExpression')) {
159+
parent::assertMatchesRegularExpression($pattern, $string, $message);
160+
return;
161+
}
162+
163+
self::assertRegExp($pattern, $string, $message);
164+
}
165+
166+
public static function assertDoesNotMatchRegularExpression(string $pattern, string $string, string $message = ''): void
167+
{
168+
if (method_exists(parent::class, 'assertDoesNotMatchRegularExpression')) {
169+
parent::assertDoesNotMatchRegularExpression($pattern, $string, $message);
170+
return;
171+
}
172+
173+
self::assertNotRegExp($pattern, $string, $message);
174+
}
158175
}

tests/unit/EnumMethodsClassReflectionExtensionTest.php

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
<?php declare(strict_types=1);
22

3-
namespace MabeEnum\PHPStan\UnitTest;
3+
namespace MabeEnum\PHPStan\tests\unit;
44

55
use MabeEnumPHPStan\EnumMethodReflection;
66
use MabeEnumPHPStan\EnumMethodsClassReflectionExtension;
77
use MabeEnum\PHPStan\tests\assets\NotAnEnum;
88
use MabeEnum\PHPStan\tests\assets\VisibilityEnum;
9-
use PHPStan\Reflection\ParametersAcceptorSelector;
109
use PHPStan\Testing\TestCase;
11-
use PHPStan\Type\VerbosityLevel;
1210

1311
class EnumMethodsClassReflectionExtensionTest extends TestCase
1412
{
@@ -20,41 +18,41 @@ class EnumMethodsClassReflectionExtensionTest extends TestCase
2018
/**
2119
* @var EnumMethodsClassReflectionExtension
2220
*/
23-
protected $reflectionExtension;
21+
protected $extension;
2422

2523
public function setUp(): void
2624
{
2725
$this->broker = $this->createBroker();
28-
$this->reflectionExtension = new EnumMethodsClassReflectionExtension();
26+
$this->extension = new EnumMethodsClassReflectionExtension();
2927
}
3028

3129
public function testHasMethodSuccess(): void
3230
{
3331
$classReflection = $this->broker->getClass(VisibilityEnum::class);
3432

3533
foreach (array_keys(VisibilityEnum::getConstants()) as $name) {
36-
$this->assertTrue($this->reflectionExtension->hasMethod($classReflection, $name));
34+
$this->assertTrue($this->extension->hasMethod($classReflection, $name));
3735
}
3836
}
3937

4038
public function testHasMethodUnknownNotFound(): void
4139
{
4240
$classReflection = $this->broker->getClass(VisibilityEnum::class);
43-
$this->assertFalse($this->reflectionExtension->hasMethod($classReflection, 'UNKNOWN'));
41+
$this->assertFalse($this->extension->hasMethod($classReflection, 'UNKNOWN'));
4442
}
4543

4644
public function testHasMethodNotSubclassOfEnumNotFound(): void
4745
{
4846
$classReflection = $this->broker->getClass(NotAnEnum::class);
49-
$this->assertFalse($this->reflectionExtension->hasMethod($classReflection, 'STR'));
47+
$this->assertFalse($this->extension->hasMethod($classReflection, 'STR'));
5048
}
5149

5250
public function testGetMethodSuccess(): void
5351
{
5452
$classReflection = $this->broker->getClass(VisibilityEnum::class);
5553

5654
foreach (array_keys(VisibilityEnum::getConstants()) as $name) {
57-
$methodReflection = $this->reflectionExtension->getMethod($classReflection, $name);
55+
$methodReflection = $this->extension->getMethod($classReflection, $name);
5856

5957
$this->assertInstanceOf(EnumMethodReflection::class, $methodReflection);
6058
$this->assertSame($classReflection, $methodReflection->getDeclaringClass());

0 commit comments

Comments
 (0)