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 0000000000000000000000000000000000000000..ef6e071d553dfde418b9a8790445feeaaa5a4aa8 --- /dev/null +++ b/core/modules/system/tests/themes/test_basetheme/test_basetheme.theme @@ -0,0 +1,23 @@ +setTitle($view->getTitle() . ":" . __FUNCTION__); +} + +/** + * Implements hook_views_post_render(). + */ +function test_basetheme_views_post_render(ViewExecutable $view) { + // We append the function name to the title for test to check for. + $view->setTitle($view->getTitle() . ":" . __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 0000000000000000000000000000000000000000..e651807ae9f40a5ee91bd2e73a9316e3ba69b0a8 --- /dev/null +++ b/core/modules/system/tests/themes/test_subtheme/test_subtheme.theme @@ -0,0 +1,24 @@ +setTitle($view->getTitle() . ":" . __FUNCTION__); +} + +/** + * Implements hook_views_post_render(). + */ +function test_subtheme_views_post_render(ViewExecutable $view) { + // We append the function name to the title for test to check for. + $view->setTitle($view->getTitle() . ":" . __FUNCTION__); +} diff --git a/core/modules/views/lib/Drupal/views/Tests/ViewsThemeIntegrationTest.php b/core/modules/views/lib/Drupal/views/Tests/ViewsThemeIntegrationTest.php new file mode 100644 index 0000000000000000000000000000000000000000..9f2ed2e8f540e5793a709cf4ce5b871ce58d82db --- /dev/null +++ b/core/modules/views/lib/Drupal/views/Tests/ViewsThemeIntegrationTest.php @@ -0,0 +1,93 @@ + 'Views theme integration test', + 'description' => 'Tests the Views theme integration.', + 'group' => 'Views', + ); + } + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + + $this->enableViewsTestModule(); + } + + /** + * Tests for exceptions and successful execution of hook_views_pre_render() + * and hook_views_post_render() in theme and subtheme. + */ + public function testThemedViewPage() { + + \Drupal::service('theme_handler')->enable(array('test_basetheme', 'test_subtheme')); + + // Make base theme default then test for hook invocations. + \Drupal::config('system.theme') + ->set('default', 'test_basetheme') + ->save(); + $this->assertEqual(\Drupal::config('system.theme')->get('default'), 'test_basetheme'); + + // Make sure a views rendered page is touched. + $this->drupalGet('test_page_display_200'); + + $this->assertRaw("test_basetheme_views_pre_render", "Views title changed by test_basetheme.test_basetheme_views_pre_render"); + $this->assertRaw("test_basetheme_views_post_render", "Views title changed by test_basetheme.test_basetheme_views_post_render"); + + // Make sub theme default to test for hook invocation + // from both sub and base theme. + \Drupal::config('system.theme') + ->set('default', 'test_subtheme') + ->save(); + $this->assertEqual(\Drupal::config('system.theme')->get('default'), 'test_subtheme'); + + // Make sure a views rendered page is touched. + $this->drupalGet('test_page_display_200'); + + $this->assertRaw("test_subtheme_views_pre_render", "Views title changed by test_usetheme.test_subtheme_views_pre_render"); + $this->assertRaw("test_subtheme_views_post_render", "Views title changed by test_usetheme.test_subtheme_views_post_render"); + + $this->assertRaw("test_basetheme_views_pre_render", "Views title changed by test_basetheme.test_basetheme_views_pre_render"); + $this->assertRaw("test_basetheme_views_post_render", "Views title changed by test_basetheme.test_basetheme_views_post_render"); + } + +} diff --git a/core/modules/views/lib/Drupal/views/ViewExecutable.php b/core/modules/views/lib/Drupal/views/ViewExecutable.php index 88ebefc54932489802d9052c4d80e00ae52023af..9d9c857ed325108c2f5055860dd0e66c6a672f76 100644 --- a/core/modules/views/lib/Drupal/views/ViewExecutable.php +++ b/core/modules/views/lib/Drupal/views/ViewExecutable.php @@ -1360,7 +1360,7 @@ public function render($display_id = NULL) { // Let the themes play too, because pre render is a very themey thing. if (isset($GLOBALS['base_theme_info']) && isset($GLOBALS['theme'])) { foreach ($GLOBALS['base_theme_info'] as $base) { - $module_handler->invoke($base, 'views_pre_render', array($this)); + $module_handler->invoke($base->name, 'views_pre_render', array($this)); } $module_handler->invoke($GLOBALS['theme'], 'views_pre_render', array($this)); @@ -1384,7 +1384,7 @@ public function render($display_id = NULL) { // Let the themes play too, because post render is a very themey thing. if (isset($GLOBALS['base_theme_info']) && isset($GLOBALS['theme'])) { foreach ($GLOBALS['base_theme_info'] as $base) { - $module_handler->invoke($base, 'views_post_render', array($this)); + $module_handler->invoke($base->name, 'views_post_render', array($this)); } $module_handler->invoke($GLOBALS['theme'], 'views_post_render', array($this));