package com.querydsl.jdo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import com.querydsl.core.types.Expression;
import com.querydsl.core.types.Operator;
import com.querydsl.core.types.Ops;
import com.querydsl.core.types.TemplatesTestUtils;
import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.core.types.dsl.StringPath;
public class JDOQLTemplatesTest {
@Test
public void precedence() {
// Cast
// Unary ("~") ("!")
int p1 = getPrecedence(Ops.NOT);
// Unary ("+") ("-")
int p2 = getPrecedence(Ops.NEGATE);
// Multiplicative ("*") ("/") ("%")
int p3 = getPrecedence(Ops.MULT, Ops.DIV, Ops.MOD);
// Additive ("+") ("-")
int p4 = getPrecedence(Ops.ADD, Ops.SUB);
// Relational (">=") (">") ("<=") ("<") ("instanceof")
int p5 = getPrecedence(Ops.GOE, Ops.GT, Ops.LOE, Ops.LT, Ops.INSTANCE_OF);
// Equality ("==") ("!=")
int p6 = getPrecedence(Ops.EQ, Ops.EQ_IGNORE_CASE, Ops.NE);
// Boolean logical AND ("&")
// Boolean logical OR ("|")
// Conditional AND ("&&")
int p7 = getPrecedence(Ops.AND);
// Conditional OR ("||")
int p8 = getPrecedence(Ops.OR);
assertTrue(p1 < p2);
assertTrue(p2 < p3);
assertTrue(p3 < p4);
assertTrue(p4 < p5);
assertTrue(p5 < p6);
assertTrue(p6 < p7);
assertTrue(p7 < p8);
}
protected int getPrecedence(Operator... ops) {
int precedence = JDOQLTemplates.DEFAULT.getPrecedence(ops[0]);
for (int i = 1; i < ops.length; i++) {
assertEquals(ops[i].name(), precedence, JDOQLTemplates.DEFAULT.getPrecedence(ops[i]));
}
return precedence;
}
@Test
public void generic_precedence() {
TemplatesTestUtils.testPrecedence(JDOQLTemplates.DEFAULT);
}
@Test
public void concat() {
StringPath a = Expressions.stringPath("a");
StringPath b = Expressions.stringPath("b");
StringPath c = Expressions.stringPath("c");
Expression<?> expr = a.append(b).toLowerCase();
String str = new JDOQLSerializer(JDOQLTemplates.DEFAULT, c).handle(expr).toString();
assertEquals("(a + b).toLowerCase()", str);
}
}