diff --git a/core/tests/Drupal/KernelTests/Core/Theme/StableDecoupledTest.php b/core/tests/Drupal/KernelTests/Core/Theme/StableDecoupledTest.php deleted file mode 100644 index dd43487b152d..000000000000 --- a/core/tests/Drupal/KernelTests/Core/Theme/StableDecoupledTest.php +++ /dev/null @@ -1,317 +0,0 @@ -getExtension() !== 'twig' && $fileinfo->getExtension() !== 'css') { - continue; - } - $filename = $fileinfo->getFilename(); - $filepath = $fileinfo->getPathname(); - // Tests can have assets with the same filename, so skip assets in those - // directories. - if (strpos($filepath, '/test') === FALSE) { - $assets[$filename] = file_get_contents($filepath); - } - } - } - - /** - * Returns a list of asset filenames that are actually different in Stable. - * - * @return string[] - * Filenames of Stable assets that differ form their core equivalents. - */ - protected function assetsThatDifferInStable() { - static $non_identical_files = []; - if (!empty($non_identical_files)) { - return $non_identical_files; - } - $core_assets = []; - $stable_assets = []; - $non_identical_files = []; - - $this->getAssets($core_assets, 'core/modules'); - $this->getAssets($core_assets, 'core/misc'); - $this->getAssets($stable_assets, 'core/themes/stable'); - - // Assets that are in core but not Stable. - $in_core_only = array_diff(array_keys($core_assets), array_keys($stable_assets)); - - // Files that are included in Stable but never loaded by core themes. This - // files file.admin.css and filter.admin.css were removed in core so - // Stable's libraries-override never replaces them with core's version. The - // simpletest-result-summary.html.twig template is skipped because the - // Simpletest module was removed from core. - $in_stable_but_never_loaded = [ - 'file.admin.css', - 'filter.admin.css', - 'simpletest-result-summary.html.twig', - ]; - - // Files related to normalize.css can be skipped. These files are related to - // the core/normalize library and not inherited in the same manner. - $normalize_css_assets = ['normalize.css', 'normalize-fixes.css']; - - // Create an array of skippable asset files. - $assets_to_skip = array_merge($in_core_only, $in_stable_but_never_loaded, $normalize_css_assets); - - foreach ($stable_assets as $filename => $stable_asset_contents) { - if (in_array($filename, $assets_to_skip)) { - continue; - } - - $core_asset_contents = $core_assets[$filename]; - - // Most of the remaining logic in this loop is replacing expected - // differences between assets so the string comparison only surfaces - // functional differences between the two. - // Off canvas and layout builder CSS have different relative paths to - // image files than all other CSS files being tested. - if (strpos($filename, 'off-canvas') !== FALSE) { - $core_asset_contents = str_replace('(../icons', '(../../../images/core/icons', $core_asset_contents); - } - elseif (strpos($filename, 'layout-builder') !== FALSE || strpos($filename, 'settings_tray') !== FALSE) { - $core_asset_contents = str_replace('../misc', '../../misc', $core_asset_contents); - } - else { - $core_asset_contents = str_replace('(../../../../misc/', '(../../../images/core/', $core_asset_contents); - $core_asset_contents = str_replace('(../../../misc/', '(../../images/core/', $core_asset_contents); - } - - // Account for several additional differences between core assets and the - // Stable equivalents. - $before = [ - '* Default theme implementation', - 'Default template for', - "*\n * @ingroup themeable\n */", - "*\n* @ingroup themeable\n*/", - 'Default theme override', - 'Default view template', - "* Theme override of a container used to wrap the media library's\n * modal dialog interface.", - ]; - $after = [ - '* Theme override', - 'Theme override for', - '*/', - '*/', - 'Theme override', - 'Theme override', - "* Theme override of a container used to wrap the media library's modal dialog\n * interface.", - ]; - $core_asset_contents = str_replace($before, $after, $core_asset_contents); - - // Account for the module-specific subdirectories used by Stable CSS - // files that consume image files. - foreach (['shortcut', 'quickedit', 'color', 'views_ui', 'image'] as $module) { - $stable_asset_contents = str_replace("/../images/$module/", '/images/', $stable_asset_contents); - } - - // If the asset contents still differ after being changed to account for - // expected differences between core and stable, they are not identical - // and should be added to the array returned by this method. - if ($stable_asset_contents !== $core_asset_contents) { - $non_identical_files[] = $filename; - } - } - - return $non_identical_files; - } - - /** - * Confirms that theme assets are decoupled from Stable. - * - * @param string $path - * The path to the theme being tested. - * @param string[] $to_skip - * Assets to skip in the test. - * - * @dataProvider providerTestDecoupledStable - */ - public function testDecoupledStable($path, array $to_skip) { - $assets = []; - - // Get a list of asset files that differ between core and Stable. - $files_to_check = $this->assetsThatDifferInStable(); - - // Get all non-test .twig and .css assets within $path. - $this->getAssets($assets, $path); - - // Of the assets to check, exclude any that appear within the theme being - // tested as that means they're already overridden. Also exclude those - // listed in $to_skip. - $files_inherited_from_stable = array_diff($files_to_check, array_keys($assets), $to_skip); - $this->assertEmpty($files_inherited_from_stable); - } - - /** - * Data provider. - * - * The to-skip arrays should become increasingly smaller as issues that - * address Stable library dependencies are completed. - * - * @return array[] - * Themes and the asset filenames to be ignored. - */ - public function providerTestDecoupledStable() { - return [ - 'claro' => [ - 'path' => 'core/themes/claro', - 'to-skip' => [ - // The changes in the core version have acceptable results. - 'block.admin.css', - // The only difference is to address an issue with normalize.css 3.0.3 - // that is fixed by updating to version 8.0.1. - // @see https://drupal.org/node/2821525 - 'filter.caption.css', - // The only difference is overridden in Claro CSS. - 'progress.module.css', - // This template is not used by core themes. - 'status-report.html.twig', - // We've intentionally left system.admin.css broken in stable. - // @see https://drupal.org/node/3033734 - 'system.admin.css', - // The following two templates can be skipped as the only difference - // is the removal of an unnecessary data-striping attribute in core's - // version. - 'system-modules-details.html.twig', - 'system-modules-uninstall.html.twig', - ], - ], - 'seven' => [ - 'path' => 'core/themes/seven', - 'to-skip' => [ - // The changes in the core version have acceptable results. - 'block.admin.css', - // The only difference is to address an issue with normalize.css 3.0.3 - // that is fixed by updating to version 8.0.1. - // @see https://drupal.org/node/2821525 - 'filter.caption.css', - // The only difference is overridden in Seven CSS. - 'progress.module.css', - // This template is not used by core themes. - 'status-report.html.twig', - // The difference is a desired markup change. - // @see https://drupal.org/node/3113211 - 'views-ui-views-listing-table.html.twig', - // We've intentionally left system.admin.css broken in stable. - // @see https://drupal.org/node/3033734 - 'system.admin.css', - // The following two templates can be skipped as the only difference - // is the removal of an unnecessary data-striping attribute in core's - // version. - 'system-modules-details.html.twig', - 'system-modules-uninstall.html.twig', - ], - ], - 'bartik' => [ - 'path' => 'core/themes/bartik', - 'to-skip' => [ - // The only difference is overridden in Bartik CSS. - 'container-inline.module.css', - // The only difference is overridden in Bartik CSS. - 'progress.module.css', - // The changes are acceptable as Bartik is not an admin theme. - 'block.admin.css', - // The only difference is to address an issue with normalize.css 3.0.3 - // that is fixed by updating to version 8.0.1. - // @see https://drupal.org/node/2821525 - 'filter.caption.css', - // The only difference is a desired markup change. - // @see https://drupal.org/node/2528420 - 'install-page.html.twig', - // This template is not used by core themes. - 'status-report.html.twig', - // The differences in Stable vs. core are acceptable ones. - 'status-report-counter.html.twig', - // The only difference is one column of inconsequential whitespace. - 'status-report-general-info.html.twig', - // The differences in Stable vs. core are acceptable ones. - 'system-status-counter.css', - // We've intentionally left system.admin.css broken in stable. - // @see https://drupal.org/node/3033734 - 'system.admin.css', - // The difference is a desired markup change. - // @see https://drupal.org/node/3113211 - 'views-ui-views-listing-table.html.twig', - // The following two templates can be skipped as the only difference - // is the removal of an unnecessary data-striping attribute in core's - // version. - 'system-modules-details.html.twig', - 'system-modules-uninstall.html.twig', - ], - ], - 'umami' => [ - 'path' => 'core/profiles/demo_umami/themes/umami', - 'to-skip' => [ - // The only difference is overridden in Umami CSS. - 'container-inline.module.css', - // The only difference is overridden in Umami CSS. - 'progress.module.css', - // The changes are acceptable as Umami is not an admin theme. - 'block.admin.css', - // The only difference is to address an issue with normalize.css 3.0.3 - // that is fixed by updating to version 8.0.1. - // @see https://drupal.org/node/2821525 - 'filter.caption.css', - // The only difference is a desired markup change. - // @see https://drupal.org/node/2528420 - 'install-page.html.twig', - // This template is not used by core themes. - 'status-report.html.twig', - // The differences in Stable vs. core are acceptable ones. - 'status-report-counter.html.twig', - // The only difference is one column of inconsequential whitespace. - 'status-report-general-info.html.twig', - // The differences in Stable vs. core are acceptable ones. - 'system-status-counter.css', - // We've intentionally left system.admin.css broken in stable. - // @see https://drupal.org/node/3033734 - 'system.admin.css', - // The difference is a desired markup change. - // @see https://drupal.org/node/3113211 - 'views-ui-views-listing-table.html.twig', - // The following two templates can be skipped as the only difference - // is the removal of an unnecessary data-striping attribute in core's - // version. - 'system-modules-details.html.twig', - 'system-modules-uninstall.html.twig', - ], - ], - ]; - } - -}