public function testCallChain() { $chain = CallChain::create()->add(Filter::nl2br())->add(Filter::htmlSpecialChars()); $text = "foo\nbar&"; $this->assertEquals($chain->call('apply', $text), $return = $chain->apply($text)); $this->assertEquals("foo<br />\nbar&", $return); try { $chain->undefinedMethod(); } catch (BaseException $e) { // passed } try { CallChain::create()->call('foo', 'bar'); } catch (WrongStateException $e) { // passed } try { CallChain::create()->add(IdentifiableObject::wrap(112233))->undefinedMethod(); } catch (BaseException $e) { // passed; } try { CallChain::create()->add(IdentifiableObject::wrap(332211))->call('undefinedMethod'); } catch (BaseException $e) { // passed; } }
public function testBaseSqlGeneration() { $dialect = ImaginaryDialect::me(); $pgDialect = $this->getDbByType('PgSQL')->getDialect(); $this->assertRegExp('/^\\(a (AND|and) b\\)$/', Expression::expAnd('a', 'b')->toDialectString($dialect)); $this->assertRegExp('/^\\(a (OR|or) b\\)$/', Expression::expOr('a', 'b')->toDialectString($dialect)); $this->assertEquals(Expression::eq('a', 'b')->toDialectString($dialect), '(a = b)'); $some = IdentifiableObject::wrap(123); $this->assertEquals(Expression::eqId('a', $some)->toDialectString($dialect), '(a = 123)'); $this->assertEquals(Expression::notEq('a', 'b')->toDialectString($dialect), '(a != b)'); $this->assertEquals(Expression::gt('a', 'b')->toDialectString($dialect), '(a > b)'); $this->assertEquals(Expression::gtEq('a', 'b')->toDialectString($dialect), '(a >= b)'); $this->assertEquals(Expression::lt('a', 'b')->toDialectString($dialect), '(a < b)'); $this->assertEquals(Expression::ltEq('a', 'b')->toDialectString($dialect), '(a <= b)'); $this->assertRegExp('/^\\(a ((IS NOT NULL)|(is not null)) *\\)$/', Expression::notNull('a')->toDialectString($dialect)); $this->assertRegExp('/^\\(a ((IS NULL)|(is null)) *\\)$/', Expression::isNull('a')->toDialectString($dialect)); $this->assertRegExp('/^\\(a ((IS TRUE)|(is true)) *\\)$/', Expression::isTrue('a')->toDialectString($dialect)); $this->assertRegExp('/^\\(a ((IS FALSE)|(is false)) *\\)$/', Expression::isFalse('a')->toDialectString($dialect)); $this->assertRegExp('/^\\(a (LIKE|like) b\\)$/', Expression::like('a', 'b')->toDialectString($dialect)); $this->assertRegExp('/^\\(a ((NOT LIKE)|(not like)) b\\)$/', Expression::notLike('a', 'b')->toDialectString($dialect)); $this->assertRegExp('/^\\(a (ILIKE|ilike) b\\)$/', Expression::ilike('a', 'b')->toDialectString($dialect)); $this->assertRegExp('/^\\(a ((NOT ILIKE)|(not like)) b\\)$/', Expression::notIlike('a', 'b')->toDialectString($dialect)); $this->assertRegExp('/^\\(a ((SIMILAR TO)|(similar to)) b\\)$/', Expression::similar('a', 'b')->toDialectString($dialect)); $this->assertRegExp('/^\\(a ((NOT SIMILAR TO)|(not similar to)) b\\)$/', Expression::notSimilar('a', 'b')->toDialectString($dialect)); $this->assertEquals('(lower(a) = b)', Expression::eqLower('a', 'b')->toDialectString($dialect)); $this->assertEquals('(lower(a) = lower(b))', Expression::eqLower(new DBValue('a'), new DBValue('b'))->toDialectString($dialect)); $this->assertEquals('(lower(\'a\') = lower(\'b\'))', Expression::eqLower(new DBValue('a'), new DBValue('b'))->toDialectString($pgDialect)); $this->assertEquals('(lower(\'a\') = lower("b"))', Expression::eqLower(new DBValue('a'), new DBField('b'))->toDialectString($pgDialect)); $this->assertEquals('(lower("a") = lower(\'b\'))', Expression::eqLower(new DBField('a'), new DBValue('b'))->toDialectString($pgDialect)); $this->assertRegExp('/^\\(a (BETWEEN|between) b (AND|and) c\\)$/', Expression::between('a', 'b', 'c')->toDialectString($dialect)); $this->assertEquals('(a = 123)', Expression::in('a', 123)->toDialectString($dialect)); $this->assertEquals('(a = 123)', Expression::in('a', array(123))->toDialectString($dialect)); $this->assertRegExp('/^\\(a (in|IN) \\(123, 456\\)\\)$/', Expression::in('a', array(123, 456))->toDialectString($dialect)); $this->assertEquals('(a != 123)', Expression::notIn('a', 123)->toDialectString($dialect)); $this->assertEquals('(a != 123)', Expression::notIn('a', array(123))->toDialectString($dialect)); $this->assertRegExp('/^\\(a ((not in)|(NOT IN)) \\(123, 456\\)\\)$/', Expression::notIn('a', array(123, 456))->toDialectString($dialect)); $this->assertEquals('(a + b)', Expression::add('a', 'b')->toDialectString($dialect)); $this->assertEquals('(a - b)', Expression::sub('a', 'b')->toDialectString($dialect)); $this->assertEquals('(a * b)', Expression::mul('a', 'b')->toDialectString($dialect)); $this->assertEquals('(a / b)', Expression::div('a', 'b')->toDialectString($dialect)); $this->assertRegExp('/^\\(a (between|BETWEEN) b (and|AND) c\\)$/', Expression::between('a', 'b', 'c')->toDialectString($dialect)); $this->assertEquals('(-1 IS NULL)', Expression::isNull(-1)->toDialectString($dialect)); $this->assertEquals('(NOT a)', Expression::not('a')->toDialectString($dialect)); $this->assertEquals('(- a)', Expression::minus('a')->toDialectString($dialect)); try { Expression::eq('id', null)->toDialectString($dialect); $this->fail(); } catch (WrongArgumentException $e) { //it's Ok } }