5 * Contains \Drupal\Tests\Core\Asset\AssetResolverTest.
8 namespace Drupal\Tests\Core\Asset;
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;
17 * @coversDefaultClass \Drupal\Core\Asset\AssetResolver
20 class AssetResolverTest extends UnitTestCase {
23 * The tested asset resolver service.
25 * @var \Drupal\Core\Asset\AssetResolver
27 protected $assetResolver;
30 * The mocked library discovery service.
32 * @var \Drupal\Core\Asset\LibraryDiscoveryInterface|\PHPUnit_Framework_MockObject_MockObject
34 protected $libraryDiscovery;
37 * The mocked library dependency resolver.
39 * @var \Drupal\Core\Asset\LibraryDependencyResolverInterface|\PHPUnit_Framework_MockObject_MockObject
41 protected $libraryDependencyResolver;
44 * The mocked module handler.
46 * @var \Drupal\Core\Extension\ModuleHandlerInterface|\PHPUnit_Framework_MockObject_MockObject
48 protected $moduleHandler;
51 * The mocked theme manager.
53 * @var \Drupal\Core\Theme\ThemeManagerInterface|\PHPUnit_Framework_MockObject_MockObject
55 protected $themeManager;
58 * The mocked language manager.
60 * @var \Drupal\Core\Language\LanguageManagerInterface|\PHPUnit_Framework_MockObject_MockObject
62 protected $languageManager;
65 * The cache backend to use.
67 * @var \Drupal\Core\Cache\CacheBackendInterface|\PHPUnit_Framework_MockObject_MockObject
74 protected function setUp() {
77 $this->libraryDiscovery = $this->getMockBuilder('Drupal\Core\Asset\LibraryDiscovery')
78 ->disableOriginalConstructor()
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()
89 $active_theme->expects($this->any())
91 ->willReturn('bartik');
92 $this->themeManager->expects($this->any())
93 ->method('getActiveTheme')
94 ->willReturn($active_theme);
96 $this->languageManager = $this->getMock('\Drupal\Core\Language\LanguageManagerInterface');
97 $english = $this->getMock('\Drupal\Core\Language\LanguageInterface');
98 $english->expects($this->any())
101 $japanese = $this->getMock('\Drupal\Core\Language\LanguageInterface');
102 $japanese->expects($this->any())
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();
111 $this->assetResolver = new AssetResolver($this->libraryDiscovery, $this->libraryDependencyResolver, $this->moduleHandler, $this->themeManager, $this->languageManager, $this->cache);
115 * @covers ::getCssAssets
116 * @dataProvider providerAttachedAssets
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());
125 * @covers ::getJsAssets
126 * @dataProvider providerAttachedAssets
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());
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());
138 public function providerAttachedAssets() {
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]),
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]),
156 if (!defined('CSS_AGGREGATE_DEFAULT')) {
157 define('CSS_AGGREGATE_DEFAULT', 0);
160 if (!defined('JS_DEFAULT')) {
161 define('JS_DEFAULT', 0);
164 class TestMemoryBackend extends MemoryBackend {
165 public function getAllCids() {
166 return array_keys($this->cache);