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__;
}