AnnotatedClassDiscoveryTest.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. namespace Drupal\Tests\Component\Annotation;
  3. use Drupal\Component\Annotation\Plugin;
  4. use Drupal\Component\Annotation\Plugin\Discovery\AnnotatedClassDiscovery;
  5. use Drupal\Component\FileCache\FileCacheFactory;
  6. use PHPUnit\Framework\TestCase;
  7. /**
  8. * @coversDefaultClass \Drupal\Component\Annotation\Plugin\Discovery\AnnotatedClassDiscovery
  9. * @group Annotation
  10. */
  11. class AnnotatedClassDiscoveryTest extends TestCase {
  12. /**
  13. * {@inheritdoc}
  14. */
  15. protected function setUp() {
  16. parent::setUp();
  17. // Ensure the file cache is disabled.
  18. FileCacheFactory::setConfiguration([FileCacheFactory::DISABLE_CACHE => TRUE]);
  19. // Ensure that FileCacheFactory has a prefix.
  20. FileCacheFactory::setPrefix('prefix');
  21. }
  22. /**
  23. * @covers ::__construct
  24. * @covers ::getPluginNamespaces
  25. */
  26. public function testGetPluginNamespaces() {
  27. $discovery = new AnnotatedClassDiscovery(['com/example' => [__DIR__]]);
  28. $reflection = new \ReflectionMethod($discovery, 'getPluginNamespaces');
  29. $reflection->setAccessible(TRUE);
  30. $result = $reflection->invoke($discovery);
  31. $this->assertEquals(['com/example' => [__DIR__]], $result);
  32. }
  33. /**
  34. * @covers ::getDefinitions
  35. * @covers ::prepareAnnotationDefinition
  36. * @covers ::getAnnotationReader
  37. */
  38. public function testGetDefinitions() {
  39. $discovery = new AnnotatedClassDiscovery(['com\example' => [__DIR__ . '/Fixtures']]);
  40. $this->assertEquals([
  41. 'discovery_test_1' => [
  42. 'id' => 'discovery_test_1',
  43. 'class' => 'com\example\PluginNamespace\DiscoveryTest1',
  44. ],
  45. ], $discovery->getDefinitions());
  46. $custom_annotation_discovery = new AnnotatedClassDiscovery(['com\example' => [__DIR__ . '/Fixtures']], CustomPlugin::class, ['Drupal\Tests\Component\Annotation']);
  47. $this->assertEquals([
  48. 'discovery_test_1' => [
  49. 'id' => 'discovery_test_1',
  50. 'class' => 'com\example\PluginNamespace\DiscoveryTest1',
  51. 'title' => 'Discovery test plugin',
  52. ],
  53. ], $custom_annotation_discovery->getDefinitions());
  54. $empty_discovery = new AnnotatedClassDiscovery(['com\example' => [__DIR__ . '/Fixtures']], CustomPlugin2::class, ['Drupal\Tests\Component\Annotation']);
  55. $this->assertEquals([], $empty_discovery->getDefinitions());
  56. }
  57. }
  58. /**
  59. * Custom plugin annotation.
  60. *
  61. * @Annotation
  62. */
  63. class CustomPlugin extends Plugin {
  64. /**
  65. * The plugin ID.
  66. *
  67. * @var string
  68. */
  69. public $id;
  70. /**
  71. * The plugin title.
  72. *
  73. * @var string
  74. *
  75. * @ingroup plugin_translatable
  76. */
  77. public $title = '';
  78. }
  79. /**
  80. * Custom plugin annotation.
  81. *
  82. * @Annotation
  83. */
  84. class CustomPlugin2 extends Plugin {}