/**
  * Tests the breakString method.
  */
 public function testBreakString()
 {
     // Check defaults.
     $this->assertEqual((object) array('value' => array(), 'operator' => NULL), HandlerBase::breakString(''));
     // Test ors
     $handler = HandlerBase::breakString('word1 word2+word');
     $this->assertEqualValue(array('word1', 'word2', 'word'), $handler);
     $this->assertEqual('or', $handler->operator);
     $handler = HandlerBase::breakString('word1+word2+word');
     $this->assertEqualValue(array('word1', 'word2', 'word'), $handler);
     $this->assertEqual('or', $handler->operator);
     $handler = HandlerBase::breakString('word1 word2 word');
     $this->assertEqualValue(array('word1', 'word2', 'word'), $handler);
     $this->assertEqual('or', $handler->operator);
     $handler = HandlerBase::breakString('word-1+word-2+word');
     $this->assertEqualValue(array('word-1', 'word-2', 'word'), $handler);
     $this->assertEqual('or', $handler->operator);
     $handler = HandlerBase::breakString('wõrd1+wõrd2+wõrd');
     $this->assertEqualValue(array('wõrd1', 'wõrd2', 'wõrd'), $handler);
     $this->assertEqual('or', $handler->operator);
     // Test ands.
     $handler = HandlerBase::breakString('word1,word2,word');
     $this->assertEqualValue(array('word1', 'word2', 'word'), $handler);
     $this->assertEqual('and', $handler->operator);
     $handler = HandlerBase::breakString('word1 word2,word');
     $this->assertEqualValue(array('word1 word2', 'word'), $handler);
     $this->assertEqual('and', $handler->operator);
     $handler = HandlerBase::breakString('word1,word2 word');
     $this->assertEqualValue(array('word1', 'word2 word'), $handler);
     $this->assertEqual('and', $handler->operator);
     $handler = HandlerBase::breakString('word-1,word-2,word');
     $this->assertEqualValue(array('word-1', 'word-2', 'word'), $handler);
     $this->assertEqual('and', $handler->operator);
     $handler = HandlerBase::breakString('wõrd1,wõrd2,wõrd');
     $this->assertEqualValue(array('wõrd1', 'wõrd2', 'wõrd'), $handler);
     $this->assertEqual('and', $handler->operator);
     // Test a single word
     $handler = HandlerBase::breakString('word');
     $this->assertEqualValue(array('word'), $handler);
     $this->assertEqual('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->assertEqualValue(array($s1, $n2, $n3), $handlerBase);
     $this->assertEqual('or', $handlerBase->operator);
     $handlerBase = HandlerBase::breakString("{$s1}+{$n2}+{$n3}");
     $this->assertEqualValue(array($s1, $n2, $n3), $handlerBase);
     $this->assertEqual('or', $handlerBase->operator);
     $handlerBase = HandlerBase::breakString("{$s1} {$n2} {$n3}");
     $this->assertEqualValue(array($s1, $n2, $n3), $handlerBase);
     $this->assertEqual('or', $handlerBase->operator);
     $handlerBase = HandlerBase::breakString("{$s1} {$n2}++{$n3}");
     $this->assertEqualValue(array($s1, $n2, $n3), $handlerBase);
     $this->assertEqual('or', $handlerBase->operator);
     // Test "and"s.
     $handlerBase = HandlerBase::breakString("{$s1},{$n2},{$n3}");
     $this->assertEqualValue(array($s1, $n2, $n3), $handlerBase);
     $this->assertEqual('and', $handlerBase->operator);
     $handlerBase = HandlerBase::breakString("{$s1},,{$n2},{$n3}");
     $this->assertEqualValue(array($s1, $n2, $n3), $handlerBase);
     $this->assertEqual('and', $handlerBase->operator);
     // Enforce int values.
     $handlerBase = HandlerBase::breakString("{$n1},{$n2},{$n3}", TRUE);
     $this->assertEqualValue(array($n1, $n2, $n3), $handlerBase);
     $this->assertEqual('and', $handlerBase->operator);
     $handlerBase = HandlerBase::breakString("{$n1}+{$n2}+{$n3}", TRUE);
     $this->assertEqualValue(array($n1, $n2, $n3), $handlerBase);
     $this->assertEqual('or', $handlerBase->operator);
     $handlerBase = HandlerBase::breakString("{$s1},{$n2},{$n3}", TRUE);
     $this->assertEqualValue(array((int) $s1, $n2, $n3), $handlerBase);
     $this->assertEqual('and', $handlerBase->operator);
     $handlerBase = HandlerBase::breakString("{$s1}+{$n2}+{$n3}", TRUE);
     $this->assertEqualValue(array((int) $s1, $n2, $n3), $handlerBase);
     $this->assertEqual('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->assertEqualValue(array($s1, $d1, $d2), $handlerBase);
     $this->assertEqual('or', $handlerBase->operator);
     $handlerBase = HandlerBase::breakString("{$s1}+{$d1}+{$d3}");
     $this->assertEqualValue(array($s1, $d1, $d3), $handlerBase);
     $this->assertEqual('or', $handlerBase->operator);
     $handlerBase = HandlerBase::breakString("{$s1} {$d2} {$d3}");
     $this->assertEqualValue(array($s1, $d2, $d3), $handlerBase);
     $this->assertEqual('or', $handlerBase->operator);
     $handlerBase = HandlerBase::breakString("{$s1} {$d2}++{$d3}");
     $this->assertEqualValue(array($s1, $d2, $d3), $handlerBase);
     $this->assertEqual('or', $handlerBase->operator);
     // Test "and"s.
     $handlerBase = HandlerBase::breakString("{$s1},{$d2},{$d3}");
     $this->assertEqualValue(array($s1, $d2, $d3), $handlerBase);
     $this->assertEqual('and', $handlerBase->operator);
     $handlerBase = HandlerBase::breakString("{$s1},,{$d2},{$d3}");
     $this->assertEqualValue(array($s1, $d2, $d3), $handlerBase);
     $this->assertEqual('and', $handlerBase->operator);
 }