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..ef6e071 --- /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 0000000..e651807 --- /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 0000000..1cc31fd --- /dev/null +++ b/core/modules/views/lib/Drupal/views/Tests/ViewsThemeIntegrationTest.php @@ -0,0 +1,107 @@ + 'Views theme integration test', + 'description' => 'Tests the Views theme integration.', + 'group' => 'Views theming', + ); + } + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + } + + /** + * Tests for exceptions. + */ + public function testNodesPage() { + + $account = $this->drupalCreateUser(array()); + $this->drupalLogin($account); + + // Create article for view on the frontpage. + $type_values = array( + 'type' => 'article', + 'name' => 'Basic article', + 'published' => TRUE, + 'promote' => TRUE, + ); + $this->drupalCreateContentType($type_values); + + $values['type'] = 'article'; + $values['title'] = $this->randomName(); + $values['promote'] = TRUE; + $values['status'] = TRUE; + $values['created'] = REQUEST_TIME; + + $node = $this->drupalCreateNode($values); + $this->drupalGet('node/' . $node->id()); + + \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'); + + // Views kicks in + $this->drupalGet('node'); + $this->assertRaw($values['title'], "Title found"); + + $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'); + + // Views kicks in + $this->drupalGet('node'); + $this->assertRaw($values['title'], "Title found"); + + $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 c9b097a..0451544 100644 --- a/core/modules/views/lib/Drupal/views/ViewExecutable.php +++ b/core/modules/views/lib/Drupal/views/ViewExecutable.php @@ -1360,7 +1360,7 @@ class ViewExecutable { // 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 @@ class ViewExecutable { // 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));