function TestDiscovery::getTestClasses
Same name in other branches
- 9 core/lib/Drupal/Core/Test/TestDiscovery.php \Drupal\Core\Test\TestDiscovery::getTestClasses()
- 8.9.x core/modules/simpletest/src/TestDiscovery.php \Drupal\simpletest\TestDiscovery::getTestClasses()
- 8.9.x core/lib/Drupal/Core/Test/TestDiscovery.php \Drupal\Core\Test\TestDiscovery::getTestClasses()
- 11.x core/lib/Drupal/Core/Test/TestDiscovery.php \Drupal\Core\Test\TestDiscovery::getTestClasses()
Discovers all available tests in all extensions.
$groups['block'] => [
'Drupal\Tests\block\Functional\BlockTest' => [
'name' => 'Drupal\Tests\block\Functional\BlockTest',
'description' => 'Tests block UI CRUD functionality.',
'group' => 'block',
'groups' => ['block', 'group2', 'group3'],
],
];
@todo Remove singular grouping; retain list of groups in 'group' key.
Parameters
string $extension: (optional) The name of an extension to limit discovery to; e.g., 'node'.
string[] $types: (optional) An array of included test types.
string|null $directory: (optional) Limit discovered tests to a specific directory.
Return value
array An array of tests keyed by the group name. If a test is annotated to belong to multiple groups, it will appear under all group keys it belongs to.
See also
https://www.drupal.org/node/2296615
File
-
core/
lib/ Drupal/ Core/ Test/ TestDiscovery.php, line 149
Class
- TestDiscovery
- Discovers available tests.
Namespace
Drupal\Core\TestCode
public function getTestClasses($extension = NULL, array $types = [], ?string $directory = NULL) {
if (!isset($extension) && empty($types)) {
if (!empty($this->testClasses)) {
return $this->testClasses;
}
}
$list = [];
$classmap = $this->findAllClassFiles($extension, $directory);
// Prevent expensive class loader lookups for each reflected test class by
// registering the complete classmap of test classes to the class loader.
// This also ensures that test classes are loaded from the discovered
// path names; a namespace/classname mismatch will throw an exception.
$this->classLoader
->addClassMap($classmap);
foreach ($classmap as $classname => $pathname) {
$finder = MockFileFinder::create($pathname);
$parser = new StaticReflectionParser($classname, $finder, TRUE);
try {
$info = static::getTestInfo($classname, $parser->getDocComment());
} catch (MissingGroupException $e) {
// If the class name ends in Test and is not a migrate table dump.
if (str_ends_with($classname, 'Test') && !str_contains($classname, 'migrate_drupal\\Tests\\Table')) {
throw $e;
}
// If the class is @group annotation just skip it. Most likely it is an
// abstract class, trait or test fixture.
continue;
}
foreach ($info['groups'] as $group) {
$list[$group][$classname] = $info;
}
}
// Sort the groups and tests within the groups by name.
uksort($list, 'strnatcasecmp');
foreach ($list as &$tests) {
uksort($tests, 'strnatcasecmp');
}
if (!isset($extension) && empty($types)) {
$this->testClasses = $list;
}
if ($types) {
$list = NestedArray::filter($list, function ($element) use ($types) {
return !(is_array($element) && isset($element['type']) && !in_array($element['type'], $types));
});
}
return $list;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.