More updates to stop using dev or alpha or beta versions.
[yaffs-website] / web / core / tests / Drupal / Tests / Core / Asset / AssetResolverTest.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Tests\Core\Asset\AssetResolverTest.
6  */
7
8 namespace Drupal\Tests\Core\Asset;
9
10 use Drupal\Core\Asset\AssetResolver;
11 use Drupal\Core\Asset\AttachedAssets;
12 use Drupal\Core\Asset\AttachedAssetsInterface;
13 use Drupal\Core\Cache\MemoryBackend;
14 use Drupal\Tests\UnitTestCase;
15
16 /**
17  * @coversDefaultClass \Drupal\Core\Asset\AssetResolver
18  * @group Asset
19  */
20 class AssetResolverTest extends UnitTestCase {
21
22   /**
23    * The tested asset resolver service.
24    *
25    * @var \Drupal\Core\Asset\AssetResolver
26    */
27   protected $assetResolver;
28
29   /**
30    * The mocked library discovery service.
31    *
32    * @var \Drupal\Core\Asset\LibraryDiscoveryInterface|\PHPUnit_Framework_MockObject_MockObject
33    */
34   protected $libraryDiscovery;
35
36   /**
37    * The mocked library dependency resolver.
38    *
39    * @var \Drupal\Core\Asset\LibraryDependencyResolverInterface|\PHPUnit_Framework_MockObject_MockObject
40    */
41   protected $libraryDependencyResolver;
42
43   /**
44    * The mocked module handler.
45    *
46    * @var \Drupal\Core\Extension\ModuleHandlerInterface|\PHPUnit_Framework_MockObject_MockObject
47    */
48   protected $moduleHandler;
49
50   /**
51    * The mocked theme manager.
52    *
53    * @var \Drupal\Core\Theme\ThemeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
54    */
55   protected $themeManager;
56
57   /**
58    * The mocked language manager.
59    *
60    * @var \Drupal\Core\Language\LanguageManagerInterface|\PHPUnit_Framework_MockObject_MockObject
61    */
62   protected $languageManager;
63
64   /**
65    * The cache backend to use.
66    *
67    * @var \Drupal\Core\Cache\CacheBackendInterface|\PHPUnit_Framework_MockObject_MockObject
68    */
69   protected $cache;
70
71   /**
72    * {@inheritdoc}
73    */
74   protected function setUp() {
75     parent::setUp();
76
77     $this->libraryDiscovery = $this->getMockBuilder('Drupal\Core\Asset\LibraryDiscovery')
78       ->disableOriginalConstructor()
79       ->getMock();
80     $this->libraryDependencyResolver = $this->getMock('\Drupal\Core\Asset\LibraryDependencyResolverInterface');
81     $this->libraryDependencyResolver->expects($this->any())
82       ->method('getLibrariesWithDependencies')
83       ->willReturnArgument(0);
84     $this->moduleHandler = $this->getMock('\Drupal\Core\Extension\ModuleHandlerInterface');
85     $this->themeManager = $this->getMock('\Drupal\Core\Theme\ThemeManagerInterface');
86     $active_theme = $this->getMockBuilder('\Drupal\Core\Theme\ActiveTheme')
87       ->disableOriginalConstructor()
88       ->getMock();
89     $active_theme->expects($this->any())
90       ->method('getName')
91       ->willReturn('bartik');
92     $this->themeManager->expects($this->any())
93       ->method('getActiveTheme')
94       ->willReturn($active_theme);
95
96     $this->languageManager = $this->getMock('\Drupal\Core\Language\LanguageManagerInterface');
97     $english = $this->getMock('\Drupal\Core\Language\LanguageInterface');
98     $english->expects($this->any())
99       ->method('getId')
100       ->willReturn('en');
101     $japanese = $this->getMock('\Drupal\Core\Language\LanguageInterface');
102     $japanese->expects($this->any())
103       ->method('getId')
104       ->willReturn('jp');
105     $this->languageManager = $this->getMock('\Drupal\Core\Language\LanguageManagerInterface');
106     $this->languageManager->expects($this->any())
107       ->method('getCurrentLanguage')
108       ->will($this->onConsecutiveCalls($english, $english, $japanese, $japanese));
109     $this->cache = new TestMemoryBackend();
110
111     $this->assetResolver = new AssetResolver($this->libraryDiscovery, $this->libraryDependencyResolver, $this->moduleHandler, $this->themeManager, $this->languageManager, $this->cache);
112   }
113
114   /**
115    * @covers ::getCssAssets
116    * @dataProvider providerAttachedAssets
117    */
118   public function testGetCssAssets(AttachedAssetsInterface $assets_a, AttachedAssetsInterface $assets_b, $expected_cache_item_count) {
119     $this->assetResolver->getCssAssets($assets_a, FALSE);
120     $this->assetResolver->getCssAssets($assets_b, FALSE);
121     $this->assertCount($expected_cache_item_count, $this->cache->getAllCids());
122   }
123
124   /**
125    * @covers ::getJsAssets
126    * @dataProvider providerAttachedAssets
127    */
128   public function testGetJsAssets(AttachedAssetsInterface $assets_a, AttachedAssetsInterface $assets_b, $expected_cache_item_count) {
129     $this->assetResolver->getJsAssets($assets_a, FALSE);
130     $this->assetResolver->getJsAssets($assets_b, FALSE);
131     $this->assertCount($expected_cache_item_count, $this->cache->getAllCids());
132
133     $this->assetResolver->getJsAssets($assets_a, FALSE);
134     $this->assetResolver->getJsAssets($assets_b, FALSE);
135     $this->assertCount($expected_cache_item_count * 2, $this->cache->getAllCids());
136   }
137
138   public function providerAttachedAssets() {
139     $time = time();
140     return [
141       'same libraries, different timestamps' => [
142         (new AttachedAssets())->setAlreadyLoadedLibraries([])->setLibraries(['core/drupal'])->setSettings(['currentTime' => $time]),
143         (new AttachedAssets())->setAlreadyLoadedLibraries([])->setLibraries(['core/drupal'])->setSettings(['currentTime' => $time + 100]),
144         1
145       ],
146       'different libraries, same timestamps' => [
147         (new AttachedAssets())->setAlreadyLoadedLibraries([])->setLibraries(['core/drupal'])->setSettings(['currenttime' => $time]),
148         (new AttachedAssets())->setAlreadyLoadedLibraries([])->setLibraries(['core/drupal', 'core/jquery'])->setSettings(['currentTime' => $time]),
149         2
150       ],
151     ];
152   }
153
154 }
155
156 if (!defined('CSS_AGGREGATE_DEFAULT')) {
157   define('CSS_AGGREGATE_DEFAULT', 0);
158 }
159
160 if (!defined('JS_DEFAULT')) {
161   define('JS_DEFAULT', 0);
162 }
163
164 class TestMemoryBackend extends MemoryBackend {
165   public function getAllCids() {
166     return array_keys($this->cache);
167   }
168
169 }