/*
* Copyright (c) 2006-2011 Rogério Liesenfeld
* This file is subject to the terms of the MIT license (see LICENSE.txt).
*/
package mockit.emulation.hibernate3.ast.whereClause;
import mockit.emulation.hibernate3.ast.*;
import static org.junit.Assert.*;
import org.junit.*;
public final class LogicalOrExprTest
{
@Test
public void parseWithOneTerm()
{
Tokens tokens = new Tokens("a.code <> 0");
Expr expr = LogicalOrExpr.parse(tokens);
assertTrue(expr instanceof EqualityExpr);
assertFalse(tokens.hasNext());
}
@Test
public void parseWithThreeTerms()
{
Tokens tokens = new Tokens("a.code=1 or b.number < 5 or upper(ab.name) like 'Ab%'");
Expr expr = LogicalOrExpr.parse(tokens);
assertFalse(tokens.hasNext());
assertTrue(expr instanceof LogicalOrExpr);
LogicalOrExpr orExpr = (LogicalOrExpr) expr;
assertEquals(3, orExpr.andExprs.size());
}
@Test
public void parseWithOneTermContainingAnAnd()
{
Tokens tokens = new Tokens("a.code >= 1 and a.code <= 9 or 5 > b.number");
Expr expr = LogicalOrExpr.parse(tokens);
assertFalse(tokens.hasNext());
assertTrue(expr instanceof LogicalOrExpr);
LogicalOrExpr orExpr = (LogicalOrExpr) expr;
assertEquals(2, orExpr.andExprs.size());
}
@Test
public void parseSomethingElse()
{
Tokens tokens = new Tokens(", test");
Expr expr = LogicalOrExpr.parse(tokens);
assertNull(expr);
assertEquals(-1, tokens.getPosition());
}
@Test
public void parseOrFollowedByRestOfSomeBiggerExpression()
{
Tokens tokens = new Tokens("xyz.active )");
Expr expr = LogicalOrExpr.parse(tokens);
assertTrue(expr instanceof AccessPathExpr);
assertEquals(0, tokens.getPosition());
}
@Test(expected = QuerySyntaxException.class)
public void parseWithLastTermMissing()
{
Tokens tokens = new Tokens("xyz.active or ||");
LogicalOrExpr.parse(tokens);
}
@Test
public void evaluateTwoTerms()
{
assertEvaluationAsTrue("3 < 2 or 2=2");
}
private void assertEvaluationAsTrue(String ql)
{
LogicalOrExpr expr = (LogicalOrExpr) LogicalOrExpr.parse(new Tokens(ql));
assertTrue(expr.evaluate(new QueryEval()));
}
@Test
public void evaluateThreeTermsWithShortCircuit()
{
assertEvaluationAsTrue("true or false or a > 0");
}
@Test
public void assertAsFalse()
{
LogicalOrExpr expr = (LogicalOrExpr) LogicalOrExpr.parse(new Tokens("false or 1 != 1.0"));
assertFalse(expr.evaluate(new QueryEval()));
}
}