-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
PhpUnitDataProviderReturnTypeFixerTest.php
244 lines (223 loc) · 7.05 KB
/
PhpUnitDataProviderReturnTypeFixerTest.php
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
<?php
declare(strict_types=1);
/*
* This file is part of PHP CS Fixer.
*
* (c) Fabien Potencier <fabien@symfony.com>
* Dariusz Rumiński <dariusz.ruminski@gmail.com>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace PhpCsFixer\Tests\Fixer\PhpUnit;
use PhpCsFixer\Tests\Test\AbstractFixerTestCase;
/**
* @internal
*
* @covers \PhpCsFixer\Fixer\PhpUnit\PhpUnitDataProviderReturnTypeFixer
*/
final class PhpUnitDataProviderReturnTypeFixerTest extends AbstractFixerTestCase
{
/**
* @dataProvider provideFixCases
*/
public function testFix(string $expected, ?string $input = null): void
{
$this->doTest($expected, $input);
}
/**
* @return iterable<array{0: string, 1?: string}>
*/
public static function provideFixCases(): iterable
{
yield 'data provider with iterable return type' => [
'<?php
class FooTest extends TestCase {
/**
* @dataProvider provideFooCases
*/
public function testFoo() {}
public function provideFooCases() : iterable {}
}',
];
yield 'data provider without return type' => self::mapToTemplate(
': iterable',
'',
);
yield 'data provider with array return type' => self::mapToTemplate(
': iterable',
': array',
);
yield 'data provider with return type and comment' => self::mapToTemplate(
': /* foo */ iterable',
': /* foo */ array',
);
yield 'data provider with return type namespaced class' => self::mapToTemplate(
': iterable',
': Foo\Bar',
);
yield 'data provider with iterable return type in different case' => self::mapToTemplate(
': iterable',
': Iterable',
);
yield 'multiple data providers' => [
'<?php class FooTest extends TestCase {
/**
* @dataProvider provider4
* @dataProvider provider1
* @dataProvider provider5
* @dataProvider provider6
* @dataProvider provider2
* @dataProvider provider3
*/
public function testFoo() {}
public function provider1(): iterable {}
public function provider2(): iterable {}
public function provider3(): iterable {}
public function provider4(): iterable {}
public function provider5(): iterable {}
public function provider6(): iterable {}
}',
'<?php class FooTest extends TestCase {
/**
* @dataProvider provider4
* @dataProvider provider1
* @dataProvider provider5
* @dataProvider provider6
* @dataProvider provider2
* @dataProvider provider3
*/
public function testFoo() {}
public function provider1() {}
public function provider2() {}
public function provider3() {}
public function provider4() {}
public function provider5() {}
public function provider6() {}
}',
];
yield 'advanced case' => [
'<?php
class FooTest extends TestCase {
/**
* @dataProvider provideFooCases
* @dataProvider provideFooCases2
*/
public function testFoo()
{
/**
* @dataProvider someFunction
*/
$foo = /** foo */ function ($x) { return $x + 1; };
/**
* @dataProvider someFunction2
*/
/* foo */someFunction2();
}
/**
* @dataProvider provideFooCases3
*/
public function testBar() {}
public function provideFooCases(): iterable {}
public function provideFooCases2(): iterable {}
public function provideFooCases3(): iterable {}
public function someFunction() {}
public function someFunction2() {}
}',
'<?php
class FooTest extends TestCase {
/**
* @dataProvider provideFooCases
* @dataProvider provideFooCases2
*/
public function testFoo()
{
/**
* @dataProvider someFunction
*/
$foo = /** foo */ function ($x) { return $x + 1; };
/**
* @dataProvider someFunction2
*/
/* foo */someFunction2();
}
/**
* @dataProvider provideFooCases3
*/
public function testBar() {}
public function provideFooCases() {}
public function provideFooCases2() {}
public function provideFooCases3() {}
public function someFunction() {}
public function someFunction2() {}
}',
];
foreach (['abstract', 'final', 'private', 'protected', 'static', '/* private */'] as $modifier) {
yield sprintf('test function with %s modifier', $modifier) => [
sprintf('<?php
abstract class FooTest extends TestCase {
/**
* @dataProvider provideFooCases
*/
%s function testFoo() %s
public function provideFooCases(): iterable {}
}
', $modifier, 'abstract' === $modifier ? ';' : '{}'),
sprintf('<?php
abstract class FooTest extends TestCase {
/**
* @dataProvider provideFooCases
*/
%s function testFoo() %s
public function provideFooCases() {}
}
', $modifier, 'abstract' === $modifier ? ';' : '{}'),
];
}
}
/**
* @requires PHP <8.0
*
* @dataProvider provideFixPre80Cases
*/
public function testFixPre80(string $expected, ?string $input = null): void
{
$this->doTest($expected, $input);
}
/**
* @return iterable<array{string, string}>
*/
public static function provideFixPre80Cases(): iterable
{
yield 'data provider with return type namespaced class starting with iterable' => self::mapToTemplate(
': iterable \ Foo',
);
yield 'data provider with return type namespaced class and comments' => self::mapToTemplate(
': iterable/* Some info */\/* More info */Bar',
);
}
/**
* @return list<string>
*/
private static function mapToTemplate(string ...$types): array
{
static $template = '<?php
class FooTest extends TestCase {
/**
* @dataProvider provideFooCases
*/
public function testFoo() {}
/**
* @dataProvider provider
*/
public function testBar() {}
public function provideFooCases()%1$s {}
public function provider()%1$s {}
public function notProvider(): array {}
}';
return array_map(
static fn (string $type): string => sprintf($template, $type),
$types
);
}
}