/* * 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 static org.junit.Assert.*; import org.junit.*; public final class RelationalExprTest { private QueryEval eval = new QueryEval(); @Test public void parseLT() { assertParseAndEvaluate("1 < 2"); } private void assertParseAndEvaluate(String ql) { Tokens tokens = new Tokens(ql); Expr expr = RelationalExpr.parse(tokens); assertTrue(expr instanceof RelationalExpr); assertFalse(tokens.hasNext()); assertTrue(((RelationalExpr) expr).evaluate(eval)); } @Test public void parseGT() { assertParseAndEvaluate("42 > 2.7"); } @Test public void parseLE() { assertParseAndEvaluate("-5 <= 70 - 20"); } @Test public void parseGE() { assertParseAndEvaluate("42 * 2 + 3 >= 2.7 / 3"); } @Test public void parseIN() { assertParseAndEvaluate("6 in (1, 42, 6, 0)"); } @Test public void parseNOT_IN() { assertParseAndEvaluate("7 not in (1, 42, 6, 0)"); } @Test(expected = QuerySyntaxException.class) public void parseINMissingClosingComma() { assertParseAndEvaluate("6 in (1"); } @Test(expected = QuerySyntaxException.class) public void parseINWithSyntaxError() { assertParseAndEvaluate("6 in (4 [)"); } @Test(expected = QuerySyntaxException.class) public void parseINWithEmptyList() { assertParseAndEvaluate("6 in ()"); } @Test public void parseMEMBER() { Map<String, Object> tuple = new HashMap<String, Object>(); tuple.put("a", new EntityA()); eval = new QueryEval(null, tuple); assertParseAndEvaluate("6 member a.numbers"); } public static class EntityA { public Collection<Integer> getNumbers() { return Arrays.asList(5, 6, 0); } } @Test public void parseLIKEPrefix() { assertParseAndEvaluate("'Abcdef123' like 'Abc%'"); } @Test public void parseLIKESuffix() { assertParseAndEvaluate("'Abcdef123' like '%123'"); } @Test public void parseLIKEAnyFragment() { assertParseAndEvaluate("'Abcdef123' like '%def%'"); } @Test public void parseBETWEEN() { assertParseAndEvaluate("3 between 1 and 5"); } @Test public void parseJustAConcatenationExpr() { Tokens tokens = new Tokens("12"); Expr expr = RelationalExpr.parse(tokens); assertNotNull(expr); assertFalse(tokens.hasNext()); } @Test(expected = QuerySyntaxException.class) public void parseWithSyntaxError() { RelationalExpr.parse(new Tokens("5 < ")); } }