function HandlerTest::testBreakString

Same name and namespace in other branches
  1. 9 core/modules/views/tests/src/Functional/Handler/HandlerTest.php \Drupal\Tests\views\Functional\Handler\HandlerTest::testBreakString()
  2. 8.9.x core/modules/views/tests/src/Functional/Handler/HandlerTest.php \Drupal\Tests\views\Functional\Handler\HandlerTest::testBreakString()
  3. 10 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 81

Class

HandlerTest
Tests abstract handler definitions.

Namespace

Drupal\Tests\views\Functional\Handler

Code

public function testBreakString() : void {
    // 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);
}

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