Exemplo n.º 1
0
 /**
  * @testdox Unit test: Test literal() is chainable, returns proper values, and is backwards compatible with 2.0.*
  */
 public function testLiteral()
 {
     $predicate = new Predicate();
     // is chainable
     $this->assertSame($predicate, $predicate->literal('foo = bar'));
     // with parameter
     $this->assertEquals(array(array('foo = bar', array(), array())), $predicate->getExpressionData());
     // test literal() is backwards-compatible, and works with with parameters
     $predicate = new Predicate();
     $predicate->expression('foo = ?', 'bar');
     // with parameter
     $this->assertEquals(array(array('foo = %s', array('bar'), array(Expression::TYPE_VALUE))), $predicate->getExpressionData());
     // test literal() is backwards-compatible, and works with with parameters, even 0 which tests as false
     $predicate = new Predicate();
     $predicate->expression('foo = ?', 0);
     // with parameter
     $this->assertEquals(array(array('foo = %s', array(0), array(Expression::TYPE_VALUE))), $predicate->getExpressionData());
 }
Exemplo n.º 2
0
    public function testCanNestPredicates()
    {
        $predicate = new Predicate();
        $predicate->isNull('foo.bar')
                  ->nest()
                  ->isNotNull('bar.baz')
                  ->and
                  ->equalTo('baz.bat', 'foo')
                  ->unnest();
        $parts = $predicate->getExpressionData();

        $this->assertEquals(7, count($parts));

        $this->assertContains('%1$s IS NULL', $parts[0]);
        $this->assertContains(array('foo.bar'), $parts[0]);

        $this->assertEquals(' AND ', $parts[1]);

        $this->assertEquals('(', $parts[2]);

        $this->assertContains('%1$s IS NOT NULL', $parts[3]);
        $this->assertContains(array('bar.baz'), $parts[3]);

        $this->assertEquals(' AND ', $parts[4]);

        $this->assertContains('%s = %s', $parts[5]);
        $this->assertContains(array('baz.bat', 'foo'), $parts[5]);
        
        $this->assertEquals(')', $parts[6]);
    }