You are here

public function ViewsHooksTest::testHooks in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/views/tests/src/Kernel/ViewsHooksTest.php \Drupal\Tests\views\Kernel\ViewsHooksTest::testHooks()
  2. 10 core/modules/views/tests/src/Kernel/ViewsHooksTest.php \Drupal\Tests\views\Kernel\ViewsHooksTest::testHooks()

Tests the hooks.

File

core/modules/views/tests/src/Kernel/ViewsHooksTest.php, line 64

Class

ViewsHooksTest
Tests that views hooks are registered when defined in $module.views.inc.

Namespace

Drupal\Tests\views\Kernel

Code

public function testHooks() {
  $view = Views::getView('test_view');
  $view
    ->setDisplay();

  // Test each hook is found in the implementations array and is invoked.
  foreach (static::$hooks as $hook => $type) {
    $this
      ->assertTrue($this->moduleHandler
      ->implementsHook('views_test_data', $hook), new FormattableMarkup('The hook @hook was registered.', [
      '@hook' => $hook,
    ]));
    if ($hook == 'views_post_render') {
      $this->moduleHandler
        ->invoke('views_test_data', $hook, [
        $view,
        &$view->display_handler->output,
        $view->display_handler
          ->getPlugin('cache'),
      ]);
      continue;
    }
    switch ($type) {
      case 'view':
        $this->moduleHandler
          ->invoke('views_test_data', $hook, [
          $view,
        ]);
        break;
      case 'alter':
        $data = [];
        $this->moduleHandler
          ->invoke('views_test_data', $hook, [
          $data,
        ]);
        break;
      default:
        $this->moduleHandler
          ->invoke('views_test_data', $hook);
    }
    $this
      ->assertTrue($this->container
      ->get('state')
      ->get('views_hook_test_' . $hook), new FormattableMarkup('The %hook hook was invoked.', [
      '%hook' => $hook,
    ]));

    // Reset the module implementations cache, so we ensure that the
    // .views.inc file is loaded actively.
    $this->moduleHandler
      ->resetImplementations();
  }
}