function PlaceholderGeneratorTest::testRenderPlaceholdersDifferentSortedContextsTags

Same name and namespace in other branches
  1. 9 core/tests/Drupal/Tests/Core/Render/PlaceholderGeneratorTest.php \Drupal\Tests\Core\Render\PlaceholderGeneratorTest::testRenderPlaceholdersDifferentSortedContextsTags()
  2. 11.x core/tests/Drupal/Tests/Core/Render/PlaceholderGeneratorTest.php \Drupal\Tests\Core\Render\PlaceholderGeneratorTest::testRenderPlaceholdersDifferentSortedContextsTags()

Tests the creation of an element with a #lazy_builder callback.

Between two renders neither the cache contexts nor tags sort should change. A placeholder should generate the same hash, so it is not rendered twice.

@covers ::createPlaceholder

File

core/tests/Drupal/Tests/Core/Render/PlaceholderGeneratorTest.php, line 50

Class

PlaceholderGeneratorTest
@coversDefaultClass \Drupal\Core\Render\PlaceholderGenerator[[api-linebreak]] @group Render

Namespace

Drupal\Tests\Core\Render

Code

public function testRenderPlaceholdersDifferentSortedContextsTags() : void {
  $contexts_1 = [
    'user',
    'foo',
  ];
  $contexts_2 = [
    'foo',
    'user',
  ];
  $tags_1 = [
    'current-temperature',
    'foo',
  ];
  $tags_2 = [
    'foo',
    'current-temperature',
  ];
  $test_element = [
    '#cache' => [
      'max-age' => Cache::PERMANENT,
    ],
    '#lazy_builder' => [
      'Drupal\\Tests\\Core\\Render\\PlaceholdersTest::callback',
      [
        'foo' => TRUE,
      ],
    ],
  ];
  $test_element['#cache']['contexts'] = $contexts_1;
  $test_element['#cache']['tags'] = $tags_1;
  $placeholder_element1 = $this->placeholderGenerator
    ->createPlaceholder($test_element);
  $test_element['#cache']['contexts'] = $contexts_2;
  $test_element['#cache']['tags'] = $tags_1;
  $placeholder_element2 = $this->placeholderGenerator
    ->createPlaceholder($test_element);
  $test_element['#cache']['contexts'] = $contexts_1;
  $test_element['#cache']['tags'] = $tags_2;
  $placeholder_element3 = $this->placeholderGenerator
    ->createPlaceholder($test_element);
  // Verify placeholder and specially hash are same with different contexts
  // order.
  $this->assertSame((string) $placeholder_element1['#markup'], (string) $placeholder_element2['#markup']);
  // Verify placeholder and specially hash are same with different tags order.
  $this->assertSame((string) $placeholder_element1['#markup'], (string) $placeholder_element3['#markup']);
}

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