diff --git a/core/modules/editor/editor.libraries.yml b/core/modules/editor/editor.libraries.yml index d59d259fd26..6c4b34f6cde 100644 --- a/core/modules/editor/editor.libraries.yml +++ b/core/modules/editor/editor.libraries.yml @@ -11,9 +11,6 @@ drupal.editor: version: VERSION js: js/editor.js: {} - css: - component: - css/editor.css: {} dependencies: - core/jquery - core/drupal diff --git a/core/modules/file/file.libraries.yml b/core/modules/file/file.libraries.yml index f72a2eb6156..ccc0c3b95a6 100644 --- a/core/modules/file/file.libraries.yml +++ b/core/modules/file/file.libraries.yml @@ -5,8 +5,6 @@ drupal.file: css: theme: css/file.admin.css: {} - component: - css/file.theme.css: {} dependencies: - core/jquery - core/jquery.once diff --git a/core/modules/system/src/Tests/Asset/ResolvedLibraryDefinitionsFilesMatchTest.php b/core/modules/system/src/Tests/Asset/ResolvedLibraryDefinitionsFilesMatchTest.php new file mode 100644 index 00000000000..7cdd8750a18 --- /dev/null +++ b/core/modules/system/src/Tests/Asset/ResolvedLibraryDefinitionsFilesMatchTest.php @@ -0,0 +1,200 @@ +themeHandler = $this->container->get('theme_handler'); + $this->themeInitialization = $this->container->get('theme.initialization'); + $this->themeManager = $this->container->get('theme.manager'); + $this->libraryDiscovery = $this->container->get('library.discovery'); + + // Install all core themes. + sort($this->allThemes); + $this->container->get('theme_installer')->install($this->allThemes); + + // Enable all core modules. + $all_modules = system_rebuild_module_data(); + $all_modules = array_filter($all_modules, function ($module) { + // Filter contrib, hidden, already enabled modules and modules in the + // Testing package. + if ($module->origin !== 'core' || !empty($module->info['hidden']) || $module->status == TRUE || $module->info['package'] == 'Testing') { + return FALSE; + } + return TRUE; + }); + $this->allModules = array_keys($all_modules); + sort($this->allModules); + $this->enableModules($this->allModules); + } + + /** + * Ensures that all core module and theme library files exist. + */ + public function testCoreLibraryCompleteness() { + // First verify all libraries with no active theme. + $this->verifyLibraryFilesExist($this->getAllLibraries()); + + // Then verify all libraries for each core theme. This may seem like + // overkill but themes can override and extend other extensions' libraries + // and these changes are only applied for the active theme. + foreach ($this->allThemes as $theme) { + $this->themeManager->setActiveTheme($this->themeInitialization->getActiveThemeByName($theme)); + $this->libraryDiscovery->clearCachedDefinitions(); + + $this->verifyLibraryFilesExist($this->getAllLibraries()); + } + } + + /** + * Checks that all the library files exist. + * + * @param array[] + * An array of library definitions, keyed by extension, then by library, and + * so on. + */ + protected function verifyLibraryFilesExist($library_definitions) { + $root = \Drupal::root(); + foreach ($library_definitions as $extension => $libraries) { + foreach ($libraries as $library_name => $library) { + if (in_array("$extension/$library_name", $this->librariesToSkip)) { + continue; + } + + // Check that all the assets exist. + foreach (['css', 'js'] as $asset_type) { + foreach ($library[$asset_type] as $asset) { + $file = $asset['data']; + $path = $root . '/' . $file; + // Only check and assert each file path once. + if (!isset($this->pathsChecked[$path])) { + $this->assertTrue(is_file($path), "$file file referenced from the $extension/$library_name library exists."); + $this->pathsChecked[$path] = TRUE; + } + } + } + } + } + } + + /** + * Gets all libraries for core and all installed modules. + * + * @return \Drupal\Core\Extension\Extension[] + */ + protected function getAllLibraries() { + $modules = \Drupal::moduleHandler()->getModuleList(); + $extensions = $modules; + $module_list = array_keys($modules); + sort($module_list); + $this->assertEqual($this->allModules, $module_list, 'All core modules are installed.'); + + $themes = $this->themeHandler->listInfo(); + $extensions += $themes; + $theme_list = array_keys($themes); + sort($theme_list); + $this->assertEqual($this->allThemes, $theme_list, 'All core themes are installed.'); + + $libraries['core'] = $this->libraryDiscovery->getLibrariesByExtension('core'); + + $root = \Drupal::root(); + foreach ($extensions as $extension_name => $extension) { + $library_file = $extension->getPath() . '/' . $extension_name . '.libraries.yml'; + if (is_file($root . '/' . $library_file)) { + $libraries[$extension_name] = $this->libraryDiscovery->getLibrariesByExtension($extension_name); + } + } + return $libraries; + } + +} diff --git a/core/themes/classy/classy.info.yml b/core/themes/classy/classy.info.yml index fb5cb3e29ee..2b7705b10e8 100644 --- a/core/themes/classy/classy.info.yml +++ b/core/themes/classy/classy.info.yml @@ -17,3 +17,5 @@ libraries-extend: - classy/dropbutton core/drupal.dialog: - classy/dialog + file/drupal.file: + - classy/file