Verified Commit 7e28ed51 authored by Théodore Biadala's avatar Théodore Biadala
Browse files

Issue #3419621 by dburiak, sijumpk, smustgrave, pameeela, alexpott:...

Issue #3419621 by dburiak, sijumpk, smustgrave, pameeela, alexpott: tablePositionSticky should not be called on a non-array variable
parent f1601a48
Loading
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace Drupal\KernelTests\Core\Theme;

use Drupal\claro\ClaroPreRender;
use Drupal\KernelTests\KernelTestBase;

/**
@@ -38,4 +39,35 @@ public function testThemeTableStickyHeaders() {
    $this->assertRaw('position-sticky');
  }

  /**
   * Confirm Claro prerender callback is not executed for non-array class.
   */
  public function testThemeTablePositionStickyPreRender(): void {
    // Enable the Claro theme.
    \Drupal::service('theme_installer')->install(['claro']);
    $this->config('system.theme')->set('default', 'claro')->save();
    $header = ['one', 'two', 'three'];
    $rows = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];
    $table = [
      '#type' => 'table',
      '#header' => $header,
      '#rows' => $rows,
      '#sticky' => TRUE,
      '#attributes' => [
        'class' => 'class',
      ],
      '#pre_render' => [
        [
          ClaroPreRender::class,
          'tablePositionSticky',
        ],
      ],
    ];

    $renderedTable = \Drupal::service('renderer')->renderRoot($table);

    // Confirm that table is rendered.
    $this->assertStringContainsString('class="class"', $renderedTable);
  }

}
+1 −1
Original line number Diff line number Diff line
@@ -193,7 +193,7 @@ public static function messagePlaceholder(array $element) {
   * Prerender callback for table elements.
   */
  public static function tablePositionSticky(array $element) {
    if (isset($element['#attributes']['class']) && in_array('sticky-enabled', $element['#attributes']['class'])) {
    if (isset($element['#attributes']['class']) && is_array($element['#attributes']['class']) && in_array('sticky-enabled', $element['#attributes']['class'], TRUE)) {
      unset($element['#attributes']['class'][array_search('sticky-enabled', $element['#attributes']['class'])]);
      $element['#attributes']['class'][] = 'position-sticky';
    }