/** * Register some variables that can be referenced from the tests * @param testContext the test evaluation context */ private static void populateVariables(StandardEvaluationContext testContext) { testContext.setVariable("answer", 42); }
private void assertMethodExecution(Expression expression, Object var, String expected) { this.context.setVariable("var", var); assertEquals(expected, expression.getValue(this.context)); }
@Test public void SPR12808() { SpelExpressionParser parser = new SpelExpressionParser(); Expression expression = parser.parseExpression("T(org.springframework.expression.spel.SpelReproTests.DistanceEnforcer).from(#no)"); StandardEvaluationContext sec = new StandardEvaluationContext(); sec.setVariable("no", new Integer(1)); assertTrue(expression.getValue(sec).toString().startsWith("Integer")); sec = new StandardEvaluationContext(); sec.setVariable("no", new Float(1.0)); assertTrue(expression.getValue(sec).toString().startsWith("Number")); sec = new StandardEvaluationContext(); sec.setVariable("no", "1.0"); assertTrue(expression.getValue(sec).toString().startsWith("Object")); }
@SuppressWarnings("unchecked") @Test public void testSpecialVariables() throws Exception { // create an array of integers List<Integer> primes = new ArrayList<>(); primes.addAll(Arrays.asList(2,3,5,7,11,13,17)); // create parser and set variable 'primes' as the array of integers ExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); context.setVariable("primes",primes); // all prime numbers > 10 from the list (using selection ?{...}) List<Integer> primesGreaterThanTen = (List<Integer>) parser.parseExpression("#primes.?[#this>10]").getValue(context); assertEquals("[11, 13, 17]",primesGreaterThanTen.toString()); }
@Test public void mapWithNonStringValue() { Map<String, Object> map = new HashMap<>(); map.put("x", "1"); map.put("y", 2); map.put("z", "3"); map.put("a", new UUID(1, 1)); Expression expression = parser.parseExpression("foo(#props)"); StandardEvaluationContext context = new StandardEvaluationContext(); context.setVariable("props", map); String result = expression.getValue(context, new TestBean(), String.class); assertEquals("1null3", 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 mapWithAllStringValues() { Map<String, Object> map = new HashMap<>(); map.put("x", "1"); map.put("y", "2"); map.put("z", "3"); Expression expression = parser.parseExpression("foo(#props)"); StandardEvaluationContext context = new StandardEvaluationContext(); context.setVariable("props", map); String result = expression.getValue(context, new TestBean(), String.class); assertEquals("123", result); }
@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 functionReferenceNonCompilableArguments_SPR12359() throws Exception { StandardEvaluationContext context = new StandardEvaluationContext(new Object[] {"1"}); context.registerFunction("negate", SomeCompareMethod2.class.getDeclaredMethod( "negate", Integer.TYPE)); context.setVariable("arg", "2"); int[] ints = new int[] {1,2,3}; context.setVariable("ints",ints); expression = parser.parseExpression("#negate(#ints.?[#this<2][0])"); assertEquals("-1", expression.getValue(context, Integer.class).toString()); // Selection isn't compilable. assertFalse(((SpelNodeImpl)((SpelExpression) expression).getAST()).isCompilable()); }
@Test public void testVariableMapAccess() throws Exception { ExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext ctx = TestScenarioCreator.getTestEvaluationContext(); ctx.setVariable("day", "saturday"); Expression expr = parser.parseExpression("testMap[#day]"); Object value = expr.getValue(ctx, String.class); assertEquals("samstag", value); }
@Test public void testTernary() throws Exception { String falseString = parser.parseExpression("false ? 'trueExp' : 'falseExp'").getValue(String.class); assertEquals("falseExp",falseString); StandardEvaluationContext societyContext = new StandardEvaluationContext(); societyContext.setRootObject(new IEEE()); parser.parseExpression("Name").setValue(societyContext, "IEEE"); societyContext.setVariable("queryName", "Nikola Tesla"); String expression = "isMember(#queryName)? #queryName + ' is a member of the ' " + "+ Name + ' Society' : #queryName + ' is not a member of the ' + Name + ' Society'"; String queryResultString = parser.parseExpression(expression).getValue(societyContext, String.class); assertEquals("Nikola Tesla is a member of the IEEE Society",queryResultString); // queryResultString = "Nikola Tesla is a member of the IEEE Society" }
@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 propertyReferenceVisibility_SPR12771() { StandardEvaluationContext ctx = new StandardEvaluationContext(); ctx.setVariable("httpServletRequest", HttpServlet3RequestFactory.getOne()); // Without a fix compilation was inserting a checkcast to a private type expression = parser.parseExpression("#httpServletRequest.servletPath"); assertEquals("wibble", expression.getValue(ctx)); assertCanCompile(expression); assertEquals("wibble", expression.getValue(ctx)); }
@Test public void testCompiledExpressionForProxy_SPR16191() { SpelExpressionParser expressionParser = new SpelExpressionParser(new SpelParserConfiguration(SpelCompilerMode.IMMEDIATE, null)); Expression expression = expressionParser.parseExpression("#target.process(#root)"); VarargsReceiver receiver = new VarargsReceiver(); VarargsInterface proxy = (VarargsInterface) Proxy.newProxyInstance( getClass().getClassLoader(), new Class<?>[] {VarargsInterface.class}, (proxy1, method, args) -> method.invoke(receiver, args)); StandardEvaluationContext evaluationContext = new StandardEvaluationContext(); evaluationContext.setVariable("target", proxy); String result = expression.getValue(evaluationContext, "foo", String.class); result = expression.getValue(evaluationContext, "foo", String.class); assertEquals("OK", result); }
@Test public void testVariables() throws Exception { Inventor tesla = new Inventor("Nikola Tesla", "Serbian"); StandardEvaluationContext context = new StandardEvaluationContext(); context.setVariable("newName", "Mike Tesla"); context.setRootObject(tesla); parser.parseExpression("foo = #newName").getValue(context); assertEquals("Mike Tesla",tesla.getFoo()); }
/** Should be accessing Goo.getKey because 'bar' variable evaluates to "key" */ @Test public void indexingAsAPropertyAccess_SPR6968_2() { StandardEvaluationContext context = new StandardEvaluationContext(new Goo()); context.setVariable("bar", "key"); String name = null; Expression expr = null; expr = new SpelExpressionParser().parseRaw("instance[#bar]"); name = expr.getValue(context, String.class); assertEquals("hello", name); name = expr.getValue(context, String.class); // will be using the cached accessor this time assertEquals("hello", name); }
/** Should be accessing Goo.wibble field because 'bar' variable evaluates to "wibble" */ @Test public void indexingAsAPropertyAccess_SPR6968_3() { StandardEvaluationContext context = new StandardEvaluationContext(new Goo()); context.setVariable("bar", "wibble"); String name = null; Expression expr = null; expr = new SpelExpressionParser().parseRaw("instance[#bar]"); // will access the field 'wibble' and not use a getter name = expr.getValue(context, String.class); assertEquals("wobble", name); name = expr.getValue(context, String.class); // will be using the cached accessor this time assertEquals("wobble", name); }
@Test public void dollars2() { StandardEvaluationContext context = new StandardEvaluationContext(new XX()); Expression expr = null; expr = new SpelExpressionParser().parseRaw("m[$foo]"); context.setVariable("file_name", "$foo"); assertEquals("wibble", expr.getValue(context, String.class)); }
@Test public void dollars() { StandardEvaluationContext context = new StandardEvaluationContext(new XX()); Expression expr = null; expr = new SpelExpressionParser().parseRaw("m['$foo']"); context.setVariable("file_name", "$foo"); assertEquals("wibble", expr.getValue(context, String.class)); }
@Test public void customMapWithNonStringValue() { CustomMap map = new CustomMap(); map.put("x", "1"); map.put("y", 2); map.put("z", "3"); Expression expression = parser.parseExpression("foo(#props)"); StandardEvaluationContext context = new StandardEvaluationContext(); context.setVariable("props", map); String result = expression.getValue(context, new TestBean(), String.class); assertEquals("1null3", result); }