@Test public void testOtherOperators() throws Exception { // evaluates to false boolean falseValue = parser.parseExpression("'xyz' instanceof T(int)").getValue(Boolean.class); assertFalse(falseValue); // evaluates to true boolean trueValue = parser.parseExpression("'5.00' matches '^-?\\d+(\\.\\d{2})?$'").getValue(Boolean.class); assertTrue(trueValue); //evaluates to false falseValue = parser.parseExpression("'5.0067' matches '^-?\\d+(\\.\\d{2})?$'").getValue(Boolean.class); assertFalse(falseValue); }
@Test public void SPR10125() { StandardEvaluationContext context = new StandardEvaluationContext(); String fromInterface = parser.parseExpression("T(" + StaticFinalImpl1.class.getName() + ").VALUE").getValue( context, String.class); assertThat(fromInterface, is("interfaceValue")); String fromClass = parser.parseExpression("T(" + StaticFinalImpl2.class.getName() + ").VALUE").getValue( context, String.class); assertThat(fromClass, is("interfaceValue")); }
@Test public void testResolvingString() { Class<?> stringClass = parser.parseExpression("T(String)").getValue(Class.class); assertEquals(String.class, stringClass); }
@Test public void SPR10328() { thrown.expect(SpelParseException.class); thrown.expectMessage("EL1071E: A required selection expression has not been specified"); Expression exp = parser.parseExpression("$[]"); exp.getValue(Arrays.asList("foo", "bar", "baz")); }
@Test public void ternaryWithBooleanReturn_SPR12271() { expression = parser.parseExpression("T(Boolean).TRUE?'abc':'def'"); assertEquals("abc", expression.getValue()); assertCanCompile(expression); assertEquals("abc", expression.getValue()); expression = parser.parseExpression("T(Boolean).FALSE?'abc':'def'"); assertEquals("def", expression.getValue()); assertCanCompile(expression); assertEquals("def", expression.getValue()); }
@Test public void testAccessingPropertyOfClass() { Expression expression = parser.parseExpression("name"); Object value = expression.getValue(new StandardEvaluationContext(String.class)); assertEquals("java.lang.String", value); }
@Test(expected = SpelEvaluationException.class) public void noGetClassAccess() { EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build(); parser.parseExpression("'a'.class.name").getValue(context); }
@Test public void testSelectionAST() throws Exception { SpelExpression expr = (SpelExpression) parser.parseExpression("'abc'.^[true]"); assertEquals("'abc'.^[true]", expr.toStringAST()); expr = (SpelExpression) parser.parseExpression("'abc'.?[true]"); assertEquals("'abc'.?[true]", expr.toStringAST()); expr = (SpelExpression) parser.parseExpression("'abc'.$[true]"); assertEquals("'abc'.$[true]", expr.toStringAST()); }
@Test public void methodReference_simpleInstanceMethodOneArgReturnPrimitive2() throws Exception { expression = parser.parseExpression("charAt(2)"); char resultI = expression.getValue("abc", Character.TYPE); assertEquals('c', resultI); assertCanCompile(expression); char resultC = expression.getValue("abc", Character.TYPE); assertEquals('c', resultC); }
@Test public void SPR9486_subtractFloatWithDouble() { Number expectedNumber = 10.21f - 10.2; ExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); Expression expression = parser.parseExpression("10.21f - 10.2"); Number result = expression.getValue(context, null, Number.class); assertEquals(expectedNumber, result); }
@Test public void SPR9486_floatEqFloat() { Boolean expectedResult = 10.215f == 10.2109f; ExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); Expression expression = parser.parseExpression("10.215f == 10.2109f"); Boolean result = expression.getValue(context, null, Boolean.class); assertEquals(expectedResult, result); }
@Test public void SPR9486_floatLessThanOrEqualFloat() { Boolean expectedNumber = -10.21f <= -10.22f; ExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); Expression expression = parser.parseExpression("-10.21f <= -10.22f"); Boolean result = expression.getValue(context, null, Boolean.class); assertEquals(expectedNumber, result); }
@Test public void SPR9486_floatLessThanOrEqualDouble() { Boolean expectedNumber = -10.21f <= -10.2; ExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); Expression expression = parser.parseExpression("-10.21f <= -10.2"); Boolean result = expression.getValue(context, null, Boolean.class); assertEquals(expectedNumber, result); }
@Test public void SPR9486_floatGreaterThanOrEqualFloat() { Boolean expectedNumber = -10.21f >= -10.2f; ExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); Expression expression = parser.parseExpression("-10.21f >= -10.2f"); Boolean result = expression.getValue(context, null, Boolean.class); assertEquals(expectedNumber, result); }
@Test public void SPR9486_floatModulusFloat() { Number expectedResult = 10.21f % 10.2f; ExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); Expression expression = parser.parseExpression("10.21f % 10.2f"); Number result = expression.getValue(context, null, Number.class); assertEquals(expectedResult, result); }
@Test public void SPR10210() { StandardEvaluationContext context = new StandardEvaluationContext(); context.setVariable("bridgeExample", new org.springframework.expression.spel.spr10210.D()); Expression parseExpression = parser.parseExpression("#bridgeExample.bridgeMethod()"); parseExpression.getValue(context); }
@Test public void testNotWritable() throws Exception { SpelExpression expr = (SpelExpression)parser.parseExpression("37"); assertFalse(expr.isWritable(new StandardEvaluationContext())); expr = (SpelExpression)parser.parseExpression("37L"); assertFalse(expr.isWritable(new StandardEvaluationContext())); expr = (SpelExpression)parser.parseExpression("true"); assertFalse(expr.isWritable(new StandardEvaluationContext())); } }
@Test public void methodReference_literalArguments_int() throws Exception { Expression expression = parser.parseExpression("'abcd'.substring(1,3)"); String resultI = expression.getValue(new TestClass1(), String.class); assertCanCompile(expression); String resultC = expression.getValue(new TestClass1(), String.class); assertEquals("bc", resultI); assertEquals("bc", resultC); }
@Test public void nullLiteral() throws Exception { expression = parser.parseExpression("null"); Object resultI = expression.getValue(new TestClass1(), Object.class); assertCanCompile(expression); Object resultC = expression.getValue(new TestClass1(), Object.class); assertEquals(null, resultI); assertEquals(null, resultC); assertEquals(null, resultC); }
@Test public void testCachedExecutionForParameters() { Expression expression = this.parser.parseExpression("echo(#var)"); assertMethodExecution(expression, 42, "int: 42"); assertMethodExecution(expression, 42, "int: 42"); assertMethodExecution(expression, "Deep Thought", "String: Deep Thought"); assertMethodExecution(expression, 42, "int: 42"); }