/*
* 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 LogicalAndExprTest
{
@Test
public void parseWithOneTerm()
{
Tokens tokens = new Tokens("a.code <> 0");
Expr expr = LogicalAndExpr.parse(tokens);
assertTrue(expr instanceof EqualityExpr);
assertFalse(tokens.hasNext());
}
@Test
public void parseWithThreeTerms()
{
Tokens tokens = new Tokens("a.code=1 and b.number < 5 and upper(ab.name) like 'Ab%'");
Expr expr = LogicalAndExpr.parse(tokens);
assertFalse(tokens.hasNext());
assertTrue(expr instanceof LogicalAndExpr);
LogicalAndExpr andExpr = (LogicalAndExpr) expr;
assertEquals(3, andExpr.negatedExprs.size());
}
@Test
public void parseWithOneTermContainingANot()
{
Tokens tokens = new Tokens("a.code >= 1 and a.code <= 9 and not 5 > b.number");
Expr expr = LogicalAndExpr.parse(tokens);
assertFalse(tokens.hasNext());
assertTrue(expr instanceof LogicalAndExpr);
LogicalAndExpr andExpr = (LogicalAndExpr) expr;
assertEquals(3, andExpr.negatedExprs.size());
}
@Test
public void parseSomethingElse()
{
Tokens tokens = new Tokens(", test");
Expr expr = LogicalAndExpr.parse(tokens);
assertNull(expr);
assertEquals(-1, tokens.getPosition());
}
@Test
public void parseOrFollowedByRestOfSomeBiggerExpression()
{
Tokens tokens = new Tokens("xyz.active )");
Expr expr = LogicalAndExpr.parse(tokens);
assertTrue(expr instanceof AccessPathExpr);
assertEquals(0, tokens.getPosition());
}
@Test(expected = QuerySyntaxException.class)
public void parseWithLastTermMissing()
{
Tokens tokens = new Tokens("xyz.active and ||");
LogicalAndExpr.parse(tokens);
}
@Test
public void evaluateTwoTerms()
{
LogicalAndExpr expr = (LogicalAndExpr) LogicalAndExpr.parse(new Tokens("2 < 3 and 2=2"));
assertTrue(expr.evaluate(new QueryEval()));
}
@Test
public void evaluateThreeTermsWithShortCircuit()
{
LogicalAndExpr expr =
(LogicalAndExpr) LogicalAndExpr.parse(new Tokens("true and false and a > 0"));
assertFalse(expr.evaluate(new QueryEval()));
}
@Test
public void evaluateAsFalse()
{
Tokens tokens = new Tokens("false and 1 != 1.0");
LogicalAndExpr expr = (LogicalAndExpr) LogicalAndExpr.parse(tokens);
assertFalse(expr.evaluate(new QueryEval()));
}
}