You are here

public function PlaceholderGeneratorTest::testRenderPlaceholdersDifferentSortedContextsTags in Drupal 10

Create an element with #lazy_builder callback. Between two renders, cache contexts nor tags sort change. Placeholder should generate same hash to not be rendered twice.

@covers ::createPlaceholder

File

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

Class

PlaceholderGeneratorTest
@coversDefaultClass \Drupal\Core\Render\PlaceholderGenerator @group Render

Namespace

Drupal\Tests\Core\Render

Code

public function testRenderPlaceholdersDifferentSortedContextsTags() {
  $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']);
}