3 namespace Drupal\Tests\Component\Annotation;
5 use Drupal\Component\Annotation\Plugin;
6 use Drupal\Component\Annotation\Plugin\Discovery\AnnotatedClassDiscovery;
7 use Drupal\Component\FileCache\FileCacheFactory;
8 use PHPUnit\Framework\TestCase;
11 * @coversDefaultClass \Drupal\Component\Annotation\Plugin\Discovery\AnnotatedClassDiscovery
14 class AnnotatedClassDiscoveryTest extends TestCase {
19 protected function setUp() {
21 // Ensure the file cache is disabled.
22 FileCacheFactory::setConfiguration([FileCacheFactory::DISABLE_CACHE => TRUE]);
23 // Ensure that FileCacheFactory has a prefix.
24 FileCacheFactory::setPrefix('prefix');
28 * @covers ::__construct
29 * @covers ::getPluginNamespaces
31 public function testGetPluginNamespaces() {
32 $discovery = new AnnotatedClassDiscovery(['com/example' => [__DIR__]]);
34 $reflection = new \ReflectionMethod($discovery, 'getPluginNamespaces');
35 $reflection->setAccessible(TRUE);
37 $result = $reflection->invoke($discovery);
38 $this->assertEquals(['com/example' => [__DIR__]], $result);
42 * @covers ::getDefinitions
43 * @covers ::prepareAnnotationDefinition
44 * @covers ::getAnnotationReader
46 public function testGetDefinitions() {
47 $discovery = new AnnotatedClassDiscovery(['com\example' => [__DIR__ . '/Fixtures']]);
49 'discovery_test_1' => [
50 'id' => 'discovery_test_1',
51 'class' => 'com\example\PluginNamespace\DiscoveryTest1',
53 ], $discovery->getDefinitions());
55 $custom_annotation_discovery = new AnnotatedClassDiscovery(['com\example' => [__DIR__ . '/Fixtures']], CustomPlugin::class, ['Drupal\Tests\Component\Annotation']);
57 'discovery_test_1' => [
58 'id' => 'discovery_test_1',
59 'class' => 'com\example\PluginNamespace\DiscoveryTest1',
60 'title' => 'Discovery test plugin',
62 ], $custom_annotation_discovery->getDefinitions());
64 $empty_discovery = new AnnotatedClassDiscovery(['com\example' => [__DIR__ . '/Fixtures']], CustomPlugin2::class, ['Drupal\Tests\Component\Annotation']);
65 $this->assertEquals([], $empty_discovery->getDefinitions());
71 * Custom plugin annotation.
75 class CustomPlugin extends Plugin {
89 * @ingroup plugin_translatable
96 * Custom plugin annotation.
100 class CustomPlugin2 extends Plugin {}