/** * @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()); }
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]); }