diff --git a/core/modules/system/lib/Drupal/system/Tests/Theme/ThemePrepareTest.php b/core/modules/system/lib/Drupal/system/Tests/Theme/ThemePrepareTest.php index 9614924..ecd4d56 100644 --- a/core/modules/system/lib/Drupal/system/Tests/Theme/ThemePrepareTest.php +++ b/core/modules/system/lib/Drupal/system/Tests/Theme/ThemePrepareTest.php @@ -29,31 +29,37 @@ public static function getInfo() { ); } - function setUp() { + public function setUp() { parent::setUp(); - theme_enable(array('test_theme')); + theme_enable(array('test_theme', 'test_basetheme', 'test_subtheme')); } - function testThemePrepare() { + /** + * Ensures prepare hooks work and are invoked and in the correct order. + */ + public function testThemePrepare() { $this->drupalGet('theme-test/prepare'); $this->assertRaw('

moduleVariable1: Drupal\theme_test\ThemeTestController::prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleVariable2: Drupal\theme_test\ThemeTestController::prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleVariableSuggestion1: Drupal\theme_test\ThemeTestController::prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleVariableSuggestion2: Drupal\theme_test\ThemeTestController::prepare
theme_test_theme_prepare_theme_test_prepare__implemented
@@ -62,7 +68,9 @@ function testThemePrepare() { test_theme_theme_prepare_theme_test_prepare__implemented
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
-theme_test_theme_prepare_theme_test_prepare__implemented_alter

'); +test_theme_theme_prepare_theme_test_prepare_alter
+theme_test_theme_prepare_theme_test_prepare__implemented_alter
+test_theme_theme_prepare_theme_test_prepare__implemented_alter

'); $this->assertRaw('

moduleVariableSuggestion3: Drupal\theme_test\ThemeTestController::prepare
theme_test_theme_prepare_theme_test_prepare__implemented__extended
@@ -71,127 +79,179 @@ function testThemePrepare() { test_theme_theme_prepare_theme_test_prepare__implemented__extended
theme_test_theme_prepare_alter
test_theme_theme_prepare_alter
-theme_test_theme_prepare_theme_test_prepare__implemented__extended_alter

'); +test_theme_theme_prepare_theme_test_prepare_alter
+theme_test_theme_prepare_theme_test_prepare__implemented__extended_alter
+test_theme_theme_prepare_theme_test_prepare__implemented__extended_alter

'); $this->assertRaw('

moduleElement1: Drupal\theme_test\ThemeTestController::prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleInjectedVariable1: theme_test_theme_prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleInjectedVariable2: theme_test_theme_prepare_theme_test_prepare_element
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

themeInjectedVariable1: test_theme_theme_prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleInjectedVariable3: theme_test_theme_prepare_theme_test_prepare_element_alter
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleElementSuggestion1: Drupal\theme_test\ThemeTestController::prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleInjectedVariable1: theme_test_theme_prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleInjectedVariable2: theme_test_theme_prepare_theme_test_prepare_element
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

themeInjectedVariable1: test_theme_theme_prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleInjectedVariable3: theme_test_theme_prepare_theme_test_prepare_element_alter
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleElementSuggestion2: Drupal\theme_test\ThemeTestController::prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleInjectedVariable1: theme_test_theme_prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleInjectedVariable2: theme_test_theme_prepare_theme_test_prepare_element
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

themeInjectedVariable1: test_theme_theme_prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleInjectedVariable3: theme_test_theme_prepare_theme_test_prepare_element_alter
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleElementSuggestion3: Drupal\theme_test\ThemeTestController::prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleInjectedVariable1: theme_test_theme_prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleInjectedVariable2: theme_test_theme_prepare_theme_test_prepare_element
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

themeInjectedVariable1: test_theme_theme_prepare
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); $this->assertRaw('

moduleInjectedVariable3: theme_test_theme_prepare_theme_test_prepare_element_alter
test_theme_theme_prepare
test_theme_theme_prepare_theme_test_prepare
theme_test_theme_prepare_alter
-test_theme_theme_prepare_alter

'); +test_theme_theme_prepare_alter
+test_theme_theme_prepare_theme_test_prepare_alter

'); + } + + /** + * Ensures prepare hooks for subthemes work. + */ + function testThemePrepareSubtheme() { + \Drupal::config('system.theme') + ->set('default', 'test_subtheme') + ->save(); + $this->drupalGet('theme-test/prepare-subtheme'); + + $this->assertRaw('

subThemePrepare: Drupal\theme_test\ThemeTestController::prepareSubtheme
+test_basetheme_theme_prepare_theme_test_prepare
+test_subtheme_theme_prepare_theme_test_prepare
+theme_test_theme_prepare_alter
+test_basetheme_theme_prepare_theme_test_prepare_alter
+test_subtheme_theme_prepare_theme_test_prepare_alter

'); + + $this->assertRaw('

subThemePrepareSuggestion: Drupal\theme_test\ThemeTestController::prepareSubtheme
+theme_test_theme_prepare_theme_test_prepare__implemented
+test_basetheme_theme_prepare_theme_test_prepare
+test_subtheme_theme_prepare_theme_test_prepare
+test_basetheme_theme_prepare_theme_test_prepare__implemented
+test_subtheme_theme_prepare_theme_test_prepare__implemented
+theme_test_theme_prepare_alter
+test_basetheme_theme_prepare_theme_test_prepare_alter
+test_subtheme_theme_prepare_theme_test_prepare_alter
+theme_test_theme_prepare_theme_test_prepare__implemented_alter
+test_basetheme_theme_prepare_theme_test_prepare__implemented_alter
+test_subtheme_theme_prepare_theme_test_prepare__implemented_alter

'); } } diff --git a/core/modules/system/tests/modules/theme_test/lib/Drupal/theme_test/ThemeTestController.php b/core/modules/system/tests/modules/theme_test/lib/Drupal/theme_test/ThemeTestController.php index 9becb7d..34392d2 100644 --- a/core/modules/system/tests/modules/theme_test/lib/Drupal/theme_test/ThemeTestController.php +++ b/core/modules/system/tests/modules/theme_test/lib/Drupal/theme_test/ThemeTestController.php @@ -185,4 +185,22 @@ function prepare() { ); } + /** + * Menu callback for testing prepare hooks with subthemes. + */ + function prepareSubtheme() { + return array( + 'subThemePrepare' => array( + '#theme' => 'theme_test_prepare', + '#title' => 'subThemePrepare', + '#value' => __METHOD__, + ), + 'subThemePrepareSuggestion' => array( + '#theme' => 'theme_test_prepare__implemented', + '#title' => 'subThemePrepareSuggestion', + '#value' => __METHOD__, + ), + ); + } + } diff --git a/core/modules/system/tests/modules/theme_test/theme_test.module b/core/modules/system/tests/modules/theme_test/theme_test.module index e0b2632..0a31b7a 100644 --- a/core/modules/system/tests/modules/theme_test/theme_test.module +++ b/core/modules/system/tests/modules/theme_test/theme_test.module @@ -228,14 +228,14 @@ function theme_test_theme_prepare_theme_test_prepare__implemented_alter(&$variab } /** - * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION__SUGGESTION(). + * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION(). */ function theme_test_theme_prepare_theme_test_prepare__implemented__extended(&$variables) { $variables['value'] .= "
\n" . __FUNCTION__; } /** - * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION__SUGGESTION_alter(). + * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION_alter(). */ function theme_test_theme_prepare_theme_test_prepare__implemented__extended_alter(&$variables) { $variables['value'] .= "
\n" . __FUNCTION__; diff --git a/core/modules/system/tests/modules/theme_test/theme_test.routing.yml b/core/modules/system/tests/modules/theme_test/theme_test.routing.yml index 3c2f46e..c83536b 100644 --- a/core/modules/system/tests/modules/theme_test/theme_test.routing.yml +++ b/core/modules/system/tests/modules/theme_test/theme_test.routing.yml @@ -78,15 +78,8 @@ theme_test.prepare: _permission: 'access content' theme_test.prepare_alter: - path: '/theme-test/prepare-alter' + path: '/theme-test/prepare-subtheme' defaults: - _content: '\Drupal\theme_test\ThemeTestController::prepareAlter' - requirements: - _permission: 'access content' - -theme_test.prepare_suggestion: - path: '/theme-test/prepare-suggestion' - defaults: - _content: '\Drupal\theme_test\ThemeTestController::prepareSuggestion' + _content: '\Drupal\theme_test\ThemeTestController::prepareSubtheme' requirements: _permission: 'access content' diff --git a/core/modules/system/tests/themes/test_basetheme/test_basetheme.theme b/core/modules/system/tests/themes/test_basetheme/test_basetheme.theme new file mode 100644 index 0000000..7def511 --- /dev/null +++ b/core/modules/system/tests/themes/test_basetheme/test_basetheme.theme @@ -0,0 +1,34 @@ +\n" . __FUNCTION__; +} + +/** + * Implements hook_theme_prepare_THEME_HOOK_alter(). + */ +function test_basetheme_theme_prepare_theme_test_prepare_alter(&$variables) { + $variables['value'] .= "
\n" . __FUNCTION__; +} + +/** + * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION(). + */ +function test_basetheme_theme_prepare_theme_test_prepare__implemented(&$variables) { + $variables['value'] .= "
\n" . __FUNCTION__; +} + +/** + * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION_alter(). + */ +function test_basetheme_theme_prepare_theme_test_prepare__implemented_alter(&$variables) { + $variables['value'] .= "
\n" . __FUNCTION__; +} diff --git a/core/modules/system/tests/themes/test_subtheme/test_subtheme.theme b/core/modules/system/tests/themes/test_subtheme/test_subtheme.theme new file mode 100644 index 0000000..affb5fb --- /dev/null +++ b/core/modules/system/tests/themes/test_subtheme/test_subtheme.theme @@ -0,0 +1,34 @@ +\n" . __FUNCTION__; +} + +/** + * Implements hook_theme_prepare_THEME_HOOK_alter(). + */ +function test_subtheme_theme_prepare_theme_test_prepare_alter(&$variables) { + $variables['value'] .= "
\n" . __FUNCTION__; +} + +/** + * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION(). + */ +function test_subtheme_theme_prepare_theme_test_prepare__implemented(&$variables) { + $variables['value'] .= "
\n" . __FUNCTION__; +} + +/** + * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION_alter(). + */ +function test_subtheme_theme_prepare_theme_test_prepare__implemented_alter(&$variables) { + $variables['value'] .= "
\n" . __FUNCTION__; +} diff --git a/core/modules/system/tests/themes/test_theme/test_theme.theme b/core/modules/system/tests/themes/test_theme/test_theme.theme index 99eb007..acf63bd 100644 --- a/core/modules/system/tests/themes/test_theme/test_theme.theme +++ b/core/modules/system/tests/themes/test_theme/test_theme.theme @@ -105,34 +105,34 @@ function test_theme_theme_prepare_theme_test_prepare(&$variables) { /** * Implements hook_theme_prepare_THEME_HOOK_alter(). */ -function test_theme_theme_prepare_theme_test_prepare_alter($variables) { +function test_theme_theme_prepare_theme_test_prepare_alter(&$variables) { $variables['value'] .= "
\n" . __FUNCTION__; } /** * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION(). */ -function test_theme_theme_prepare_theme_test_prepare__implemented($variables) { +function test_theme_theme_prepare_theme_test_prepare__implemented(&$variables) { $variables['value'] .= "
\n" . __FUNCTION__; } /** * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION_alter(). */ -function test_theme_theme_prepare_theme_test_prepare__implemented_alter($variables) { +function test_theme_theme_prepare_theme_test_prepare__implemented_alter(&$variables) { $variables['value'] .= "
\n" . __FUNCTION__; } /** - * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION__SUGGESTION(). + * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION(). */ -function test_theme_theme_prepare_theme_test_prepare__implemented__extended($variables) { +function test_theme_theme_prepare_theme_test_prepare__implemented__extended(&$variables) { $variables['value'] .= "
\n" . __FUNCTION__; } /** - * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION__SUGGESTION_alter(). + * Implements hook_theme_prepare_THEME_HOOK__SUGGESTION_alter(). */ -function test_theme_theme_prepare_theme_test_prepare__implemented__extended_alter($variables) { +function test_theme_theme_prepare_theme_test_prepare__implemented__extended_alter(&$variables) { $variables['value'] .= "
\n" . __FUNCTION__; }