Support compilation of the SpEL operator OpModulus

This commit enables the modulus operator to be compiled when
it is used as part of a SpEL expression.

Issue: SPR-12041
This commit is contained in:
Andy Clement
2014-07-29 12:34:44 -07:00
parent 59080ff2b2
commit d30174897d
2 changed files with 134 additions and 1 deletions

View File

@@ -1419,6 +1419,77 @@ public class SpelCompilationCoverageTests extends AbstractExpressionTests {
assertEquals(-2.0f,expression.getValue());
}
@Test
public void opModulus_12041() throws Exception {
expression = parse("2%2");
assertEquals(0,expression.getValue());
assertCanCompile(expression);
assertEquals(0,expression.getValue());
expression = parse("payload%2==0");
assertTrue(expression.getValue(new GenericMessageTestHelper<Integer>(4),Boolean.TYPE));
assertFalse(expression.getValue(new GenericMessageTestHelper<Integer>(5),Boolean.TYPE));
assertCanCompile(expression);
assertTrue(expression.getValue(new GenericMessageTestHelper<Integer>(4),Boolean.TYPE));
assertFalse(expression.getValue(new GenericMessageTestHelper<Integer>(5),Boolean.TYPE));
expression = parse("8%3");
assertEquals(2,expression.getValue());
assertCanCompile(expression);
assertEquals(2,expression.getValue());
expression = parse("17L%5L");
assertEquals(2L,expression.getValue());
assertCanCompile(expression);
assertEquals(2L,expression.getValue());
expression = parse("3.0f%2.0f");
assertEquals(1.0f,expression.getValue());
assertCanCompile(expression);
assertEquals(1.0f,expression.getValue());
expression = parse("3.0d%4.0d");
assertEquals(3.0d,expression.getValue());
assertCanCompile(expression);
assertEquals(3.0d,expression.getValue());
expression = parse("T(Float).valueOf(6.0f)%2");
assertEquals(0.0f,expression.getValue());
assertCantCompile(expression);
expression = parse("T(Float).valueOf(6.0f)%4");
assertEquals(2.0f,expression.getValue());
assertCantCompile(expression);
expression = parse("T(Float).valueOf(8.0f)%T(Float).valueOf(3.0f)");
assertEquals(2.0f,expression.getValue());
assertCanCompile(expression);
assertEquals(2.0f,expression.getValue());
expression = parse("13L%T(Long).valueOf(4L)");
assertEquals(1L,expression.getValue());
assertCanCompile(expression);
assertEquals(1L,expression.getValue());
expression = parse("T(Long).valueOf(44L)%12");
assertEquals(8L,expression.getValue());
assertCantCompile(expression);
expression = parse("T(Long).valueOf(9L)%T(Long).valueOf(2L)");
assertEquals(1L,expression.getValue());
assertCanCompile(expression);
assertEquals(1L,expression.getValue());
expression = parse("7L%T(Long).valueOf(2L)");
assertEquals(1L,expression.getValue());
assertCanCompile(expression);
assertEquals(1L,expression.getValue());
expression = parse("T(Float).valueOf(9.0f)%-T(Float).valueOf(4.0f)");
assertEquals(1.0f,expression.getValue());
assertCanCompile(expression);
assertEquals(1.0f,expression.getValue());
}
@Test
public void constructorReference() throws Exception {