/**
  * Tests that the expression is correctly traversed
  *
  * @return void
  */
 public function testTraverse()
 {
     $count = 0;
     $visitor = function () use(&$count) {
         $count++;
     };
     $expr = new QueryExpression();
     $expr->eq('test', 'true');
     $expr2 = new QueryExpression();
     $expr2->eq('test', 'false');
     $caseExpression = new CaseExpression([$expr, $expr2]);
     $caseExpression->traverse($visitor);
     $this->assertSame(4, $count);
 }
 /**
  * Test cloning
  *
  * @return void
  */
 public function testClone()
 {
     $expr = new QueryExpression();
     $expr->eq('test', 'true');
     $expr2 = new QueryExpression();
     $expr2->eq('test2', 'false');
     $caseExpression = new CaseExpression([$expr, $expr2], 'foobar');
     $dupe = clone $caseExpression;
     $dupe->elseValue('nope');
     $this->assertNotEquals($caseExpression, $dupe);
     $this->assertNotSame($caseExpression, $dupe);
 }
 /**
  * Tests that it is possible to bind arguments to a query and it will return the right
  * results
  *
  * @return void
  */
 public function testCustomBindings()
 {
     $table = TableRegistry::get('Articles');
     $query = $table->find()->where(['id >' => 1]);
     $query->where(function ($exp) {
         $e = new QueryExpression();
         return $exp->add($e->eq(new IdentifierExpression('author_id'), new IdentifierExpression(':author')));
     });
     $query->bind(':author', 1, 'integer');
     $this->assertEquals(1, $query->count());
     $this->assertEquals(3, $query->first()->id);
 }