Security update for Core, with self-updated composer
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Asset / LibraryDependencyResolverTest.php
1 <?php
2
3 namespace Drupal\Tests\Core\Asset;
4
5 use Drupal\Core\Asset\LibraryDependencyResolver;
6 use Drupal\Tests\UnitTestCase;
7
8 /**
9  * @coversDefaultClass \Drupal\Core\Asset\LibraryDependencyResolver
10  * @group Asset
11  */
12 class LibraryDependencyResolverTest extends UnitTestCase {
13
14   /**
15    * The tested library dependency resolver.
16    *
17    * @var \Drupal\Core\Asset\LibraryDependencyResolver
18    */
19   protected $libraryDependencyResolver;
20
21   /**
22    * The mocked library discovery service.
23    *
24    * @var \Drupal\Core\Asset\LibraryDiscoveryInterface|\PHPUnit_Framework_MockObject_MockObject
25    */
26   protected $libraryDiscovery;
27
28   /**
29    * The mocked module handler.
30    *
31    * @var \Drupal\Core\Extension\ModuleHandlerInterface|\PHPUnit_Framework_MockObject_MockObject
32    */
33   protected $moduleHandler;
34
35   /**
36    * Test library data.
37    *
38    * @var array
39    */
40   protected $libraryData = [
41     'no_deps_a' => ['js' => [], 'css' => []],
42     'no_deps_b' => ['js' => [], 'css' => []],
43     'no_deps_c' => ['js' => [], 'css' => []],
44     'deps_a' => ['js' => [], 'css' => [], 'dependencies' => ['test/no_deps_a']],
45     'deps_b' => ['js' => [], 'css' => [], 'dependencies' => ['test/no_deps_a', 'test/no_deps_b']],
46     'deps_c' => ['js' => [], 'css' => [], 'dependencies' => ['test/no_deps_b', 'test/no_deps_a']],
47     'nested_deps_a' => ['js' => [], 'css' => [], 'dependencies' => ['test/deps_a']],
48     'nested_deps_b' => ['js' => [], 'css' => [], 'dependencies' => ['test/nested_deps_a']],
49     'nested_deps_c' => ['js' => [], 'css' => [], 'dependencies' => ['test/nested_deps_b']],
50   ];
51
52   /**
53    * {@inheritdoc}
54    */
55   protected function setUp() {
56     $this->libraryDiscovery = $this->getMockBuilder('Drupal\Core\Asset\LibraryDiscovery')
57       ->disableOriginalConstructor()
58       ->setMethods(['getLibrariesByExtension'])
59       ->getMock();
60     $this->libraryDiscovery->expects($this->any())
61       ->method('getLibrariesByExtension')
62       ->with('test')
63       ->will($this->returnValue($this->libraryData));
64     $this->libraryDependencyResolver = new LibraryDependencyResolver($this->libraryDiscovery);
65   }
66
67
68   /**
69    * Provides test data for ::testGetLibrariesWithDependencies().
70    */
71   public function providerTestGetLibrariesWithDependencies() {
72     return [
73       // Empty list of libraries.
74       [[], []],
75       // Without dependencies.
76       [['test/no_deps_a'], ['test/no_deps_a']],
77       [['test/no_deps_a', 'test/no_deps_b'], ['test/no_deps_a', 'test/no_deps_b']],
78       [['test/no_deps_b', 'test/no_deps_a'], ['test/no_deps_b', 'test/no_deps_a']],
79       // Single-level (direct) dependencies.
80       [['test/deps_a'], ['test/no_deps_a', 'test/deps_a']],
81       [['test/deps_b'], ['test/no_deps_a', 'test/no_deps_b', 'test/deps_b']],
82       [['test/deps_c'], ['test/no_deps_b', 'test/no_deps_a', 'test/deps_c']],
83       [['test/deps_a', 'test/deps_b'], ['test/no_deps_a', 'test/deps_a', 'test/no_deps_b', 'test/deps_b']],
84       [['test/deps_a', 'test/deps_c'], ['test/no_deps_a', 'test/deps_a', 'test/no_deps_b', 'test/deps_c']],
85       [['test/deps_a', 'test/deps_b', 'test/deps_c'], ['test/no_deps_a', 'test/deps_a', 'test/no_deps_b', 'test/deps_b', 'test/deps_c']],
86       [['test/deps_b', 'test/deps_a'], ['test/no_deps_a', 'test/no_deps_b', 'test/deps_b', 'test/deps_a']],
87       [['test/deps_b', 'test/deps_c'], ['test/no_deps_a', 'test/no_deps_b', 'test/deps_b', 'test/deps_c']],
88       [['test/deps_c', 'test/deps_b'], ['test/no_deps_b', 'test/no_deps_a', 'test/deps_c', 'test/deps_b']],
89       // Multi-level (indirect) dependencies.
90       [['test/nested_deps_a'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a']],
91       [['test/nested_deps_b'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b']],
92       [['test/nested_deps_c'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b', 'test/nested_deps_c']],
93       [['test/nested_deps_a', 'test/nested_deps_b'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b']],
94       [['test/nested_deps_b', 'test/nested_deps_a'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b']],
95       [['test/nested_deps_a', 'test/nested_deps_c'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b', 'test/nested_deps_c']],
96       [['test/nested_deps_b', 'test/nested_deps_c'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b', 'test/nested_deps_c']],
97       [['test/nested_deps_c', 'test/nested_deps_a'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b', 'test/nested_deps_c']],
98       [['test/nested_deps_a', 'test/nested_deps_b', 'test/nested_deps_c'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b', 'test/nested_deps_c']],
99       [['test/nested_deps_a', 'test/nested_deps_c', 'test/nested_deps_b'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b', 'test/nested_deps_c']],
100       [['test/nested_deps_b', 'test/nested_deps_a', 'test/nested_deps_c'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b', 'test/nested_deps_c']],
101       [['test/nested_deps_b', 'test/nested_deps_c', 'test/nested_deps_a'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b', 'test/nested_deps_c']],
102       [['test/nested_deps_c', 'test/nested_deps_a', 'test/nested_deps_b'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b', 'test/nested_deps_c']],
103       [['test/nested_deps_c', 'test/nested_deps_b', 'test/nested_deps_a'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b', 'test/nested_deps_c']],
104       // Complex dependencies, combining the above, with many intersections.
105       [['test/deps_c', 'test/nested_deps_b'], ['test/no_deps_b', 'test/no_deps_a', 'test/deps_c', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b']],
106       [['test/no_deps_a', 'test/deps_c', 'test/nested_deps_b'], ['test/no_deps_a', 'test/no_deps_b', 'test/deps_c', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b']],
107       [['test/nested_deps_b', 'test/deps_c', 'test/no_deps_c'], ['test/no_deps_a', 'test/deps_a', 'test/nested_deps_a', 'test/nested_deps_b', 'test/no_deps_b', 'test/deps_c', 'test/no_deps_c']],
108     ];
109   }
110
111   /**
112    * @covers ::getLibrariesWithDependencies
113    *
114    * @dataProvider providerTestGetLibrariesWithDependencies
115    */
116   public function testGetLibrariesWithDependencies(array $libraries, array $expected) {
117     $this->assertEquals($expected, $this->libraryDependencyResolver->getLibrariesWithDependencies($libraries));
118   }
119
120   /**
121    * Provides test data for ::testGetMinimalRepresentativeSubset().
122    */
123   public function providerTestGetMinimalRepresentativeSubset() {
124     return [
125       // Empty list of libraries.
126       [[], []],
127       // Without dependencies.
128       [['test/no_deps_a'], ['test/no_deps_a']],
129       [['test/no_deps_a', 'test/no_deps_b'], ['test/no_deps_a', 'test/no_deps_b']],
130       [['test/no_deps_b', 'test/no_deps_a'], ['test/no_deps_b', 'test/no_deps_a']],
131       // Single-level (direct) dependencies.
132       [['test/deps_a'], ['test/deps_a']],
133       [['test/deps_b'], ['test/deps_b']],
134       [['test/deps_c'], ['test/deps_c']],
135       [['test/deps_a', 'test/deps_b'], ['test/deps_a', 'test/deps_b']],
136       [['test/deps_a', 'test/deps_c'], ['test/deps_a', 'test/deps_c']],
137       [['test/deps_a', 'test/deps_b', 'test/deps_c'], ['test/deps_a', 'test/deps_b', 'test/deps_c']],
138       [['test/deps_b', 'test/deps_a'], ['test/deps_b', 'test/deps_a']],
139       [['test/deps_b', 'test/deps_c'], ['test/deps_b', 'test/deps_c']],
140       [['test/deps_c', 'test/deps_b'], ['test/deps_c', 'test/deps_b']],
141       // Multi-level (indirect) dependencies.
142       [['test/nested_deps_a'], ['test/nested_deps_a']],
143       [['test/nested_deps_b'], ['test/nested_deps_b']],
144       [['test/nested_deps_c'], ['test/nested_deps_c']],
145       [['test/nested_deps_a', 'test/nested_deps_b'], ['test/nested_deps_b']],
146       [['test/nested_deps_b', 'test/nested_deps_a'], ['test/nested_deps_b']],
147       [['test/nested_deps_a', 'test/nested_deps_c'], ['test/nested_deps_c']],
148       [['test/nested_deps_b', 'test/nested_deps_c'], ['test/nested_deps_c']],
149       [['test/nested_deps_c', 'test/nested_deps_a'], ['test/nested_deps_c']],
150       [['test/nested_deps_a', 'test/nested_deps_b', 'test/nested_deps_c'], ['test/nested_deps_c']],
151       [['test/nested_deps_a', 'test/nested_deps_c', 'test/nested_deps_b'], ['test/nested_deps_c']],
152       [['test/nested_deps_b', 'test/nested_deps_a', 'test/nested_deps_c'], ['test/nested_deps_c']],
153       [['test/nested_deps_b', 'test/nested_deps_c', 'test/nested_deps_a'], ['test/nested_deps_c']],
154       [['test/nested_deps_c', 'test/nested_deps_a', 'test/nested_deps_b'], ['test/nested_deps_c']],
155       [['test/nested_deps_c', 'test/nested_deps_b', 'test/nested_deps_a'], ['test/nested_deps_c']],
156       // Complex dependencies, combining the above, with many intersections.
157       [['test/deps_c', 'test/nested_deps_b'], ['test/deps_c', 'test/nested_deps_b']],
158       [['test/no_deps_a', 'test/deps_c', 'test/nested_deps_b'], ['test/deps_c', 'test/nested_deps_b']],
159       [['test/nested_deps_b', 'test/deps_c', 'test/no_deps_c'], ['test/nested_deps_b', 'test/deps_c', 'test/no_deps_c']],
160     ];
161   }
162
163   /**
164    * @covers ::getMinimalRepresentativeSubset
165    *
166    * @dataProvider providerTestGetMinimalRepresentativeSubset
167    */
168   public function testGetMinimalRepresentativeSubset(array $libraries, array $expected) {
169     $this->assertEquals($expected, $this->libraryDependencyResolver->getMinimalRepresentativeSubset($libraries));
170   }
171
172 }