-
Notifications
You must be signed in to change notification settings - Fork 569
Expand file tree
/
Copy pathConstantAttributesRuleTest.php
More file actions
131 lines (122 loc) · 3.2 KB
/
ConstantAttributesRuleTest.php
File metadata and controls
131 lines (122 loc) · 3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<?php declare(strict_types = 1);
namespace PHPStan\Rules\Constants;
use PHPStan\Php\PhpVersion;
use PHPStan\Rules\AttributesCheck;
use PHPStan\Rules\ClassCaseSensitivityCheck;
use PHPStan\Rules\ClassForbiddenNameCheck;
use PHPStan\Rules\ClassNameCheck;
use PHPStan\Rules\FunctionCallParametersCheck;
use PHPStan\Rules\NullsafeCheck;
use PHPStan\Rules\PhpDoc\UnresolvableTypeHelper;
use PHPStan\Rules\Properties\PropertyReflectionFinder;
use PHPStan\Rules\Rule;
use PHPStan\Rules\RuleLevelHelper;
use PHPStan\Testing\RuleTestCase;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\RequiresPhp;
use const PHP_VERSION_ID;
/**
* @extends RuleTestCase<ConstantAttributesRule>
*/
class ConstantAttributesRuleTest extends RuleTestCase
{
private int $phpVersion = PHP_VERSION_ID;
protected function getRule(): Rule
{
$reflectionProvider = self::createReflectionProvider();
$container = self::getContainer();
return new ConstantAttributesRule(
new AttributesCheck(
$reflectionProvider,
new FunctionCallParametersCheck(
new RuleLevelHelper($reflectionProvider, true, false, true, true, true, false, true),
new NullsafeCheck(),
new UnresolvableTypeHelper(),
new PropertyReflectionFinder(),
$reflectionProvider,
true,
true,
true,
true,
),
new ClassNameCheck(
new ClassCaseSensitivityCheck($reflectionProvider, false),
new ClassForbiddenNameCheck($container),
$reflectionProvider,
$container,
),
true,
),
new PhpVersion($this->phpVersion),
);
}
#[RequiresPhp('>= 8.5')]
public function testRule(): void
{
$this->analyse([__DIR__ . '/data/constant-attributes.php'], [
[
'Attribute class ConstantAttributes\IncompatibleAttr does not have the constant target.',
31,
],
[
'Attribute class ConstantAttributes\MyAttr does not have a constructor and must be instantiated without any parameters.',
34,
],
]);
}
public static function dataRuleBefore85Runtime(): iterable
{
yield [
80400,
[
[
'Attributes on global constants are supported only on PHP 8.5 and later.',
25,
],
[
'Attributes on global constants are supported only on PHP 8.5 and later.',
28,
],
[
'Attributes on global constants are supported only on PHP 8.5 and later.',
31,
],
[
'Attributes on global constants are supported only on PHP 8.5 and later.',
34,
],
],
];
yield [
80500,
[
[
'ConstantAttributesRule requires PHP 8.5 runtime to check the code.',
25,
],
[
'ConstantAttributesRule requires PHP 8.5 runtime to check the code.',
28,
],
[
'ConstantAttributesRule requires PHP 8.5 runtime to check the code.',
31,
],
[
'ConstantAttributesRule requires PHP 8.5 runtime to check the code.',
34,
],
],
];
}
/**
* @param list<array{0: string, 1: int, 2?: string|null}> $expectedErrors
*/
#[RequiresPhp('< 8.5')]
#[DataProvider('dataRuleBefore85Runtime')]
public function testRuleBefore85Runtime(int $phpVersionId, array $expectedErrors): void
{
$this->phpVersion = $phpVersionId;
$this->analyse([__DIR__ . '/data/constant-attributes.php'], $expectedErrors);
}
}