You are here

function PageRenderTest::assertPageRenderHookExceptions in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/system/src/Tests/Common/PageRenderTest.php \Drupal\system\Tests\Common\PageRenderTest::assertPageRenderHookExceptions()

Asserts whether expected exceptions are thrown for invalid hook implementations.

Parameters

string $module: The module whose invalid logic in its hooks to enable.

string $hook: The page render hook to assert expected exceptions for.

2 calls to PageRenderTest::assertPageRenderHookExceptions()
PageRenderTest::testHookPageAlter in core/modules/system/src/Tests/Common/PageRenderTest.php
Tests hook_page_attachments_alter() exceptions.
PageRenderTest::testHookPageAttachmentsExceptions in core/modules/system/src/Tests/Common/PageRenderTest.php
Tests hook_page_attachments() exceptions.

File

core/modules/system/src/Tests/Common/PageRenderTest.php, line 49
Contains \Drupal\system\Tests\Common\PageRenderTest.

Class

PageRenderTest
Test page rendering hooks.

Namespace

Drupal\system\Tests\Common

Code

function assertPageRenderHookExceptions($module, $hook) {
  $html_renderer = \Drupal::getContainer()
    ->get('main_content_renderer.html');

  // Assert a valid hook implementation doesn't trigger an exception.
  $page = [];
  $html_renderer
    ->invokePageAttachmentHooks($page);

  // Assert that hooks can set cache tags.
  $this
    ->assertEqual($page['#cache']['tags'], [
    'example',
  ]);
  $this
    ->assertEqual($page['#cache']['contexts'], [
    'user.permissions',
  ]);

  // Assert an invalid hook implementation doesn't trigger an exception.
  \Drupal::state()
    ->set($module . '.' . $hook . '.descendant_attached', TRUE);
  $assertion = $hook . '() implementation that sets #attached on a descendant triggers an exception';
  $page = [];
  try {
    $html_renderer
      ->invokePageAttachmentHooks($page);
    $this
      ->error($assertion);
  } catch (\LogicException $e) {
    $this
      ->pass($assertion);
    $this
      ->assertEqual($e
      ->getMessage(), 'Only #attached and #cache may be set in ' . $hook . '().');
  }
  \Drupal::state()
    ->set('bc_test.' . $hook . '.descendant_attached', FALSE);

  // Assert an invalid hook implementation doesn't trigger an exception.
  \Drupal::state()
    ->set('bc_test.' . $hook . '.render_array', TRUE);
  $assertion = $hook . '() implementation that sets a child render array triggers an exception';
  $page = [];
  try {
    $html_renderer
      ->invokePageAttachmentHooks($page);
    $this
      ->error($assertion);
  } catch (\LogicException $e) {
    $this
      ->pass($assertion);
    $this
      ->assertEqual($e
      ->getMessage(), 'Only #attached and #cache may be set in ' . $hook . '().');
  }
  \Drupal::state()
    ->set($module . '.' . $hook . '.render_array', FALSE);
}