class TestDiscoveryTest

Same name in this branch
  1. 8.9.x core/tests/Drupal/Tests/Core/Test/TestDiscoveryTest.php \Drupal\Tests\Core\Test\TestDiscoveryTest
Same name and namespace in other branches
  1. 11.x core/tests/Drupal/Tests/Core/Test/TestDiscoveryTest.php \Drupal\Tests\Core\Test\TestDiscoveryTest
  2. 10 core/tests/Drupal/Tests/Core/Test/TestDiscoveryTest.php \Drupal\Tests\Core\Test\TestDiscoveryTest
  3. 9 core/tests/Drupal/Tests/Core/Test/TestDiscoveryTest.php \Drupal\Tests\Core\Test\TestDiscoveryTest

@coversDefaultClass \Drupal\simpletest\TestDiscovery

@group simpletest @group legacy

Hierarchy

Expanded class hierarchy of TestDiscoveryTest

File

core/modules/simpletest/tests/src/Unit/TestDiscoveryTest.php, line 20

Namespace

Drupal\Tests\simpletest\Unit
View source
class TestDiscoveryTest extends UnitTestCase {
  protected function setupVfsWithTestClasses() {
    vfsStream::setup('drupal');
    $test_file = <<<EOF
    <?php
    
    /**
     * Test description
     * @group example
     */
    class FunctionalExampleTest {}
    EOF;
    $test_profile_info = <<<EOF
    name: Testing
    type: profile
    core: 8.x
    EOF;
    $test_module_info = <<<EOF
    name: Testing
    type: module
    core: 8.x
    EOF;
    vfsStream::create([
      'modules' => [
        'test_module' => [
          'test_module.info.yml' => $test_module_info,
          'tests' => [
            'src' => [
              'Functional' => [
                'FunctionalExampleTest.php' => $test_file,
                'FunctionalExampleTest2.php' => str_replace([
                  'FunctionalExampleTest',
                  '@group example',
                ], [
                  'FunctionalExampleTest2',
                  '@group example2',
                ], $test_file),
              ],
              'Kernel' => [
                'KernelExampleTest3.php' => str_replace([
                  'FunctionalExampleTest',
                  '@group example',
                ], [
                  'KernelExampleTest3',
                  "@group example2\n * @group kernel\n",
                ], $test_file),
                'KernelExampleTestBase.php' => str_replace([
                  'FunctionalExampleTest',
                  '@group example',
                ], [
                  'KernelExampleTestBase',
                  '@group example2',
                ], $test_file),
                'KernelExampleTrait.php' => str_replace([
                  'FunctionalExampleTest',
                  '@group example',
                ], [
                  'KernelExampleTrait',
                  '@group example2',
                ], $test_file),
                'KernelExampleInterface.php' => str_replace([
                  'FunctionalExampleTest',
                  '@group example',
                ], [
                  'KernelExampleInterface',
                  '@group example2',
                ], $test_file),
              ],
            ],
          ],
        ],
      ],
      'profiles' => [
        'test_profile' => [
          'test_profile.info.yml' => $test_profile_info,
          'modules' => [
            'test_profile_module' => [
              'test_profile_module.info.yml' => $test_module_info,
              'tests' => [
                'src' => [
                  'Kernel' => [
                    'KernelExampleTest4.php' => str_replace([
                      'FunctionalExampleTest',
                      '@group example',
                    ], [
                      'KernelExampleTest4',
                      '@group example3',
                    ], $test_file),
                  ],
                ],
              ],
            ],
          ],
        ],
      ],
    ]);
  }
  
  /**
   * Mock a TestDiscovery object to return specific extension values.
   */
  protected function getTestDiscoveryMock($app_root, $extensions) {
    $class_loader = $this->prophesize(ClassLoader::class);
    $module_handler = $this->prophesize(ModuleHandlerInterface::class);
    $test_discovery = $this->getMockBuilder(TestDiscovery::class)
      ->setConstructorArgs([
      $app_root,
      $class_loader->reveal(),
      $module_handler->reveal(),
    ])
      ->setMethods([
      'getExtensions',
    ])
      ->getMock();
    $test_discovery->expects($this->any())
      ->method('getExtensions')
      ->willReturn($extensions);
    return $test_discovery;
  }
  
  /**
   * @covers ::getTestClasses
   */
  public function testGetTestClasses() {
    $this->setupVfsWithTestClasses();
    $extensions = [
      'test_module' => new Extension('vfs://drupal', 'module', 'modules/test_module/test_module.info.yml'),
    ];
    $test_discovery = $this->getTestDiscoveryMock('vfs://drupal', $extensions);
    $result = $test_discovery->getTestClasses();
    $this->assertCount(3, $result);
    $this->assertEquals([
      'example' => [
        'Drupal\\Tests\\test_module\\Functional\\FunctionalExampleTest' => [
          'name' => 'Drupal\\Tests\\test_module\\Functional\\FunctionalExampleTest',
          'description' => 'Test description',
          'group' => 'example',
          'groups' => [
            'example',
          ],
          'type' => 'PHPUnit-Functional',
        ],
      ],
      'example2' => [
        'Drupal\\Tests\\test_module\\Functional\\FunctionalExampleTest2' => [
          'name' => 'Drupal\\Tests\\test_module\\Functional\\FunctionalExampleTest2',
          'description' => 'Test description',
          'group' => 'example2',
          'groups' => [
            'example2',
          ],
          'type' => 'PHPUnit-Functional',
        ],
        'Drupal\\Tests\\test_module\\Kernel\\KernelExampleTest3' => [
          'name' => 'Drupal\\Tests\\test_module\\Kernel\\KernelExampleTest3',
          'description' => 'Test description',
          'group' => 'example2',
          'groups' => [
            'example2',
            'kernel',
          ],
          'type' => 'PHPUnit-Kernel',
        ],
      ],
      'kernel' => [
        'Drupal\\Tests\\test_module\\Kernel\\KernelExampleTest3' => [
          'name' => 'Drupal\\Tests\\test_module\\Kernel\\KernelExampleTest3',
          'description' => 'Test description',
          'group' => 'example2',
          'groups' => [
            'example2',
            'kernel',
          ],
          'type' => 'PHPUnit-Kernel',
        ],
      ],
    ], $result);
  }
  
  /**
   * @covers ::getTestClasses
   */
  public function testGetTestClassesWithSelectedTypes() {
    $this->setupVfsWithTestClasses();
    $extensions = [
      'test_module' => new Extension('vfs://drupal', 'module', 'modules/test_module/test_module.info.yml'),
      'test_profile_module' => new Extension('vfs://drupal', 'profile', 'profiles/test_profile/modules/test_profile_module/test_profile_module.info.yml'),
    ];
    $test_discovery = $this->getTestDiscoveryMock('vfs://drupal', $extensions);
    $result = $test_discovery->getTestClasses(NULL, [
      'PHPUnit-Kernel',
    ]);
    $this->assertCount(4, $result);
    $this->assertEquals([
      'example' => [],
      'example2' => [
        'Drupal\\Tests\\test_module\\Kernel\\KernelExampleTest3' => [
          'name' => 'Drupal\\Tests\\test_module\\Kernel\\KernelExampleTest3',
          'description' => 'Test description',
          'group' => 'example2',
          'groups' => [
            'example2',
            'kernel',
          ],
          'type' => 'PHPUnit-Kernel',
        ],
      ],
      'kernel' => [
        'Drupal\\Tests\\test_module\\Kernel\\KernelExampleTest3' => [
          'name' => 'Drupal\\Tests\\test_module\\Kernel\\KernelExampleTest3',
          'description' => 'Test description',
          'group' => 'example2',
          'groups' => [
            'example2',
            'kernel',
          ],
          'type' => 'PHPUnit-Kernel',
        ],
      ],
      'example3' => [
        'Drupal\\Tests\\test_profile_module\\Kernel\\KernelExampleTest4' => [
          'name' => 'Drupal\\Tests\\test_profile_module\\Kernel\\KernelExampleTest4',
          'description' => 'Test description',
          'group' => 'example3',
          'groups' => [
            'example3',
          ],
          'type' => 'PHPUnit-Kernel',
        ],
      ],
    ], $result);
  }
  
  /**
   * @covers ::getTestClasses
   */
  public function testGetTestsInProfiles() {
    $this->setupVfsWithTestClasses();
    $class_loader = $this->prophesize(ClassLoader::class);
    $module_handler = $this->prophesize(ModuleHandlerInterface::class);
    $container = new Container();
    $container->set('kernel', new DrupalKernel('prod', new ClassLoader()));
    $container->set('site.path', 'sites/default');
    \Drupal::setContainer($container);
    $test_discovery = new TestDiscovery('vfs://drupal', $class_loader->reveal(), $module_handler->reveal());
    $result = $test_discovery->getTestClasses('test_profile_module', [
      'PHPUnit-Kernel',
    ]);
    $expected = [
      'example3' => [
        'Drupal\\Tests\\test_profile_module\\Kernel\\KernelExampleTest4' => [
          'name' => 'Drupal\\Tests\\test_profile_module\\Kernel\\KernelExampleTest4',
          'description' => 'Test description',
          'group' => 'example3',
          'groups' => [
            'example3',
          ],
          'type' => 'PHPUnit-Kernel',
        ],
      ],
    ];
    $this->assertEquals($expected, $result);
  }

}

Members

Title Sort descending Modifiers Object type Summary
TestDiscoveryTest::getTestDiscoveryMock protected function Mock a TestDiscovery object to return specific extension values.
TestDiscoveryTest::setupVfsWithTestClasses protected function
TestDiscoveryTest::testGetTestClasses public function @covers ::getTestClasses[[api-linebreak]]
TestDiscoveryTest::testGetTestClassesWithSelectedTypes public function @covers ::getTestClasses[[api-linebreak]]
TestDiscoveryTest::testGetTestsInProfiles public function @covers ::getTestClasses[[api-linebreak]]

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.