/*
* 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 java.math.*;
import mockit.emulation.hibernate3.ast.*;
import static org.junit.Assert.*;
import org.junit.*;
public final class AdditiveExprTest
{
@Test
public void parseSingleValue()
{
Tokens tokens = new Tokens("68");
Expr expr = AdditiveExpr.parse(tokens);
assertTrue(expr instanceof ConstantExpr);
assertFalse(tokens.hasNext());
}
@Test
public void parseAddition()
{
Tokens tokens = new Tokens("2 + 25");
Expr expr = AdditiveExpr.parse(tokens);
assertTrue(expr instanceof AdditiveExpr);
assertFalse(tokens.hasNext());
AdditiveExpr multExpr = (AdditiveExpr) expr;
assertEquals(2, multExpr.multiplyExprs.length);
assertTrue(multExpr.multiplyExprs[0] instanceof ConstantExpr);
assertTrue(multExpr.multiplyExprs[1] instanceof ConstantExpr);
assertEquals(1, multExpr.operators.cardinality());
assertEquals(1, multExpr.operators.length());
}
@Test
public void parseSubtraction()
{
Tokens tokens = new Tokens("12.5 - 5");
Expr expr = AdditiveExpr.parse(tokens);
assertTrue(expr instanceof AdditiveExpr);
assertFalse(tokens.hasNext());
AdditiveExpr additiveExpr = (AdditiveExpr) expr;
assertEquals(2, additiveExpr.multiplyExprs.length);
assertTrue(additiveExpr.multiplyExprs[0] instanceof ConstantExpr);
assertTrue(additiveExpr.multiplyExprs[1] instanceof ConstantExpr);
assertEquals(0, additiveExpr.operators.cardinality());
}
@Test
public void parseAdditionsAndSubtractions()
{
Tokens tokens = new Tokens("2 + 25 - 3.2 + -5 - -2");
Expr expr = AdditiveExpr.parse(tokens);
assertTrue(expr instanceof AdditiveExpr);
assertFalse(tokens.hasNext());
AdditiveExpr additiveExpr = (AdditiveExpr) expr;
assertEquals(5, additiveExpr.multiplyExprs.length);
assertEquals(2, additiveExpr.operators.cardinality());
assertTrue(additiveExpr.operators.get(0));
assertTrue(additiveExpr.operators.get(2));
}
@Test
public void parseSomethingElse()
{
Tokens tokens = new Tokens(")");
Expr expr = AdditiveExpr.parse(tokens);
assertNull(expr);
assertEquals(-1, tokens.getPosition());
}
@Test(expected = QuerySyntaxException.class)
public void parseWithSyntaxError()
{
Tokens tokens = new Tokens("4+");
AdditiveExpr.parse(tokens);
}
@Test
public void parseConcatenationExpr()
{
Tokens tokens = new Tokens("5 - 2 || 3");
Expr expr = AdditiveExpr.parse(tokens);
assertTrue(expr instanceof AdditiveExpr);
assertEquals(2, tokens.getPosition());
}
@Test
public void evaluate()
{
Tokens tokens = new Tokens("2 + 25 - 3.2 + -5 - -2");
AdditiveExpr expr = (AdditiveExpr) AdditiveExpr.parse(tokens);
Object result = expr.evaluate(new QueryEval());
assertEquals(0, new BigDecimal("20.8").compareTo((BigDecimal) result));
}
}