Security update for Core, with self-updated composer
[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       'module_b' => [
34         'subdir1' => [
35           'plugin4.yml' => "id: plugin4\ntest_provider: module_b",
36         ],
37       ],
38     ]);
39     $directories = [
40       'module_a' => [
41         vfsStream::url('modules/module_a/subdir1'),
42         vfsStream::url('modules/module_a/subdir2'),
43         // Empty directory.
44         vfsStream::url('modules/module_a/subdir3'),
45         // Directory does not exist.
46         vfsStream::url('modules/module_a/subdir4'),
47       ],
48       'module_b' => vfsStream::url('modules/module_b/subdir1'),
49     ];
50     $discovery = new YamlDirectoryDiscovery($directories, 'test');
51
52     $definitions = $discovery->getDefinitions();
53
54     $this->assertInternalType('array', $definitions);
55     $this->assertCount(4, $definitions);
56
57     foreach ($definitions as $id => $definition) {
58       foreach (['id', 'provider', ComponentYamlDirectoryDiscovery::FILE_KEY] as $key) {
59         $this->assertArrayHasKey($key, $definition);
60       }
61       $this->assertEquals($id, $definition['id']);
62       $this->assertEquals($definition['test_provider'], $definition['provider']);
63     }
64   }
65
66   /**
67    * @covers ::getDefinitions
68    */
69   public function testGetDefinitionsWithTranslatableDefinitions() {
70     vfsStream::setup('modules', NULL, [
71       'module_a' => [
72         'subdir1' => [
73           'plugin1.yml' => "id: plugin1\ntest_provider: module_a\ntitle: 'test title'",
74           'plugin2.yml' => "id: plugin2\ntest_provider: module_a\ntitle: 'test title'\ntitle_context: test-context",
75         ],
76       ],
77     ]);
78     $directories = [
79       'module_a' => vfsStream::url('modules/module_a/subdir1'),
80     ];
81
82     $discovery = new YamlDirectoryDiscovery($directories, 'test');
83     $discovery->addTranslatableProperty('title', 'title_context');
84     $definitions = $discovery->getDefinitions();
85
86     $this->assertCount(2, $definitions);
87     $plugin_1 = $definitions['plugin1'];
88     $plugin_2 = $definitions['plugin2'];
89
90     $this->assertInstanceOf(TranslatableMarkup::class, $plugin_1['title']);
91     $this->assertEquals([], $plugin_1['title']->getOptions());
92     $this->assertInstanceOf(TranslatableMarkup::class, $plugin_2['title']);
93     $this->assertEquals(['context' => 'test-context'], $plugin_2['title']->getOptions());
94   }
95
96 }