assertFalse((Boolean)expression.getValue(b));
}
@Test
public void opAnd() throws Exception {
Expression expression = parser.parseExpression("false and false");
boolean resultI = expression.getValue(1,Boolean.TYPE);
SpelCompiler.compile(expression);
boolean resultC = expression.getValue(1,Boolean.TYPE);
assertEquals(false,resultI);
assertEquals(false,resultC);
expression = parser.parseExpression("false and true");
resultI = expression.getValue(1,Boolean.TYPE);
SpelCompiler.compile(expression);
resultC = expression.getValue(1,Boolean.TYPE);
assertEquals(false,resultI);
assertEquals(false,resultC);
expression = parser.parseExpression("true and false");
resultI = expression.getValue(1,Boolean.TYPE);
SpelCompiler.compile(expression);
resultC = expression.getValue(1,Boolean.TYPE);
assertEquals(false,resultI);
assertEquals(false,resultC);
expression = parser.parseExpression("true and true");
resultI = expression.getValue(1,Boolean.TYPE);
SpelCompiler.compile(expression);
resultC = expression.getValue(1,Boolean.TYPE);
assertEquals(true,resultI);
assertEquals(true,resultC);
TestClass4 tc = new TestClass4();
// Can't compile this as we aren't going down the gettrue() branch in our evaluation
expression = parser.parseExpression("getfalse() and gettrue()");
resultI = expression.getValue(tc,Boolean.TYPE);
assertCantCompile(expression);
expression = parser.parseExpression("getA() and getB()");
tc.a = false;
tc.b = false;
resultI = expression.getValue(tc,Boolean.TYPE);
assertCantCompile(expression); // Haven't yet been into second branch
tc.a = true;
tc.b = false;
resultI = expression.getValue(tc,Boolean.TYPE);
assertCanCompile(expression); // Now been down both
assertFalse(resultI);
tc.a = true;
tc.b = true;
resultI = expression.getValue(tc,Boolean.TYPE);
assertTrue(resultI);
boolean b = true;
expression = parse("#root and #root");
Object resultI2 = expression.getValue(b);
assertCanCompile(expression);
assertTrue((Boolean)resultI2);
assertTrue((Boolean)expression.getValue(b));
}