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 @@
+<?php
+
+/**
+ * @file
+ * Add hooks for tests to use.
+ */
+use Drupal\views\ViewExecutable;
+
+/**
+ * Implements hook_views_pre_render().
+ */
+function test_basetheme_views_pre_render(ViewExecutable $view) {
+  // We append the function name to the title for test to check for.
+  $view->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 @@
+<?php
+
+/**
+ * @file
+ * Add hooks for tests to use.
+ */
+
+use Drupal\views\ViewExecutable;
+
+/**
+ * Implements hook_views_pre_render().
+ */
+function test_subtheme_views_pre_render(ViewExecutable $view) {
+  // We append the function name to the title for test to check for.
+  $view->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 100755
index 0000000..9f2ed2e
--- /dev/null
+++ b/core/modules/views/lib/Drupal/views/Tests/ViewsThemeIntegrationTest.php
@@ -0,0 +1,93 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views\Tests\ViewsThemeIntegrationTest.
+ */
+
+namespace Drupal\views\Tests;
+
+/**
+ * As views uses a lot of theme related functionality we need to test these too.
+ *
+ * We test against test_basetheme and test_subtheme provided by theme_test
+ */
+class ViewsThemeIntegrationTest extends ViewTestBase {
+
+ /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = array('test_page_display');
+
+
+  /**
+   * Used by WebTestBase::setup()
+   *
+   * We need theme_test for testing against test_basetheme and test_subtheme.
+   *
+   * @var array
+   *
+   * @see \Drupal\simpletest\WebTestBase::setup()
+   */
+  public static $modules = array('views', 'theme_test');
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => '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");
+  }
+
+}
