Skip to content

Commit f715fbf

Browse files
committed
extract PHPUnitVersionDetector
1 parent 3318b73 commit f715fbf

File tree

6 files changed

+85
-11
lines changed

6 files changed

+85
-11
lines changed

extension.neon

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,14 @@ services:
5050
-
5151
class: PHPStan\Rules\PHPUnit\AnnotationHelper
5252

53+
-
54+
class: PHPStan\Rules\PHPUnit\PHPUnitVersionDetector
55+
5356
-
5457
class: PHPStan\Rules\PHPUnit\TestMethodsHelper
58+
factory: @PHPStan\Rules\PHPUnit\TestMethodsHelperFactory::create()
59+
-
60+
class: PHPStan\Rules\PHPUnit\TestMethodsHelperFactory
5561
arguments:
5662
parser: @defaultAnalysisParser
5763

src/Rules/PHPUnit/DataProviderHelperFactory.php

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@
55
use PHPStan\Parser\Parser;
66
use PHPStan\Reflection\ReflectionProvider;
77
use PHPStan\Type\FileTypeMapper;
8+
use PHPUnit\Framework\TestCase;
9+
use function dirname;
10+
use function explode;
11+
use function file_get_contents;
12+
use function is_file;
13+
use function json_decode;
814

915
class DataProviderHelperFactory
1016
{
@@ -21,7 +27,7 @@ public function __construct(
2127
ReflectionProvider $reflectionProvider,
2228
FileTypeMapper $fileTypeMapper,
2329
Parser $parser,
24-
PHPUnitVersionDetector $PHPUnitVersionDetector
30+
PHPUnitVersionDetector $PHPUnitVersionDetector,
2531
)
2632
{
2733
$this->reflectionProvider = $reflectionProvider;

src/Rules/PHPUnit/TestMethodsHelper.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,19 @@ final class TestMethodsHelper
2121

2222
private Parser $parser;
2323

24+
private bool $phpunit10OrNewer;
25+
2426
public function __construct(
2527
ReflectionProvider $reflectionProvider,
2628
FileTypeMapper $fileTypeMapper,
27-
Parser $parser
29+
Parser $parser,
30+
bool $phpunit10OrNewer,
2831
)
2932
{
3033
$this->reflectionProvider = $reflectionProvider;
3134
$this->fileTypeMapper = $fileTypeMapper;
3235
$this->parser = $parser;
36+
$this->phpunit10OrNewer = $phpunit10OrNewer;
3337
}
3438

3539
/**
@@ -64,12 +68,9 @@ public function getTestMethods(ClassReflection $classReflection, Scope $scope):
6468
}
6569
}
6670

67-
// todo: detect tests with @test annotation
68-
69-
// XXX
70-
//if (!$this->phpunit10OrNewer) {
71-
// return;
72-
//}
71+
if (!$this->phpunit10OrNewer) {
72+
continue;
73+
}
7374

7475
$testAttributes = $reflectionMethod->getAttributes('PHPUnit\Framework\Attributes\Test');
7576
if ($testAttributes === []) {
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace PHPStan\Rules\PHPUnit;
4+
5+
use PHPStan\Parser\Parser;
6+
use PHPStan\Reflection\ReflectionProvider;
7+
use PHPStan\Type\FileTypeMapper;
8+
use PHPUnit\Framework\TestCase;
9+
use function dirname;
10+
use function explode;
11+
use function file_get_contents;
12+
use function is_file;
13+
use function json_decode;
14+
15+
class TestMethodsHelperFactory
16+
{
17+
18+
private ReflectionProvider $reflectionProvider;
19+
20+
private FileTypeMapper $fileTypeMapper;
21+
22+
private Parser $parser;
23+
24+
private PHPUnitVersionDetector $PHPUnitVersionDetector;
25+
26+
public function __construct(
27+
ReflectionProvider $reflectionProvider,
28+
FileTypeMapper $fileTypeMapper,
29+
Parser $parser,
30+
PHPUnitVersionDetector $PHPUnitVersionDetector,
31+
)
32+
{
33+
$this->reflectionProvider = $reflectionProvider;
34+
$this->fileTypeMapper = $fileTypeMapper;
35+
$this->parser = $parser;
36+
$this->PHPUnitVersionDetector = $PHPUnitVersionDetector;
37+
}
38+
39+
public function create(): TestMethodsHelper
40+
{
41+
return new TestMethodsHelper($this->reflectionProvider, $this->fileTypeMapper, $this->parser, $this->PHPUnitVersionDetector->isPHPUnit10OrNewer());
42+
}
43+
44+
}

tests/Rules/PHPUnit/DataProviderDataRuleTest.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use PHPStan\Rules\PhpDoc\UnresolvableTypeHelper;
1212
use PHPStan\Rules\PHPUnit\DataProviderDataRule;
1313
use PHPStan\Rules\PHPUnit\DataProviderHelper;
14+
use PHPStan\Rules\PHPUnit\PHPUnitVersionDetector;
1415
use PHPStan\Rules\PHPUnit\TestMethodsHelper;
1516
use PHPStan\Rules\Properties\PropertyReflectionFinder;
1617
use PHPStan\Rules\Rule;
@@ -30,8 +31,19 @@ protected function getRule(): Rule
3031

3132
return new CompositeRule(new DirectRegistry([
3233
new DataProviderDataRule(
33-
new TestMethodsHelper($reflectionProvider, self::getContainer()->getByType(FileTypeMapper::class), self::getContainer()->getService('defaultAnalysisParser')),
34-
new DataProviderHelper($reflectionProvider, self::getContainer()->getByType(FileTypeMapper::class), self::getContainer()->getService('defaultAnalysisParser'), true),
34+
new TestMethodsHelper(
35+
$reflectionProvider,
36+
self::getContainer()->getByType(FileTypeMapper::class),
37+
self::getContainer()->getService('defaultAnalysisParser'),
38+
true
39+
),
40+
new DataProviderHelper(
41+
$reflectionProvider,
42+
self::getContainer()->getByType(FileTypeMapper::class),
43+
self::getContainer()->getService('defaultAnalysisParser'),
44+
true
45+
),
46+
3547
),
3648
self::getContainer()->getByType(CallMethodsRule::class)
3749
]));

tests/Rules/PHPUnit/DataProviderDeclarationRuleTest.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,12 @@ protected function getRule(): Rule
1717
$reflection = $this->createReflectionProvider();
1818

1919
return new DataProviderDeclarationRule(
20-
new DataProviderHelper($reflection, self::getContainer()->getByType(FileTypeMapper::class), self::getContainer()->getService('defaultAnalysisParser'), true),
20+
new DataProviderHelper(
21+
$reflection,
22+
self::getContainer()->getByType(FileTypeMapper::class),
23+
self::getContainer()->getService('defaultAnalysisParser'),
24+
true
25+
),
2126
true,
2227
true
2328
);

0 commit comments

Comments
 (0)