/* * 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 ConcatenationExprTest { @Test public void parseSingleValue() { Tokens tokens = new Tokens("x.abc"); Expr expr = ConcatenationExpr.parse(tokens); assertTrue(expr instanceof AccessPathExpr); assertFalse(tokens.hasNext()); } @Test public void parseSingleAdditiveExpr() { Tokens tokens = new Tokens("x.abc + 7"); Expr expr = ConcatenationExpr.parse(tokens); assertTrue(expr instanceof AdditiveExpr); assertFalse(tokens.hasNext()); } @Test public void parseConcatenation() { Tokens tokens = new Tokens("x.abc || 'constant'"); Expr expr = ConcatenationExpr.parse(tokens); assertTrue(expr instanceof ConcatenationExpr); assertFalse(tokens.hasNext()); ConcatenationExpr concatExpr = (ConcatenationExpr) expr; assertEquals(2, concatExpr.additiveExprs.length); assertTrue(concatExpr.additiveExprs[0] instanceof AccessPathExpr); assertTrue(concatExpr.additiveExprs[1] instanceof ConstantExpr); } @Test public void parseConcatenationOfThreeValues() { Tokens tokens = new Tokens("x.abc || fh(0)||'test'"); Expr expr = ConcatenationExpr.parse(tokens); assertTrue(expr instanceof ConcatenationExpr); assertFalse(tokens.hasNext()); ConcatenationExpr concatExpr = (ConcatenationExpr) expr; assertEquals(3, concatExpr.additiveExprs.length); assertTrue(concatExpr.additiveExprs[0] instanceof AccessPathExpr); assertTrue(concatExpr.additiveExprs[1] instanceof FunctionCallExpr); assertTrue(concatExpr.additiveExprs[2] instanceof ConstantExpr); } @Test(expected = QuerySyntaxException.class) public void parseWithSyntaxError() { ConcatenationExpr.parse(new Tokens("a || ||")); } @Test public void evaluate() { ConcatenationExpr expr = (ConcatenationExpr) ConcatenationExpr.parse(new Tokens("'XYZ' || -345")); String result = expr.evaluate(new QueryEval()); assertEquals("XYZ-345", result); } }