You are here

public function FieldKernelTest::_testHideIfEmpty in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/views/tests/src/Kernel/Handler/FieldKernelTest.php \Drupal\Tests\views\Kernel\Handler\FieldKernelTest::_testHideIfEmpty()

Tests the hide if empty functionality.

This tests alters the result to get easier and less coupled results. It is important that assertSame() is used in this test since in PHP 0 == ''.

1 call to FieldKernelTest::_testHideIfEmpty()
FieldKernelTest::testEmpty in core/modules/views/tests/src/Kernel/Handler/FieldKernelTest.php
Tests everything related to empty output of a field.

File

core/modules/views/tests/src/Kernel/Handler/FieldKernelTest.php, line 405

Class

FieldKernelTest
Tests the generic field handler.

Namespace

Drupal\Tests\views\Kernel\Handler

Code

public function _testHideIfEmpty() {

  /** @var \Drupal\Core\Render\RendererInterface $renderer */
  $renderer = \Drupal::service('renderer');
  $view = Views::getView('test_view');
  $view
    ->initDisplay();
  $this
    ->executeView($view);
  $column_map_reversed = array_flip($this->columnMap);
  $view->row_index = 0;
  $random_name = $this
    ->randomMachineName();
  $random_value = $this
    ->randomMachineName();

  // Test when results are not rewritten and empty values are not hidden.
  $view->field['name']->options['hide_alter_empty'] = FALSE;
  $view->field['name']->options['hide_empty'] = FALSE;
  $view->field['name']->options['empty_zero'] = FALSE;

  // Test a valid string.
  $view->result[0]->{$column_map_reversed['name']} = $random_name;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame($random_name, (string) $render, 'By default, a string should not be treated as empty.');

  // Test an empty string.
  $view->result[0]->{$column_map_reversed['name']} = "";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("", $render, 'By default, "" should not be treated as empty.');

  // Test zero as an integer.
  $view->result[0]->{$column_map_reversed['name']} = 0;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame('0', (string) $render, 'By default, 0 should not be treated as empty.');

  // Test zero as a string.
  $view->result[0]->{$column_map_reversed['name']} = "0";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("0", (string) $render, 'By default, "0" should not be treated as empty.');

  // Test when results are not rewritten and non-zero empty values are hidden.
  $view->field['name']->options['hide_alter_empty'] = TRUE;
  $view->field['name']->options['hide_empty'] = TRUE;
  $view->field['name']->options['empty_zero'] = FALSE;

  // Test a valid string.
  $view->result[0]->{$column_map_reversed['name']} = $random_name;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame($random_name, (string) $render, 'If hide_empty is checked, a string should not be treated as empty.');

  // Test an empty string.
  $view->result[0]->{$column_map_reversed['name']} = "";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("", $render, 'If hide_empty is checked, "" should be treated as empty.');

  // Test zero as an integer.
  $view->result[0]->{$column_map_reversed['name']} = 0;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame('0', (string) $render, 'If hide_empty is checked, but not empty_zero, 0 should not be treated as empty.');

  // Test zero as a string.
  $view->result[0]->{$column_map_reversed['name']} = "0";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("0", (string) $render, 'If hide_empty is checked, but not empty_zero, "0" should not be treated as empty.');

  // Test when results are not rewritten and all empty values are hidden.
  $view->field['name']->options['hide_alter_empty'] = TRUE;
  $view->field['name']->options['hide_empty'] = TRUE;
  $view->field['name']->options['empty_zero'] = TRUE;

  // Test zero as an integer.
  $view->result[0]->{$column_map_reversed['name']} = 0;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("", $render, 'If hide_empty and empty_zero are checked, 0 should be treated as empty.');

  // Test zero as a string.
  $view->result[0]->{$column_map_reversed['name']} = "0";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("", $render, 'If hide_empty and empty_zero are checked, "0" should be treated as empty.');

  // Test when results are rewritten to a valid string and non-zero empty
  // results are hidden.
  $view->field['name']->options['hide_alter_empty'] = FALSE;
  $view->field['name']->options['hide_empty'] = TRUE;
  $view->field['name']->options['empty_zero'] = FALSE;
  $view->field['name']->options['alter']['alter_text'] = TRUE;
  $view->field['name']->options['alter']['text'] = $random_name;

  // Test a valid string.
  $view->result[0]->{$column_map_reversed['name']} = $random_value;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame($random_name, (string) $render, 'If the rewritten string is not empty, it should not be treated as empty.');

  // Test an empty string.
  $view->result[0]->{$column_map_reversed['name']} = "";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame($random_name, (string) $render, 'If the rewritten string is not empty, "" should not be treated as empty.');

  // Test zero as an integer.
  $view->result[0]->{$column_map_reversed['name']} = 0;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame($random_name, (string) $render, 'If the rewritten string is not empty, 0 should not be treated as empty.');

  // Test zero as a string.
  $view->result[0]->{$column_map_reversed['name']} = "0";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame($random_name, (string) $render, 'If the rewritten string is not empty, "0" should not be treated as empty.');

  // Test when results are rewritten to an empty string and non-zero empty results are hidden.
  $view->field['name']->options['hide_alter_empty'] = TRUE;
  $view->field['name']->options['hide_empty'] = TRUE;
  $view->field['name']->options['empty_zero'] = FALSE;
  $view->field['name']->options['alter']['alter_text'] = TRUE;
  $view->field['name']->options['alter']['text'] = "";

  // Test a valid string.
  $view->result[0]->{$column_map_reversed['name']} = $random_name;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame($random_name, (string) $render, 'If the rewritten string is empty, it should not be treated as empty.');

  // Test an empty string.
  $view->result[0]->{$column_map_reversed['name']} = "";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("", $render, 'If the rewritten string is empty, "" should be treated as empty.');

  // Test zero as an integer.
  $view->result[0]->{$column_map_reversed['name']} = 0;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame('0', (string) $render, 'If the rewritten string is empty, 0 should not be treated as empty.');

  // Test zero as a string.
  $view->result[0]->{$column_map_reversed['name']} = "0";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("0", (string) $render, 'If the rewritten string is empty, "0" should not be treated as empty.');

  // Test when results are rewritten to zero as a string and non-zero empty
  // results are hidden.
  $view->field['name']->options['hide_alter_empty'] = FALSE;
  $view->field['name']->options['hide_empty'] = TRUE;
  $view->field['name']->options['empty_zero'] = FALSE;
  $view->field['name']->options['alter']['alter_text'] = TRUE;
  $view->field['name']->options['alter']['text'] = "0";

  // Test a valid string.
  $view->result[0]->{$column_map_reversed['name']} = $random_name;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("0", (string) $render, 'If the rewritten string is zero and empty_zero is not checked, the string rewritten as 0 should not be treated as empty.');

  // Test an empty string.
  $view->result[0]->{$column_map_reversed['name']} = "";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("0", (string) $render, 'If the rewritten string is zero and empty_zero is not checked, "" rewritten as 0 should not be treated as empty.');

  // Test zero as an integer.
  $view->result[0]->{$column_map_reversed['name']} = 0;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("0", (string) $render, 'If the rewritten string is zero and empty_zero is not checked, 0 should not be treated as empty.');

  // Test zero as a string.
  $view->result[0]->{$column_map_reversed['name']} = "0";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("0", (string) $render, 'If the rewritten string is zero and empty_zero is not checked, "0" should not be treated as empty.');

  // Test when results are rewritten to a valid string and non-zero empty
  // results are hidden.
  $view->field['name']->options['hide_alter_empty'] = TRUE;
  $view->field['name']->options['hide_empty'] = TRUE;
  $view->field['name']->options['empty_zero'] = FALSE;
  $view->field['name']->options['alter']['alter_text'] = TRUE;
  $view->field['name']->options['alter']['text'] = $random_value;

  // Test a valid string.
  $view->result[0]->{$column_map_reversed['name']} = $random_name;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame($random_value, (string) $render, 'If the original and rewritten strings are valid, it should not be treated as empty.');

  // Test an empty string.
  $view->result[0]->{$column_map_reversed['name']} = "";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("", $render, 'If either the original or rewritten string is invalid, "" should be treated as empty.');

  // Test zero as an integer.
  $view->result[0]->{$column_map_reversed['name']} = 0;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame($random_value, (string) $render, 'If the original and rewritten strings are valid, 0 should not be treated as empty.');

  // Test zero as a string.
  $view->result[0]->{$column_map_reversed['name']} = "0";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame($random_value, (string) $render, 'If the original and rewritten strings are valid, "0" should not be treated as empty.');

  // Test when results are rewritten to zero as a string and all empty
  // original values and results are hidden.
  $view->field['name']->options['hide_alter_empty'] = TRUE;
  $view->field['name']->options['hide_empty'] = TRUE;
  $view->field['name']->options['empty_zero'] = TRUE;
  $view->field['name']->options['alter']['alter_text'] = TRUE;
  $view->field['name']->options['alter']['text'] = "0";

  // Test a valid string.
  $view->result[0]->{$column_map_reversed['name']} = $random_name;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("", (string) $render, 'If the rewritten string is zero, it should be treated as empty.');

  // Test an empty string.
  $view->result[0]->{$column_map_reversed['name']} = "";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("", $render, 'If the rewritten string is zero, "" should be treated as empty.');

  // Test zero as an integer.
  $view->result[0]->{$column_map_reversed['name']} = 0;
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("", $render, 'If the rewritten string is zero, 0 should not be treated as empty.');

  // Test zero as a string.
  $view->result[0]->{$column_map_reversed['name']} = "0";
  $render = $renderer
    ->executeInRenderContext(new RenderContext(), function () use ($view) {
    return $view->field['name']
      ->advancedRender($view->result[0]);
  });
  $this
    ->assertSame("", $render, 'If the rewritten string is zero, "0" should not be treated as empty.');
}