Verified Commit 5e778473 authored by Dave Long's avatar Dave Long
Browse files

Issue #2972153 by dimitriskr, alexpott, smustgrave, andypost, kostyashupenko:...

Issue #2972153 by dimitriskr, alexpott, smustgrave, andypost, kostyashupenko: Deprecate ThemeHandlerInterface::getBaseThemes and remove usages from core

(cherry picked from commit 1e80a22b)
parent 1837cf5b
Loading
Loading
Loading
Loading
Loading
+6 −0
Changes for core/lib/Drupal/Core/Extension/ThemeExtensionList.php: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -210,8 +210,14 @@ protected function fillInSubThemeData(array &$themes, array $sub_themes) {
   * @return array
   *   Returns an array of all of the theme's ancestors; the first element's
   *   value will be NULL if an error occurred.
   *
   * @deprecated in drupal:10.3.0 and is removed from drupal:12.0.0. There
   *   is no direct replacement.
   *
   * @see https://www.drupal.org/node/3413187
   */
  public function getBaseThemes(array $themes, $theme) {
    @trigger_error("\Drupal\Core\Extension\ThemeExtensionList::getBaseThemes() is deprecated in drupal:10.3.0 and is removed from drupal:12.0.0. There is no direct replacement. See https://www.drupal.org/node/3413187", E_USER_DEPRECATED);
    return $this->doGetBaseThemes($themes, $theme);
  }

+1 −0
Changes for core/lib/Drupal/Core/Extension/ThemeHandler.php: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -133,6 +133,7 @@ public function rebuildThemeData() {
   * {@inheritdoc}
   */
  public function getBaseThemes(array $themes, $theme) {
    @trigger_error("\Drupal\Core\Extension\ThemeHandlerInterface::getBaseThemes() is deprecated in drupal:10.3.0 and is removed from drupal:12.0.0. There is no direct replacement. See https://www.drupal.org/node/3413187", E_USER_DEPRECATED);
    return $this->themeList->getBaseThemes($themes, $theme);
  }

+5 −0
Changes for core/lib/Drupal/Core/Extension/ThemeHandlerInterface.php: 5 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -98,6 +98,11 @@ public function rebuildThemeData();
   * @return array
   *   Returns an array of all of the theme's ancestors; the first element's
   *   value will be NULL if an error occurred.
   *
   * @deprecated in drupal:10.3.0 and is removed from drupal:12.0.0. There
   *    is no direct replacement.
   *
   * @see https://www.drupal.org/node/3413187
   */
  public function getBaseThemes(array $themes, $theme);

+32 −3
Changes for core/tests/Drupal/Tests/Core/Extension/ThemeExtensionListTest.php: 32 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -116,7 +116,9 @@ public function testRebuildThemeDataWithThemeParents() {
   * @param array $expected
   *   The expected base themes.
   *
   * @dataProvider providerTestGetBaseThemes
   * @dataProvider providerTestDoGetBaseThemes
   *
   * @group legacy
   */
  public function testGetBaseThemes(array $themes, $theme, array $expected) {
    // Mocks and stubs.
@@ -126,18 +128,45 @@ public function testGetBaseThemes(array $themes, $theme, array $expected) {
    $theme_engine_list = $this->prophesize(ThemeEngineExtensionList::class);
    $theme_listing = new ThemeExtensionList($this->root, 'theme', new NullBackend('test'), new InfoParser($this->root), $module_handler->reveal(), $state, $config_factory, $theme_engine_list->reveal(), 'test');

    $this->expectDeprecation("\Drupal\Core\Extension\ThemeExtensionList::getBaseThemes() is deprecated in drupal:10.3.0 and is removed from drupal:12.0.0. There is no direct replacement. See https://www.drupal.org/node/3413187");
    $base_themes = $theme_listing->getBaseThemes($themes, $theme);

    $this->assertEquals($expected, $base_themes);
  }

  /**
   * Provides test data for testGetBaseThemes.
   * Tests getting the base themes for a set of defined themes.
   *
   * @param array $themes
   *   An array of available themes, keyed by the theme name.
   * @param string $theme
   *   The theme name to find all its base themes.
   * @param array $expected
   *   The expected base themes.
   *
   * @dataProvider providerTestDoGetBaseThemes
   */
  public function testDoGetBaseThemes(array $themes, $theme, array $expected): void {
    // Mocks and stubs.
    $module_handler = $this->prophesize(ModuleHandlerInterface::class);
    $state = new State(new KeyValueMemoryFactory());
    $config_factory = $this->getConfigFactoryStub([]);
    $theme_engine_list = $this->prophesize(ThemeEngineExtensionList::class);
    $theme_listing = new ThemeExtensionList($this->root, 'theme', new NullBackend('test'), new InfoParser($this->root), $module_handler->reveal(), $state, $config_factory, $theme_engine_list->reveal(), 'test');

    $method_to_test = (new \ReflectionObject($theme_listing))->getMethod('doGetBaseThemes');
    $base_themes = $method_to_test->invoke($theme_listing, $themes, $theme);

    $this->assertEquals($expected, $base_themes);
  }

  /**
   * Provides test data for testDoGetBaseThemes.
   *
   * @return array
   *   An array of theme test data.
   */
  public static function providerTestGetBaseThemes() {
  public static function providerTestDoGetBaseThemes() {
    $data = [];

    // Tests a theme without any base theme.