@SuppressWarnings("unchecked") @Test public void testListsOfMap() { listOfMapsNotGeneric = new ArrayList(); Map map = new HashMap(); map.put("fruit", "apple"); listOfMapsNotGeneric.add(map); SpelExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parseExpression("listOfMapsNotGeneric[0]['fruit']"); assertEquals("apple", expression.getValue(this, String.class)); }
@SuppressWarnings("unchecked") @Test public void testListOfScalar() { listOfScalarNotGeneric = new ArrayList(1); listOfScalarNotGeneric.add("5"); SpelExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parseExpression("listOfScalarNotGeneric[0]"); assertEquals(new Integer(5), expression.getValue(this, Integer.class)); }
@Test public void SPR10486() { SpelExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); Spr10486 rootObject = new Spr10486(); Expression classNameExpression = parser.parseExpression("class.name"); Expression nameExpression = parser.parseExpression("name"); assertThat(classNameExpression.getValue(context, rootObject), equalTo((Object) Spr10486.class.getName())); assertThat(nameExpression.getValue(context, rootObject), equalTo((Object) "name")); }
@Test public void testParsingSimpleTemplateExpression02() throws Exception { SpelExpressionParser parser = new SpelExpressionParser(); Expression expr = parser.parseExpression("hello ${'to'} you", DEFAULT_TEMPLATE_PARSER_CONTEXT); Object o = expr.getValue(); assertEquals("hello to you", o.toString()); }
@Test public void testParsingSimpleTemplateExpression01() throws Exception { SpelExpressionParser parser = new SpelExpressionParser(); Expression expr = parser.parseExpression("hello ${'world'}", DEFAULT_TEMPLATE_PARSER_CONTEXT); Object o = expr.getValue(); assertEquals("hello world", o.toString()); }
@Test public void props() { Properties props = new Properties(); props.setProperty("x", "1"); props.setProperty("y", "2"); props.setProperty("z", "3"); Expression expression = parser.parseExpression("foo(#props)"); StandardEvaluationContext context = new StandardEvaluationContext(); context.setVariable("props", props); String result = expression.getValue(context, new TestBean(), String.class); assertEquals("123", result); }
@Test public void indexIntoGenericPropertyContainingList() { List<String> property = new ArrayList<>(); property.add("bar"); this.property = property; SpelExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parseExpression("property"); assertEquals("@org.springframework.expression.spel.IndexingTests$FieldAnnotation java.util.ArrayList<?>", expression.getValueTypeDescriptor(this).toString()); assertEquals(property, expression.getValue(this)); expression = parser.parseExpression("property[0]"); assertEquals("bar", expression.getValue(this)); }
@Test public void withReturnValue() { EvaluationContext context = createEvaluationContext("theResult"); Object value = new SpelExpressionParser().parseExpression("#result").getValue(context); assertThat(value, equalTo("theResult")); }
@Test public void withNullReturn() { EvaluationContext context = createEvaluationContext(null); Object value = new SpelExpressionParser().parseExpression("#result").getValue(context); assertThat(value, nullValue()); }
@Test public void withoutReturnValue() { EvaluationContext context = createEvaluationContext(CacheOperationExpressionEvaluator.NO_RESULT); Object value = new SpelExpressionParser().parseExpression("#result").getValue(context); assertThat(value, nullValue()); }
@SuppressWarnings("unchecked") @Test public void resolveMapKeyValueTypes() { mapNotGeneric = new HashMap(); mapNotGeneric.put("baseAmount", 3.11); mapNotGeneric.put("bonusAmount", 7.17); SpelExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parseExpression("mapNotGeneric"); assertEquals("@org.springframework.expression.spel.IndexingTests$FieldAnnotation java.util.HashMap<?, ?>", expression.getValueTypeDescriptor(this).toString()); }
@Test public void SPR12502() { SpelExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parseExpression("#root.getClass().getName()"); assertEquals(UnnamedUser.class.getName(), expression.getValue(new UnnamedUser())); assertEquals(NamedUser.class.getName(), expression.getValue(new NamedUser())); }
@Test public void indexIntoGenericPropertyContainingArray() { String[] property = new String[] { "bar" }; this.property = property; SpelExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parseExpression("property"); assertEquals("@org.springframework.expression.spel.IndexingTests$FieldAnnotation java.lang.String[]", expression.getValueTypeDescriptor(this).toString()); assertEquals(property, expression.getValue(this)); expression = parser.parseExpression("property[0]"); assertEquals("bar", expression.getValue(this)); }
@Test public void SPR12803() { StandardEvaluationContext sec = new StandardEvaluationContext(); sec.setVariable("iterable", Collections.emptyList()); SpelExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parseExpression("T(org.springframework.expression.spel.SpelReproTests.FooLists).newArrayList(#iterable)"); assertTrue(expression.getValue(sec) instanceof ArrayList); }
@Test public void resolveBeanReference() { StaticApplicationContext applicationContext = new StaticApplicationContext(); BeanDefinition beanDefinition = new RootBeanDefinition(String.class); applicationContext.registerBeanDefinition("myBean", beanDefinition); applicationContext.refresh(); EvaluationContext context = createEvaluationContext(CacheOperationExpressionEvaluator.NO_RESULT, applicationContext); Object value = new SpelExpressionParser().parseExpression("@myBean.class.getName()").getValue(context); assertThat(value, is(String.class.getName())); }
@Test public void setPropertyContainingMapAutoGrow() { SpelExpressionParser parser = new SpelExpressionParser(new SpelParserConfiguration(true, false)); Expression expression = parser.parseExpression("parameterizedMap"); assertEquals("java.util.Map<java.lang.Integer, java.lang.Integer>", expression.getValueTypeDescriptor(this).toString()); assertEquals(property, expression.getValue(this)); expression = parser.parseExpression("parameterizedMap['9']"); assertEquals(null, expression.getValue(this)); expression.setValue(this, "37"); assertEquals(37, expression.getValue(this)); }
@Test public void shouldAlwaysUsePropertyAccessorFromEvaluationContext() { SpelExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parseExpression("name"); StandardEvaluationContext context = new StandardEvaluationContext(); context.addPropertyAccessor(new ConfigurablePropertyAccessor(Collections.singletonMap("name", "Ollie"))); assertEquals("Ollie", expression.getValue(context)); context = new StandardEvaluationContext(); context.addPropertyAccessor(new ConfigurablePropertyAccessor(Collections.singletonMap("name", "Jens"))); assertEquals("Jens", expression.getValue(context)); }
@Test public void SPR11142() { SpelExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); Spr11142 rootObject = new Spr11142(); Expression expression = parser.parseExpression("something"); thrown.expect(SpelEvaluationException.class); thrown.expectMessage("'something' cannot be found"); expression.getValue(context, rootObject); }
@Test public void unavailableReturnValue() { EvaluationContext context = createEvaluationContext(CacheOperationExpressionEvaluator.RESULT_UNAVAILABLE); try { new SpelExpressionParser().parseExpression("#result").getValue(context); fail("Should have failed to parse expression, result not available"); } catch (VariableNotAvailableException e) { assertEquals("wrong variable name", "result", e.getName()); } }
@Test public void testRogueTrailingDotCausesNPE_SPR6866() { try { new SpelExpressionParser().parseExpression("placeOfBirth.foo."); fail("Should have failed to parse"); } catch (SpelParseException ex) { assertEquals(SpelMessage.OOD, ex.getMessageCode()); assertEquals(16, ex.getPosition()); } }