a2c000e1fc6f984b3ea90326c84d079df0d36421
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Plugin / Discovery / YamlDirectoryDiscoveryTest.php
1 <?php
2
3 namespace Drupal\Tests\Core\Plugin\Discovery;
4
5 use Drupal\Component\Discovery\YamlDirectoryDiscovery as ComponentYamlDirectoryDiscovery;
6 use Drupal\Core\StringTranslation\TranslatableMarkup;
7 use Drupal\Tests\UnitTestCase;
8 use Drupal\Core\Plugin\Discovery\YamlDirectoryDiscovery;
9 use org\bovigo\vfs\vfsStream;
10
11 /**
12  * @coversDefaultClass \Drupal\Core\Plugin\Discovery\YamlDirectoryDiscovery
13  *
14  * @group Plugin
15  */
16 class YamlDirectoryDiscoveryTest extends UnitTestCase {
17
18   /**
19    * @covers ::getDefinitions
20    */
21   public function testGetDefinitions() {
22     vfsStream::setup('modules', NULL, [
23       'module_a' => [
24         'subdir1' => [
25           'plugin1.yml' => "id: plugin1\ntest_provider: module_a",
26           'plugin2.yml' => "id: plugin2\ntest_provider: module_a",
27         ],
28         'subdir2' => [
29           'plugin3.yml' => "id: plugin3\ntest_provider: module_a",
30         ],
31         'subdir3' => [
32         ]
33       ],
34       'module_b' => [
35         'subdir1' => [
36           'plugin4.yml' => "id: plugin4\ntest_provider: module_b",
37         ],
38       ],
39     ]);
40     $directories = [
41       'module_a' => [
42         vfsStream::url('modules/module_a/subdir1'),
43         vfsStream::url('modules/module_a/subdir2'),
44         // Empty directory.
45         vfsStream::url('modules/module_a/subdir3'),
46         // Directory does not exist.
47         vfsStream::url('modules/module_a/subdir4'),
48       ],
49       'module_b' => vfsStream::url('modules/module_b/subdir1'),
50     ];
51     $discovery = new YamlDirectoryDiscovery($directories, 'test');
52
53     $definitions = $discovery->getDefinitions();
54
55     $this->assertInternalType('array', $definitions);
56     $this->assertCount(4, $definitions);
57
58     foreach ($definitions as $id => $definition) {
59       foreach (['id', 'provider', ComponentYamlDirectoryDiscovery::FILE_KEY] as $key) {
60         $this->assertArrayHasKey($key, $definition);
61       }
62       $this->assertEquals($id, $definition['id']);
63       $this->assertEquals($definition['test_provider'], $definition['provider']);
64     }
65   }
66
67   /**
68    * @covers ::getDefinitions
69    */
70   public function testGetDefinitionsWithTranslatableDefinitions() {
71     vfsStream::setup('modules', NULL, [
72       'module_a' => [
73         'subdir1' => [
74           'plugin1.yml' => "id: plugin1\ntest_provider: module_a\ntitle: 'test title'",
75           'plugin2.yml' => "id: plugin2\ntest_provider: module_a\ntitle: 'test title'\ntitle_context: test-context",
76         ],
77       ],
78     ]);
79     $directories = [
80       'module_a' => vfsStream::url('modules/module_a/subdir1'),
81     ];
82
83     $discovery = new YamlDirectoryDiscovery($directories, 'test');
84     $discovery->addTranslatableProperty('title', 'title_context');
85     $definitions = $discovery->getDefinitions();
86
87     $this->assertCount(2, $definitions);
88     $plugin_1 = $definitions['plugin1'];
89     $plugin_2 = $definitions['plugin2'];
90
91     $this->assertInstanceOf(TranslatableMarkup::class, $plugin_1['title']);
92     $this->assertEquals([], $plugin_1['title']->getOptions());
93     $this->assertInstanceOf(TranslatableMarkup::class, $plugin_2['title']);
94     $this->assertEquals(['context' => 'test-context'], $plugin_2['title']->getOptions());
95   }
96
97 }