You are here

public function HandlerTest::testBreakString in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/views/tests/src/Functional/Handler/HandlerTest.php \Drupal\Tests\views\Functional\Handler\HandlerTest::testBreakString()
  2. 9 core/modules/views/tests/src/Functional/Handler/HandlerTest.php \Drupal\Tests\views\Functional\Handler\HandlerTest::testBreakString()

Tests the breakString method.

File

core/modules/views/tests/src/Functional/Handler/HandlerTest.php, line 76

Class

HandlerTest
Tests abstract handler definitions.

Namespace

Drupal\Tests\views\Functional\Handler

Code

public function testBreakString() {

  // Check defaults.
  $this
    ->assertEquals((object) [
    'value' => [],
    'operator' => NULL,
  ], HandlerBase::breakString(''));

  // Test ors
  $handler = HandlerBase::breakString('word1 word2+word');
  $this
    ->assertEquals([
    'word1',
    'word2',
    'word',
  ], $handler->value);
  $this
    ->assertEquals('or', $handler->operator);
  $handler = HandlerBase::breakString('word1+word2+word');
  $this
    ->assertEquals([
    'word1',
    'word2',
    'word',
  ], $handler->value);
  $this
    ->assertEquals('or', $handler->operator);
  $handler = HandlerBase::breakString('word1 word2 word');
  $this
    ->assertEquals([
    'word1',
    'word2',
    'word',
  ], $handler->value);
  $this
    ->assertEquals('or', $handler->operator);
  $handler = HandlerBase::breakString('word-1+word-2+word');
  $this
    ->assertEquals([
    'word-1',
    'word-2',
    'word',
  ], $handler->value);
  $this
    ->assertEquals('or', $handler->operator);
  $handler = HandlerBase::breakString('wõrd1+wõrd2+wõrd');
  $this
    ->assertEquals([
    'wõrd1',
    'wõrd2',
    'wõrd',
  ], $handler->value);
  $this
    ->assertEquals('or', $handler->operator);

  // Test ands.
  $handler = HandlerBase::breakString('word1,word2,word');
  $this
    ->assertEquals([
    'word1',
    'word2',
    'word',
  ], $handler->value);
  $this
    ->assertEquals('and', $handler->operator);
  $handler = HandlerBase::breakString('word1 word2,word');
  $this
    ->assertEquals([
    'word1 word2',
    'word',
  ], $handler->value);
  $this
    ->assertEquals('and', $handler->operator);
  $handler = HandlerBase::breakString('word1,word2 word');
  $this
    ->assertEquals([
    'word1',
    'word2 word',
  ], $handler->value);
  $this
    ->assertEquals('and', $handler->operator);
  $handler = HandlerBase::breakString('word-1,word-2,word');
  $this
    ->assertEquals([
    'word-1',
    'word-2',
    'word',
  ], $handler->value);
  $this
    ->assertEquals('and', $handler->operator);
  $handler = HandlerBase::breakString('wõrd1,wõrd2,wõrd');
  $this
    ->assertEquals([
    'wõrd1',
    'wõrd2',
    'wõrd',
  ], $handler->value);
  $this
    ->assertEquals('and', $handler->operator);

  // Test a single word
  $handler = HandlerBase::breakString('word');
  $this
    ->assertEquals([
    'word',
  ], $handler->value);
  $this
    ->assertEquals('and', $handler->operator);
  $s1 = $this
    ->randomMachineName();

  // Generate three random numbers which can be used below;
  $n1 = rand(0, 100);
  $n2 = rand(0, 100);
  $n3 = rand(0, 100);

  // Test "or"s.
  $handlerBase = HandlerBase::breakString("{$s1} {$n2}+{$n3}");
  $this
    ->assertEquals([
    $s1,
    $n2,
    $n3,
  ], $handlerBase->value);
  $this
    ->assertEquals('or', $handlerBase->operator);
  $handlerBase = HandlerBase::breakString("{$s1}+{$n2}+{$n3}");
  $this
    ->assertEquals([
    $s1,
    $n2,
    $n3,
  ], $handlerBase->value);
  $this
    ->assertEquals('or', $handlerBase->operator);
  $handlerBase = HandlerBase::breakString("{$s1} {$n2} {$n3}");
  $this
    ->assertEquals([
    $s1,
    $n2,
    $n3,
  ], $handlerBase->value);
  $this
    ->assertEquals('or', $handlerBase->operator);
  $handlerBase = HandlerBase::breakString("{$s1} {$n2}++{$n3}");
  $this
    ->assertEquals([
    $s1,
    $n2,
    $n3,
  ], $handlerBase->value);
  $this
    ->assertEquals('or', $handlerBase->operator);

  // Test "and"s.
  $handlerBase = HandlerBase::breakString("{$s1},{$n2},{$n3}");
  $this
    ->assertEquals([
    $s1,
    $n2,
    $n3,
  ], $handlerBase->value);
  $this
    ->assertEquals('and', $handlerBase->operator);
  $handlerBase = HandlerBase::breakString("{$s1},,{$n2},{$n3}");
  $this
    ->assertEquals([
    $s1,
    $n2,
    $n3,
  ], $handlerBase->value);
  $this
    ->assertEquals('and', $handlerBase->operator);

  // Enforce int values.
  $handlerBase = HandlerBase::breakString("{$n1},{$n2},{$n3}", TRUE);
  $this
    ->assertEquals([
    $n1,
    $n2,
    $n3,
  ], $handlerBase->value);
  $this
    ->assertEquals('and', $handlerBase->operator);
  $handlerBase = HandlerBase::breakString("{$n1}+{$n2}+{$n3}", TRUE);
  $this
    ->assertEquals([
    $n1,
    $n2,
    $n3,
  ], $handlerBase->value);
  $this
    ->assertEquals('or', $handlerBase->operator);
  $handlerBase = HandlerBase::breakString("{$s1},{$n2},{$n3}", TRUE);
  $this
    ->assertEquals([
    (int) $s1,
    $n2,
    $n3,
  ], $handlerBase->value);
  $this
    ->assertEquals('and', $handlerBase->operator);
  $handlerBase = HandlerBase::breakString("{$s1}+{$n2}+{$n3}", TRUE);
  $this
    ->assertEquals([
    (int) $s1,
    $n2,
    $n3,
  ], $handlerBase->value);
  $this
    ->assertEquals('or', $handlerBase->operator);

  // Generate three random decimals which can be used below;
  $d1 = rand(0, 10) / 10;
  $d2 = rand(0, 10) / 10;
  $d3 = rand(0, 10) / 10;

  // Test "or"s.
  $handlerBase = HandlerBase::breakString("{$s1} {$d1}+{$d2}");
  $this
    ->assertEquals([
    $s1,
    $d1,
    $d2,
  ], $handlerBase->value);
  $this
    ->assertEquals('or', $handlerBase->operator);
  $handlerBase = HandlerBase::breakString("{$s1}+{$d1}+{$d3}");
  $this
    ->assertEquals([
    $s1,
    $d1,
    $d3,
  ], $handlerBase->value);
  $this
    ->assertEquals('or', $handlerBase->operator);
  $handlerBase = HandlerBase::breakString("{$s1} {$d2} {$d3}");
  $this
    ->assertEquals([
    $s1,
    $d2,
    $d3,
  ], $handlerBase->value);
  $this
    ->assertEquals('or', $handlerBase->operator);
  $handlerBase = HandlerBase::breakString("{$s1} {$d2}++{$d3}");
  $this
    ->assertEquals([
    $s1,
    $d2,
    $d3,
  ], $handlerBase->value);
  $this
    ->assertEquals('or', $handlerBase->operator);

  // Test "and"s.
  $handlerBase = HandlerBase::breakString("{$s1},{$d2},{$d3}");
  $this
    ->assertEquals([
    $s1,
    $d2,
    $d3,
  ], $handlerBase->value);
  $this
    ->assertEquals('and', $handlerBase->operator);
  $handlerBase = HandlerBase::breakString("{$s1},,{$d2},{$d3}");
  $this
    ->assertEquals([
    $s1,
    $d2,
    $d3,
  ], $handlerBase->value);
  $this
    ->assertEquals('and', $handlerBase->operator);
}