/* * 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.util.*; import mockit.emulation.hibernate3.ast.*; import org.junit.*; import static org.junit.Assert.*; public final class PrimaryExprTest { @Test public void parseConstant() { Tokens tokens = new Tokens("235"); Expr expr = PrimaryExpr.parse(tokens); assertTrue(expr instanceof ConstantExpr); assertFalse(tokens.hasNext()); } @Test public void parseParameter() { Tokens tokens = new Tokens("?"); Expr expr = PrimaryExpr.parse(tokens); assertTrue(expr instanceof PositionalParameterExpr); assertEquals(0, ((PositionalParameterExpr) expr).index); assertFalse(tokens.hasNext()); } @Test public void parseParameterWithIndex() { Tokens tokens = new Tokens("?3"); Expr expr = PrimaryExpr.parse(tokens); assertTrue(expr instanceof PositionalParameterExpr); assertEquals(3, ((PositionalParameterExpr) expr).index); assertFalse(tokens.hasNext()); } @Test public void parseParameterFollowedBySomething() { Tokens tokens = new Tokens("?=20"); Expr expr = PrimaryExpr.parse(tokens); assertTrue(expr instanceof PositionalParameterExpr); assertEquals(0, ((PositionalParameterExpr) expr).index); assertEquals(0, tokens.getPosition()); } @Test public void evaluateParameter() { Map<Object, Object> parameters = new HashMap<Object, Object>(); parameters.put(0, "test"); Expr expr = new PositionalParameterExpr(0); Object value = expr.evaluate(new QueryEval(parameters)); assertEquals("test", value); } @Test public void parseNamedParameter() { Tokens tokens = new Tokens(":orderNo"); Expr expr = PrimaryExpr.parse(tokens); assertTrue(expr instanceof NamedParameterExpr); Assert.assertEquals("orderNo", ((NamedParameterExpr) expr).name); assertFalse(tokens.hasNext()); } @Test public void evaluateNamedParameter() { Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("no", "test"); Expr expr = new NamedParameterExpr("no"); Object value = expr.evaluate(new QueryEval(parameters)); assertEquals("test", value); } @Test public void parseFunctionCall() { Tokens tokens = new Tokens("trim(abc)"); Expr expr = PrimaryExpr.parse(tokens); assertTrue(expr instanceof FunctionCallExpr); FunctionCallExpr fcExpr = (FunctionCallExpr) expr; assertEquals("trim", fcExpr.name); assertEquals(1, fcExpr.arguments.length); assertTrue(fcExpr.arguments[0] instanceof AccessPathExpr); assertFalse(tokens.hasNext()); } @Test public void evaluateFunctionCall() { Expr expr = new FunctionCallExpr("abs", new Expr[] { new ConstantExpr(-123) }); Object value = expr.evaluate(new QueryEval()); assertEquals(123, value); } @Test public void parseAccessPath() { Tokens tokens = new Tokens("abc"); Expr expr = PrimaryExpr.parse(tokens); assertTrue(expr instanceof AccessPathExpr); AccessPathExpr apExpr = (AccessPathExpr) expr; assertEquals(1, apExpr.accessElements.length); assertEquals("abc", apExpr.accessElements[0]); assertFalse(tokens.hasNext()); } @Test public void evaluateAccessPath() { Map<String, Object> tuple = new HashMap<String, Object>(); tuple.put("x", new Entity()); Expr expr = new AccessPathExpr("x.abc"); Object value = expr.evaluate(new QueryEval(null, tuple)); assertEquals("test", value); } public static class Entity { public String getAbc() { return "test"; } } @Test public void parseSomethingElse() { Tokens tokens = new Tokens(")"); Expr expr = PrimaryExpr.parse(tokens); assertNull(expr); assertEquals(-1, tokens.getPosition()); } }