annotate core/modules/simpletest/tests/src/Unit/TestDiscoveryTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents af1871eacc83
children
rev   line source
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 }