class AnnotatedClassDiscoveryTest in Drupal 10
Same name in this branch
- 10 core/tests/Drupal/Tests/Component/Annotation/AnnotatedClassDiscoveryTest.php \Drupal\Tests\Component\Annotation\AnnotatedClassDiscoveryTest
- 10 core/tests/Drupal/Tests/Component/Plugin/Discovery/AnnotatedClassDiscoveryTest.php \Drupal\Tests\Component\Plugin\Discovery\AnnotatedClassDiscoveryTest
- 10 core/tests/Drupal/KernelTests/Core/Plugin/Discovery/AnnotatedClassDiscoveryTest.php \Drupal\KernelTests\Core\Plugin\Discovery\AnnotatedClassDiscoveryTest
Same name and namespace in other branches
- 8 core/tests/Drupal/Tests/Component/Plugin/Discovery/AnnotatedClassDiscoveryTest.php \Drupal\Tests\Component\Plugin\Discovery\AnnotatedClassDiscoveryTest
- 9 core/tests/Drupal/Tests/Component/Plugin/Discovery/AnnotatedClassDiscoveryTest.php \Drupal\Tests\Component\Plugin\Discovery\AnnotatedClassDiscoveryTest
@coversDefaultClass \Drupal\Component\Annotation\Plugin\Discovery\AnnotatedClassDiscovery
@group Annotation @group Plugin
Hierarchy
- class \Drupal\Tests\Component\Plugin\Discovery\AnnotatedClassDiscoveryTest extends \PHPUnit\Framework\TestCase
Expanded class hierarchy of AnnotatedClassDiscoveryTest
File
- core/
tests/ Drupal/ Tests/ Component/ Plugin/ Discovery/ AnnotatedClassDiscoveryTest.php, line 18
Namespace
Drupal\Tests\Component\Plugin\DiscoveryView source
class AnnotatedClassDiscoveryTest extends TestCase {
/**
* All the Drupal documentation standards tags.
*
* @var string[]
*/
public function provideBadAnnotations() {
return [
[
'addtogroup',
],
[
'code',
],
[
'defgroup',
],
[
'deprecated',
],
[
'endcode',
],
[
'endlink',
],
[
'file',
],
[
'ingroup',
],
[
'group',
],
[
'link',
],
[
'mainpage',
],
[
'param',
],
[
'ref',
],
[
'return',
],
[
'section',
],
[
'see',
],
[
'subsection',
],
[
'throws',
],
[
'todo',
],
[
'var',
],
[
'{',
],
[
'}',
],
];
}
/**
* Make sure AnnotatedClassDiscovery never tries to autoload bad annotations.
*
* @dataProvider provideBadAnnotations
*
* @coversNothing
*/
public function testAutoloadBadAnnotations($annotation) {
// Set up a class file in vfsStream.
vfsStreamWrapper::register();
$root = new vfsStreamDirectory('root');
vfsStreamWrapper::setRoot($root);
FileCacheFactory::setPrefix(__CLASS__);
// Make a directory for discovery.
$url = vfsStream::url('root');
mkdir($url . '/DrupalTest');
// Create a class docblock with our annotation.
$php_file = "<?php\nnamespace DrupalTest;\n/**\n";
$php_file .= " * @{$annotation}\n";
$php_file .= " */\nclass TestClass {}";
file_put_contents($url . '/DrupalTest/TestClass.php', $php_file);
// Create an AnnotatedClassDiscovery object referencing the virtual file.
$discovery = new AnnotatedClassDiscovery([
'\\DrupalTest\\TestClass' => [
vfsStream::url('root/DrupalTest'),
],
], '\\DrupalTest\\Component\\Annotation\\');
// Register our class loader which will fail if the annotation reader tries
// to autoload disallowed annotations.
$class_loader = function ($class_name) use ($annotation) {
$name_array = explode('\\', $class_name);
$name = array_pop($name_array);
if ($name == $annotation) {
$this
->fail('Attempted to autoload a non-plugin annotation: ' . $name);
}
};
spl_autoload_register($class_loader, TRUE, TRUE);
// Now try to get plugin definitions.
$definitions = $discovery
->getDefinitions();
// Unregister to clean up.
spl_autoload_unregister($class_loader);
// Assert that no annotations were loaded.
$this
->assertEmpty($definitions);
}
}