function ViewsHooksTest::testHooks

Same name and namespace in other branches
  1. 9 core/modules/views/tests/src/Kernel/ViewsHooksTest.php \Drupal\Tests\views\Kernel\ViewsHooksTest::testHooks()
  2. 8.9.x core/modules/views/tests/src/Kernel/ViewsHooksTest.php \Drupal\Tests\views\Kernel\ViewsHooksTest::testHooks()
  3. 11.x 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 76

Class

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

Namespace

Drupal\Tests\views\Kernel

Code

public function testHooks() : void {
  $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
      ->hasImplementations($hook, 'views_test_data'), "The hook {$hook} was registered.");
    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
          ->alter($hook, $data);
        break;

      default:
        $this->moduleHandler
          ->invoke('views_test_data', $hook);
    }
    $this->assertTrue($this->container
      ->get('state')
      ->get('views_hook_test_' . $hook), "The {$hook} hook was invoked.");
    // Reset the module implementations cache, so we ensure that the
    // .views.inc file is loaded actively.
    $this->moduleHandler
      ->resetImplementations();
  }
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.