Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\simpletest\Unit;
|
Chris@0
|
4
|
Chris@0
|
5 use Composer\Autoload\ClassLoader;
|
Chris@18
|
6 use Drupal\Core\DependencyInjection\Container;
|
Chris@18
|
7 use Drupal\Core\DrupalKernel;
|
Chris@0
|
8 use Drupal\Core\Extension\Extension;
|
Chris@0
|
9 use Drupal\Core\Extension\ModuleHandlerInterface;
|
Chris@0
|
10 use Drupal\simpletest\Exception\MissingGroupException;
|
Chris@0
|
11 use Drupal\simpletest\TestDiscovery;
|
Chris@0
|
12 use Drupal\Tests\UnitTestCase;
|
Chris@0
|
13 use org\bovigo\vfs\vfsStream;
|
Chris@0
|
14
|
Chris@0
|
15 /**
|
Chris@0
|
16 * @coversDefaultClass \Drupal\simpletest\TestDiscovery
|
Chris@0
|
17 * @group simpletest
|
Chris@0
|
18 */
|
Chris@0
|
19 class TestDiscoveryTest extends UnitTestCase {
|
Chris@0
|
20
|
Chris@0
|
21 /**
|
Chris@0
|
22 * @covers ::getTestInfo
|
Chris@0
|
23 * @dataProvider infoParserProvider
|
Chris@0
|
24 */
|
Chris@0
|
25 public function testTestInfoParser($expected, $classname, $doc_comment = NULL) {
|
Chris@0
|
26 $info = TestDiscovery::getTestInfo($classname, $doc_comment);
|
Chris@0
|
27 $this->assertEquals($expected, $info);
|
Chris@0
|
28 }
|
Chris@0
|
29
|
Chris@0
|
30 public function infoParserProvider() {
|
Chris@0
|
31 // A module provided unit test.
|
Chris@0
|
32 $tests[] = [
|
Chris@0
|
33 // Expected result.
|
Chris@0
|
34 [
|
Chris@18
|
35 'name' => static::class,
|
Chris@0
|
36 'group' => 'simpletest',
|
Chris@18
|
37 'groups' => ['simpletest'],
|
Chris@0
|
38 'description' => 'Tests \Drupal\simpletest\TestDiscovery.',
|
Chris@0
|
39 'type' => 'PHPUnit-Unit',
|
Chris@0
|
40 ],
|
Chris@0
|
41 // Classname.
|
Chris@18
|
42 static::class,
|
Chris@0
|
43 ];
|
Chris@0
|
44
|
Chris@0
|
45 // A core unit test.
|
Chris@0
|
46 $tests[] = [
|
Chris@0
|
47 // Expected result.
|
Chris@0
|
48 [
|
Chris@0
|
49 'name' => 'Drupal\Tests\Core\DrupalTest',
|
Chris@0
|
50 'group' => 'DrupalTest',
|
Chris@18
|
51 'groups' => ['DrupalTest'],
|
Chris@0
|
52 'description' => 'Tests \Drupal.',
|
Chris@0
|
53 'type' => 'PHPUnit-Unit',
|
Chris@0
|
54 ],
|
Chris@0
|
55 // Classname.
|
Chris@0
|
56 'Drupal\Tests\Core\DrupalTest',
|
Chris@0
|
57 ];
|
Chris@0
|
58
|
Chris@0
|
59 // Functional PHPUnit test.
|
Chris@0
|
60 $tests[] = [
|
Chris@0
|
61 // Expected result.
|
Chris@0
|
62 [
|
Chris@0
|
63 'name' => 'Drupal\FunctionalTests\BrowserTestBaseTest',
|
Chris@0
|
64 'group' => 'browsertestbase',
|
Chris@18
|
65 'groups' => ['browsertestbase'],
|
Chris@0
|
66 'description' => 'Tests BrowserTestBase functionality.',
|
Chris@0
|
67 'type' => 'PHPUnit-Functional',
|
Chris@0
|
68 ],
|
Chris@0
|
69 // Classname.
|
Chris@0
|
70 'Drupal\FunctionalTests\BrowserTestBaseTest',
|
Chris@0
|
71 ];
|
Chris@0
|
72
|
Chris@0
|
73 // kernel PHPUnit test.
|
Chris@0
|
74 $tests['phpunit-kernel'] = [
|
Chris@0
|
75 // Expected result.
|
Chris@0
|
76 [
|
Chris@0
|
77 'name' => '\Drupal\Tests\file\Kernel\FileItemValidationTest',
|
Chris@0
|
78 'group' => 'file',
|
Chris@18
|
79 'groups' => ['file'],
|
Chris@0
|
80 'description' => 'Tests that files referenced in file and image fields are always validated.',
|
Chris@0
|
81 'type' => 'PHPUnit-Kernel',
|
Chris@0
|
82 ],
|
Chris@0
|
83 // Classname.
|
Chris@0
|
84 '\Drupal\Tests\file\Kernel\FileItemValidationTest',
|
Chris@0
|
85 ];
|
Chris@0
|
86
|
Chris@0
|
87 // Simpletest classes can not be autoloaded in a PHPUnit test, therefore
|
Chris@0
|
88 // provide a docblock.
|
Chris@0
|
89 $tests[] = [
|
Chris@0
|
90 // Expected result.
|
Chris@0
|
91 [
|
Chris@0
|
92 'name' => 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@0
|
93 'group' => 'simpletest',
|
Chris@18
|
94 'groups' => ['simpletest'],
|
Chris@0
|
95 'description' => 'Tests the Simpletest UI internal browser.',
|
Chris@0
|
96 'type' => 'Simpletest',
|
Chris@0
|
97 ],
|
Chris@0
|
98 // Classname.
|
Chris@0
|
99 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@0
|
100 // Doc block.
|
Chris@0
|
101 "/**
|
Chris@0
|
102 * Tests the Simpletest UI internal browser.
|
Chris@0
|
103 *
|
Chris@0
|
104 * @group simpletest
|
Chris@0
|
105 */
|
Chris@0
|
106 ",
|
Chris@0
|
107 ];
|
Chris@0
|
108
|
Chris@0
|
109 // Test with a different amount of leading spaces.
|
Chris@0
|
110 $tests[] = [
|
Chris@0
|
111 // Expected result.
|
Chris@0
|
112 [
|
Chris@0
|
113 'name' => 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@0
|
114 'group' => 'simpletest',
|
Chris@18
|
115 'groups' => ['simpletest'],
|
Chris@0
|
116 'description' => 'Tests the Simpletest UI internal browser.',
|
Chris@0
|
117 'type' => 'Simpletest',
|
Chris@0
|
118 ],
|
Chris@0
|
119 // Classname.
|
Chris@0
|
120 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@0
|
121 // Doc block.
|
Chris@0
|
122 "/**
|
Chris@0
|
123 * Tests the Simpletest UI internal browser.
|
Chris@0
|
124 *
|
Chris@0
|
125 * @group simpletest
|
Chris@0
|
126 */
|
Chris@0
|
127 */
|
Chris@0
|
128 ",
|
Chris@0
|
129 ];
|
Chris@0
|
130
|
Chris@0
|
131 // Make sure that a "* @" inside a string does not get parsed as an
|
Chris@0
|
132 // annotation.
|
Chris@0
|
133 $tests[] = [
|
Chris@0
|
134 // Expected result.
|
Chris@0
|
135 [
|
Chris@0
|
136 'name' => 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@0
|
137 'group' => 'simpletest',
|
Chris@18
|
138 'groups' => ['simpletest'],
|
Chris@0
|
139 'description' => 'Tests the Simpletest UI internal browser. * @',
|
Chris@0
|
140 'type' => 'Simpletest',
|
Chris@0
|
141 ],
|
Chris@0
|
142 // Classname.
|
Chris@0
|
143 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@0
|
144 // Doc block.
|
Chris@0
|
145 "/**
|
Chris@0
|
146 * Tests the Simpletest UI internal browser. * @
|
Chris@0
|
147 *
|
Chris@0
|
148 * @group simpletest
|
Chris@0
|
149 */
|
Chris@0
|
150 ",
|
Chris@0
|
151 ];
|
Chris@0
|
152
|
Chris@0
|
153 // Multiple @group annotations.
|
Chris@0
|
154 $tests[] = [
|
Chris@0
|
155 // Expected result.
|
Chris@0
|
156 [
|
Chris@0
|
157 'name' => 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@0
|
158 'group' => 'Test',
|
Chris@18
|
159 'groups' => ['Test', 'simpletest'],
|
Chris@0
|
160 'description' => 'Tests the Simpletest UI internal browser.',
|
Chris@0
|
161 'type' => 'Simpletest',
|
Chris@0
|
162 ],
|
Chris@0
|
163 // Classname.
|
Chris@0
|
164 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@0
|
165 // Doc block.
|
Chris@0
|
166 "/**
|
Chris@0
|
167 * Tests the Simpletest UI internal browser.
|
Chris@0
|
168 *
|
Chris@0
|
169 * @group Test
|
Chris@0
|
170 * @group simpletest
|
Chris@0
|
171 */
|
Chris@0
|
172 ",
|
Chris@0
|
173 ];
|
Chris@0
|
174
|
Chris@18
|
175 // A great number of @group annotations.
|
Chris@18
|
176 $tests['many-group-annotations'] = [
|
Chris@18
|
177 // Expected result.
|
Chris@18
|
178 [
|
Chris@18
|
179 'name' => 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@18
|
180 'group' => 'Test',
|
Chris@18
|
181 'groups' => ['Test', 'simpletest', 'another', 'more', 'many', 'enough', 'whoa'],
|
Chris@18
|
182 'description' => 'Tests the Simpletest UI internal browser.',
|
Chris@18
|
183 'type' => 'Simpletest',
|
Chris@18
|
184 ],
|
Chris@18
|
185 // Classname.
|
Chris@18
|
186 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@18
|
187 // Doc block.
|
Chris@18
|
188 "/**
|
Chris@18
|
189 * Tests the Simpletest UI internal browser.
|
Chris@18
|
190 *
|
Chris@18
|
191 * @group Test
|
Chris@18
|
192 * @group simpletest
|
Chris@18
|
193 * @group another
|
Chris@18
|
194 * @group more
|
Chris@18
|
195 * @group many
|
Chris@18
|
196 * @group enough
|
Chris@18
|
197 * @group whoa
|
Chris@18
|
198 */
|
Chris@18
|
199 ",
|
Chris@18
|
200 ];
|
Chris@18
|
201
|
Chris@0
|
202 // @dependencies annotation.
|
Chris@0
|
203 $tests[] = [
|
Chris@0
|
204 // Expected result.
|
Chris@0
|
205 [
|
Chris@0
|
206 'name' => 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@0
|
207 'description' => 'Tests the Simpletest UI internal browser.',
|
Chris@0
|
208 'type' => 'Simpletest',
|
Chris@0
|
209 'requires' => ['module' => ['test']],
|
Chris@0
|
210 'group' => 'simpletest',
|
Chris@18
|
211 'groups' => ['simpletest'],
|
Chris@0
|
212 ],
|
Chris@0
|
213 // Classname.
|
Chris@0
|
214 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@0
|
215 // Doc block.
|
Chris@0
|
216 "/**
|
Chris@0
|
217 * Tests the Simpletest UI internal browser.
|
Chris@0
|
218 *
|
Chris@0
|
219 * @dependencies test
|
Chris@0
|
220 * @group simpletest
|
Chris@0
|
221 */
|
Chris@0
|
222 ",
|
Chris@0
|
223 ];
|
Chris@0
|
224
|
Chris@0
|
225 // Multiple @dependencies annotation.
|
Chris@0
|
226 $tests[] = [
|
Chris@0
|
227 // Expected result.
|
Chris@0
|
228 [
|
Chris@0
|
229 'name' => 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@0
|
230 'description' => 'Tests the Simpletest UI internal browser.',
|
Chris@0
|
231 'type' => 'Simpletest',
|
Chris@0
|
232 'requires' => ['module' => ['test', 'test1', 'test2']],
|
Chris@0
|
233 'group' => 'simpletest',
|
Chris@18
|
234 'groups' => ['simpletest'],
|
Chris@0
|
235 ],
|
Chris@0
|
236 // Classname.
|
Chris@0
|
237 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@0
|
238 // Doc block.
|
Chris@0
|
239 "/**
|
Chris@0
|
240 * Tests the Simpletest UI internal browser.
|
Chris@0
|
241 *
|
Chris@0
|
242 * @dependencies test, test1, test2
|
Chris@0
|
243 * @group simpletest
|
Chris@0
|
244 */
|
Chris@0
|
245 ",
|
Chris@0
|
246 ];
|
Chris@0
|
247
|
Chris@0
|
248 // Multi-line summary line.
|
Chris@0
|
249 $tests[] = [
|
Chris@0
|
250 // Expected result.
|
Chris@0
|
251 [
|
Chris@0
|
252 'name' => 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@0
|
253 'description' => 'Tests the Simpletest UI internal browser. And the summary line continues an there is no gap to the annotation.',
|
Chris@0
|
254 'type' => 'Simpletest',
|
Chris@0
|
255 'group' => 'simpletest',
|
Chris@18
|
256 'groups' => ['simpletest'],
|
Chris@0
|
257 ],
|
Chris@0
|
258 // Classname.
|
Chris@0
|
259 'Drupal\simpletest\Tests\ExampleSimpleTest',
|
Chris@0
|
260 // Doc block.
|
Chris@0
|
261 "/**
|
Chris@0
|
262 * Tests the Simpletest UI internal browser. And the summary line continues an
|
Chris@0
|
263 * there is no gap to the annotation.
|
Chris@0
|
264 *
|
Chris@0
|
265 * @group simpletest
|
Chris@0
|
266 */
|
Chris@0
|
267 ",
|
Chris@0
|
268 ];
|
Chris@0
|
269 return $tests;
|
Chris@0
|
270 }
|
Chris@0
|
271
|
Chris@0
|
272 /**
|
Chris@0
|
273 * @covers ::getTestInfo
|
Chris@0
|
274 */
|
Chris@0
|
275 public function testTestInfoParserMissingGroup() {
|
Chris@0
|
276 $classname = 'Drupal\KernelTests\field\BulkDeleteTest';
|
Chris@0
|
277 $doc_comment = <<<EOT
|
Chris@0
|
278 /**
|
Chris@0
|
279 * Bulk delete storages and fields, and clean up afterwards.
|
Chris@0
|
280 */
|
Chris@0
|
281 EOT;
|
Chris@0
|
282 $this->setExpectedException(MissingGroupException::class, 'Missing @group annotation in Drupal\KernelTests\field\BulkDeleteTest');
|
Chris@0
|
283 TestDiscovery::getTestInfo($classname, $doc_comment);
|
Chris@0
|
284 }
|
Chris@0
|
285
|
Chris@0
|
286 /**
|
Chris@0
|
287 * @covers ::getTestInfo
|
Chris@0
|
288 */
|
Chris@0
|
289 public function testTestInfoParserMissingSummary() {
|
Chris@0
|
290 $classname = 'Drupal\KernelTests\field\BulkDeleteTest';
|
Chris@0
|
291 $doc_comment = <<<EOT
|
Chris@0
|
292 /**
|
Chris@0
|
293 * @group field
|
Chris@0
|
294 */
|
Chris@0
|
295 EOT;
|
Chris@0
|
296 $info = TestDiscovery::getTestInfo($classname, $doc_comment);
|
Chris@0
|
297 $this->assertEmpty($info['description']);
|
Chris@0
|
298 }
|
Chris@0
|
299
|
Chris@0
|
300 protected function setupVfsWithTestClasses() {
|
Chris@0
|
301 vfsStream::setup('drupal');
|
Chris@0
|
302
|
Chris@0
|
303 $test_file = <<<EOF
|
Chris@0
|
304 <?php
|
Chris@0
|
305
|
Chris@0
|
306 /**
|
Chris@0
|
307 * Test description
|
Chris@0
|
308 * @group example
|
Chris@0
|
309 */
|
Chris@0
|
310 class FunctionalExampleTest {}
|
Chris@0
|
311 EOF;
|
Chris@0
|
312
|
Chris@18
|
313 $test_profile_info = <<<EOF
|
Chris@18
|
314 name: Testing
|
Chris@18
|
315 type: profile
|
Chris@18
|
316 core: 8.x
|
Chris@18
|
317 EOF;
|
Chris@18
|
318
|
Chris@18
|
319 $test_module_info = <<<EOF
|
Chris@18
|
320 name: Testing
|
Chris@18
|
321 type: module
|
Chris@18
|
322 core: 8.x
|
Chris@18
|
323 EOF;
|
Chris@18
|
324
|
Chris@0
|
325 vfsStream::create([
|
Chris@0
|
326 'modules' => [
|
Chris@0
|
327 'test_module' => [
|
Chris@0
|
328 'tests' => [
|
Chris@0
|
329 'src' => [
|
Chris@0
|
330 'Functional' => [
|
Chris@0
|
331 'FunctionalExampleTest.php' => $test_file,
|
Chris@0
|
332 'FunctionalExampleTest2.php' => str_replace(['FunctionalExampleTest', '@group example'], ['FunctionalExampleTest2', '@group example2'], $test_file),
|
Chris@0
|
333 ],
|
Chris@0
|
334 'Kernel' => [
|
Chris@18
|
335 'KernelExampleTest3.php' => str_replace(['FunctionalExampleTest', '@group example'], ['KernelExampleTest3', "@group example2\n * @group kernel\n"], $test_file),
|
Chris@17
|
336 'KernelExampleTestBase.php' => str_replace(['FunctionalExampleTest', '@group example'], ['KernelExampleTestBase', '@group example2'], $test_file),
|
Chris@17
|
337 'KernelExampleTrait.php' => str_replace(['FunctionalExampleTest', '@group example'], ['KernelExampleTrait', '@group example2'], $test_file),
|
Chris@17
|
338 'KernelExampleInterface.php' => str_replace(['FunctionalExampleTest', '@group example'], ['KernelExampleInterface', '@group example2'], $test_file),
|
Chris@0
|
339 ],
|
Chris@0
|
340 ],
|
Chris@0
|
341 ],
|
Chris@0
|
342 ],
|
Chris@0
|
343 ],
|
Chris@18
|
344 'profiles' => [
|
Chris@18
|
345 'test_profile' => [
|
Chris@18
|
346 'test_profile.info.yml' => $test_profile_info,
|
Chris@18
|
347 'modules' => [
|
Chris@18
|
348 'test_profile_module' => [
|
Chris@18
|
349 'test_profile_module.info.yml' => $test_module_info,
|
Chris@18
|
350 'tests' => [
|
Chris@18
|
351 'src' => [
|
Chris@18
|
352 'Kernel' => [
|
Chris@18
|
353 'KernelExampleTest4.php' => str_replace(['FunctionalExampleTest', '@group example'], ['KernelExampleTest4', '@group example3'], $test_file),
|
Chris@18
|
354 ],
|
Chris@18
|
355 ],
|
Chris@18
|
356 ],
|
Chris@18
|
357 ],
|
Chris@18
|
358 ],
|
Chris@18
|
359 ],
|
Chris@18
|
360 ],
|
Chris@0
|
361 ]);
|
Chris@0
|
362 }
|
Chris@0
|
363
|
Chris@0
|
364 /**
|
Chris@0
|
365 * @covers ::getTestClasses
|
Chris@0
|
366 */
|
Chris@0
|
367 public function testGetTestClasses() {
|
Chris@0
|
368 $this->setupVfsWithTestClasses();
|
Chris@0
|
369 $class_loader = $this->prophesize(ClassLoader::class);
|
Chris@0
|
370 $module_handler = $this->prophesize(ModuleHandlerInterface::class);
|
Chris@0
|
371
|
Chris@0
|
372 $test_discovery = new TestTestDiscovery('vfs://drupal', $class_loader->reveal(), $module_handler->reveal());
|
Chris@0
|
373
|
Chris@0
|
374 $extensions = [
|
Chris@0
|
375 'test_module' => new Extension('vfs://drupal', 'module', 'modules/test_module/test_module.info.yml'),
|
Chris@0
|
376 ];
|
Chris@0
|
377 $test_discovery->setExtensions($extensions);
|
Chris@0
|
378 $result = $test_discovery->getTestClasses();
|
Chris@18
|
379 $this->assertCount(3, $result);
|
Chris@0
|
380 $this->assertEquals([
|
Chris@0
|
381 'example' => [
|
Chris@0
|
382 'Drupal\Tests\test_module\Functional\FunctionalExampleTest' => [
|
Chris@0
|
383 'name' => 'Drupal\Tests\test_module\Functional\FunctionalExampleTest',
|
Chris@0
|
384 'description' => 'Test description',
|
Chris@0
|
385 'group' => 'example',
|
Chris@18
|
386 'groups' => ['example'],
|
Chris@0
|
387 'type' => 'PHPUnit-Functional',
|
Chris@0
|
388 ],
|
Chris@0
|
389 ],
|
Chris@0
|
390 'example2' => [
|
Chris@0
|
391 'Drupal\Tests\test_module\Functional\FunctionalExampleTest2' => [
|
Chris@0
|
392 'name' => 'Drupal\Tests\test_module\Functional\FunctionalExampleTest2',
|
Chris@0
|
393 'description' => 'Test description',
|
Chris@0
|
394 'group' => 'example2',
|
Chris@18
|
395 'groups' => ['example2'],
|
Chris@0
|
396 'type' => 'PHPUnit-Functional',
|
Chris@0
|
397 ],
|
Chris@0
|
398 'Drupal\Tests\test_module\Kernel\KernelExampleTest3' => [
|
Chris@0
|
399 'name' => 'Drupal\Tests\test_module\Kernel\KernelExampleTest3',
|
Chris@0
|
400 'description' => 'Test description',
|
Chris@0
|
401 'group' => 'example2',
|
Chris@18
|
402 'groups' => ['example2', 'kernel'],
|
Chris@18
|
403 'type' => 'PHPUnit-Kernel',
|
Chris@18
|
404 ],
|
Chris@18
|
405 ],
|
Chris@18
|
406 'kernel' => [
|
Chris@18
|
407 'Drupal\Tests\test_module\Kernel\KernelExampleTest3' => [
|
Chris@18
|
408 'name' => 'Drupal\Tests\test_module\Kernel\KernelExampleTest3',
|
Chris@18
|
409 'description' => 'Test description',
|
Chris@18
|
410 'group' => 'example2',
|
Chris@18
|
411 'groups' => ['example2', 'kernel'],
|
Chris@0
|
412 'type' => 'PHPUnit-Kernel',
|
Chris@0
|
413 ],
|
Chris@0
|
414 ],
|
Chris@0
|
415 ], $result);
|
Chris@0
|
416 }
|
Chris@0
|
417
|
Chris@0
|
418 /**
|
Chris@0
|
419 * @covers ::getTestClasses
|
Chris@0
|
420 */
|
Chris@0
|
421 public function testGetTestClassesWithSelectedTypes() {
|
Chris@0
|
422 $this->setupVfsWithTestClasses();
|
Chris@0
|
423 $class_loader = $this->prophesize(ClassLoader::class);
|
Chris@0
|
424 $module_handler = $this->prophesize(ModuleHandlerInterface::class);
|
Chris@0
|
425
|
Chris@0
|
426 $test_discovery = new TestTestDiscovery('vfs://drupal', $class_loader->reveal(), $module_handler->reveal());
|
Chris@0
|
427
|
Chris@0
|
428 $extensions = [
|
Chris@0
|
429 'test_module' => new Extension('vfs://drupal', 'module', 'modules/test_module/test_module.info.yml'),
|
Chris@18
|
430 'test_profile_module' => new Extension('vfs://drupal', 'profile', 'profiles/test_profile/modules/test_profile_module/test_profile_module.info.yml'),
|
Chris@0
|
431 ];
|
Chris@0
|
432 $test_discovery->setExtensions($extensions);
|
Chris@0
|
433 $result = $test_discovery->getTestClasses(NULL, ['PHPUnit-Kernel']);
|
Chris@18
|
434 $this->assertCount(4, $result);
|
Chris@0
|
435 $this->assertEquals([
|
Chris@0
|
436 'example' => [],
|
Chris@0
|
437 'example2' => [
|
Chris@0
|
438 'Drupal\Tests\test_module\Kernel\KernelExampleTest3' => [
|
Chris@0
|
439 'name' => 'Drupal\Tests\test_module\Kernel\KernelExampleTest3',
|
Chris@0
|
440 'description' => 'Test description',
|
Chris@0
|
441 'group' => 'example2',
|
Chris@18
|
442 'groups' => ['example2', 'kernel'],
|
Chris@18
|
443 'type' => 'PHPUnit-Kernel',
|
Chris@18
|
444 ],
|
Chris@18
|
445 ],
|
Chris@18
|
446 'kernel' => [
|
Chris@18
|
447 'Drupal\Tests\test_module\Kernel\KernelExampleTest3' => [
|
Chris@18
|
448 'name' => 'Drupal\Tests\test_module\Kernel\KernelExampleTest3',
|
Chris@18
|
449 'description' => 'Test description',
|
Chris@18
|
450 'group' => 'example2',
|
Chris@18
|
451 'groups' => ['example2', 'kernel'],
|
Chris@18
|
452 'type' => 'PHPUnit-Kernel',
|
Chris@18
|
453 ],
|
Chris@18
|
454 ],
|
Chris@18
|
455 'example3' => [
|
Chris@18
|
456 'Drupal\Tests\test_profile_module\Kernel\KernelExampleTest4' => [
|
Chris@18
|
457 'name' => 'Drupal\Tests\test_profile_module\Kernel\KernelExampleTest4',
|
Chris@18
|
458 'description' => 'Test description',
|
Chris@18
|
459 'group' => 'example3',
|
Chris@18
|
460 'groups' => ['example3'],
|
Chris@0
|
461 'type' => 'PHPUnit-Kernel',
|
Chris@0
|
462 ],
|
Chris@0
|
463 ],
|
Chris@0
|
464 ], $result);
|
Chris@0
|
465 }
|
Chris@0
|
466
|
Chris@0
|
467 /**
|
Chris@18
|
468 * @covers ::getTestClasses
|
Chris@18
|
469 */
|
Chris@18
|
470 public function testGetTestsInProfiles() {
|
Chris@18
|
471 $this->setupVfsWithTestClasses();
|
Chris@18
|
472 $class_loader = $this->prophesize(ClassLoader::class);
|
Chris@18
|
473 $module_handler = $this->prophesize(ModuleHandlerInterface::class);
|
Chris@18
|
474
|
Chris@18
|
475 $container = new Container();
|
Chris@18
|
476 $container->set('kernel', new DrupalKernel('prod', new ClassLoader()));
|
Chris@18
|
477 $container->set('site.path', 'sites/default');
|
Chris@18
|
478 \Drupal::setContainer($container);
|
Chris@18
|
479
|
Chris@18
|
480 $test_discovery = new TestDiscovery('vfs://drupal', $class_loader->reveal(), $module_handler->reveal());
|
Chris@18
|
481
|
Chris@18
|
482 $result = $test_discovery->getTestClasses(NULL, ['PHPUnit-Kernel']);
|
Chris@18
|
483 $expected = [
|
Chris@18
|
484 'example3' => [
|
Chris@18
|
485 'Drupal\Tests\test_profile_module\Kernel\KernelExampleTest4' => [
|
Chris@18
|
486 'name' => 'Drupal\Tests\test_profile_module\Kernel\KernelExampleTest4',
|
Chris@18
|
487 'description' => 'Test description',
|
Chris@18
|
488 'group' => 'example3',
|
Chris@18
|
489 'groups' => ['example3'],
|
Chris@18
|
490 'type' => 'PHPUnit-Kernel',
|
Chris@18
|
491 ],
|
Chris@18
|
492 ],
|
Chris@18
|
493 ];
|
Chris@18
|
494 $this->assertEquals($expected, $result);
|
Chris@18
|
495 }
|
Chris@18
|
496
|
Chris@18
|
497 /**
|
Chris@0
|
498 * @covers ::getPhpunitTestSuite
|
Chris@0
|
499 * @dataProvider providerTestGetPhpunitTestSuite
|
Chris@0
|
500 */
|
Chris@0
|
501 public function testGetPhpunitTestSuite($classname, $expected) {
|
Chris@0
|
502 $this->assertEquals($expected, TestDiscovery::getPhpunitTestSuite($classname));
|
Chris@0
|
503 }
|
Chris@0
|
504
|
Chris@0
|
505 public function providerTestGetPhpunitTestSuite() {
|
Chris@0
|
506 $data = [];
|
Chris@0
|
507 $data['simpletest-webtest'] = ['\Drupal\rest\Tests\NodeTest', FALSE];
|
Chris@0
|
508 $data['simpletest-kerneltest'] = ['\Drupal\hal\Tests\FileNormalizeTest', FALSE];
|
Chris@0
|
509 $data['module-unittest'] = [static::class, 'Unit'];
|
Chris@0
|
510 $data['module-kerneltest'] = ['\Drupal\KernelTests\Core\Theme\TwigMarkupInterfaceTest', 'Kernel'];
|
Chris@0
|
511 $data['module-functionaltest'] = ['\Drupal\FunctionalTests\BrowserTestBaseTest', 'Functional'];
|
Chris@0
|
512 $data['module-functionaljavascripttest'] = ['\Drupal\Tests\toolbar\FunctionalJavascript\ToolbarIntegrationTest', 'FunctionalJavascript'];
|
Chris@0
|
513 $data['core-unittest'] = ['\Drupal\Tests\ComposerIntegrationTest', 'Unit'];
|
Chris@0
|
514 $data['core-unittest2'] = ['Drupal\Tests\Core\DrupalTest', 'Unit'];
|
Chris@0
|
515 $data['core-kerneltest'] = ['\Drupal\KernelTests\KernelTestBaseTest', 'Kernel'];
|
Chris@0
|
516 $data['core-functionaltest'] = ['\Drupal\FunctionalTests\ExampleTest', 'Functional'];
|
Chris@0
|
517 $data['core-functionaljavascripttest'] = ['\Drupal\FunctionalJavascriptTests\ExampleTest', 'FunctionalJavascript'];
|
Chris@0
|
518
|
Chris@0
|
519 return $data;
|
Chris@0
|
520 }
|
Chris@0
|
521
|
Chris@16
|
522 /**
|
Chris@16
|
523 * Ensure that classes are not reflected when the docblock is empty.
|
Chris@16
|
524 *
|
Chris@16
|
525 * @covers ::getTestInfo
|
Chris@16
|
526 */
|
Chris@16
|
527 public function testGetTestInfoEmptyDocblock() {
|
Chris@16
|
528 // If getTestInfo() performed reflection, it won't be able to find the
|
Chris@16
|
529 // class we asked it to analyze, so it will throw a ReflectionException.
|
Chris@16
|
530 // We want to make sure it didn't do that, because we already did some
|
Chris@16
|
531 // analysis and already have an empty docblock. getTestInfo() will throw
|
Chris@16
|
532 // MissingGroupException because the annotation is empty.
|
Chris@16
|
533 $this->setExpectedException(MissingGroupException::class);
|
Chris@16
|
534 TestDiscovery::getTestInfo('Drupal\Tests\simpletest\ThisTestDoesNotExistTest', '');
|
Chris@16
|
535 }
|
Chris@16
|
536
|
Chris@17
|
537 /**
|
Chris@17
|
538 * Ensure TestDiscovery::scanDirectory() ignores certain abstract file types.
|
Chris@17
|
539 *
|
Chris@17
|
540 * @covers ::scanDirectory
|
Chris@17
|
541 */
|
Chris@17
|
542 public function testScanDirectoryNoAbstract() {
|
Chris@17
|
543 $this->setupVfsWithTestClasses();
|
Chris@17
|
544 $files = TestDiscovery::scanDirectory('Drupal\\Tests\\test_module\\Kernel\\', vfsStream::url('drupal/modules/test_module/tests/src/Kernel'));
|
Chris@17
|
545 $this->assertNotEmpty($files);
|
Chris@17
|
546 $this->assertArrayNotHasKey('Drupal\Tests\test_module\Kernel\KernelExampleTestBase', $files);
|
Chris@17
|
547 $this->assertArrayNotHasKey('Drupal\Tests\test_module\Kernel\KernelExampleTrait', $files);
|
Chris@17
|
548 $this->assertArrayNotHasKey('Drupal\Tests\test_module\Kernel\KernelExampleInterface', $files);
|
Chris@17
|
549 $this->assertArrayHasKey('Drupal\Tests\test_module\Kernel\KernelExampleTest3', $files);
|
Chris@17
|
550 }
|
Chris@17
|
551
|
Chris@0
|
552 }
|
Chris@0
|
553
|
Chris@0
|
554 class TestTestDiscovery extends TestDiscovery {
|
Chris@0
|
555
|
Chris@0
|
556 /**
|
Chris@0
|
557 * @var \Drupal\Core\Extension\Extension[]
|
Chris@0
|
558 */
|
Chris@0
|
559 protected $extensions = [];
|
Chris@0
|
560
|
Chris@0
|
561 public function setExtensions(array $extensions) {
|
Chris@0
|
562 $this->extensions = $extensions;
|
Chris@0
|
563 }
|
Chris@0
|
564
|
Chris@0
|
565 /**
|
Chris@0
|
566 * {@inheritdoc}
|
Chris@0
|
567 */
|
Chris@0
|
568 protected function getExtensions() {
|
Chris@0
|
569 return $this->extensions;
|
Chris@0
|
570 }
|
Chris@0
|
571
|
Chris@0
|
572 }
|