/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.language.simple; import java.util.HashMap; import java.util.Map; import org.apache.camel.ExchangeTestSupport; import org.apache.camel.Expression; public class SimpleParserExpressionTest extends ExchangeTestSupport { public void testSimpleParserEol() throws Exception { SimpleExpressionParser parser = new SimpleExpressionParser("Hello", true); Expression exp = parser.parseExpression(); assertEquals("Hello", exp.evaluate(exchange, String.class)); } public void testSimpleSingleQuote() throws Exception { SimpleExpressionParser parser = new SimpleExpressionParser("'Hello'", true); Expression exp = parser.parseExpression(); assertEquals("'Hello'", exp.evaluate(exchange, String.class)); } public void testSimpleStringList() throws Exception { SimpleExpressionParser parser = new SimpleExpressionParser("\"Hello\" \"World\"", true); Expression exp = parser.parseExpression(); assertEquals("\"Hello\" \"World\"", exp.evaluate(exchange, String.class)); } public void testSimpleSingleQuoteWithFunction() throws Exception { exchange.getIn().setBody("World"); SimpleExpressionParser parser = new SimpleExpressionParser("'Hello ${body} how are you?'", true); Expression exp = parser.parseExpression(); assertEquals("'Hello World how are you?'", exp.evaluate(exchange, String.class)); } public void testSimpleSingleQuoteWithFunctionBodyAs() throws Exception { exchange.getIn().setBody("World"); SimpleExpressionParser parser = new SimpleExpressionParser("'Hello ${bodyAs(String)} how are you?'", true); Expression exp = parser.parseExpression(); assertEquals("'Hello World how are you?'", exp.evaluate(exchange, String.class)); } public void testSimpleSingleQuoteEol() throws Exception { SimpleExpressionParser parser = new SimpleExpressionParser("'Hello' World", true); Expression exp = parser.parseExpression(); assertEquals("'Hello' World", exp.evaluate(exchange, String.class)); } public void testSimpleFunction() throws Exception { exchange.getIn().setBody("World"); SimpleExpressionParser parser = new SimpleExpressionParser("${body}", true); Expression exp = parser.parseExpression(); assertEquals("World", exp.evaluate(exchange, String.class)); } public void testSimpleSingleQuoteDollar() throws Exception { SimpleExpressionParser parser = new SimpleExpressionParser("Pay 200$ today", true); Expression exp = parser.parseExpression(); assertEquals("Pay 200$ today", exp.evaluate(exchange, String.class)); } public void testSimpleSingleQuoteDollarEnd() throws Exception { SimpleExpressionParser parser = new SimpleExpressionParser("Pay 200$", true); Expression exp = parser.parseExpression(); assertEquals("Pay 200$", exp.evaluate(exchange, String.class)); } public void testSimpleUnaryInc() throws Exception { exchange.getIn().setBody("122"); SimpleExpressionParser parser = new SimpleExpressionParser("${body}++", true); Expression exp = parser.parseExpression(); assertEquals("123", exp.evaluate(exchange, String.class)); } public void testSimpleUnaryDec() throws Exception { exchange.getIn().setBody("122"); SimpleExpressionParser parser = new SimpleExpressionParser("${body}--", true); Expression exp = parser.parseExpression(); assertEquals("121", exp.evaluate(exchange, String.class)); } public void testSimpleUnaryIncInt() throws Exception { exchange.getIn().setBody(122); SimpleExpressionParser parser = new SimpleExpressionParser("${body}++", true); Expression exp = parser.parseExpression(); assertEquals(Integer.valueOf(123), exp.evaluate(exchange, Integer.class)); } public void testSimpleUnaryDecInt() throws Exception { exchange.getIn().setBody(122); SimpleExpressionParser parser = new SimpleExpressionParser("${body}--", true); Expression exp = parser.parseExpression(); assertEquals(Integer.valueOf(121), exp.evaluate(exchange, Integer.class)); } public void testHeaderNestedFunction() throws Exception { exchange.getIn().setBody("foo"); exchange.getIn().setHeader("foo", "abc"); SimpleExpressionParser parser = new SimpleExpressionParser("${header.${body}}", true); Expression exp = parser.parseExpression(); Object obj = exp.evaluate(exchange, Object.class); assertNotNull(obj); assertEquals("abc", obj); } public void testBodyAsNestedFunction() throws Exception { exchange.getIn().setBody("123"); exchange.getIn().setHeader("foo", "Integer"); SimpleExpressionParser parser = new SimpleExpressionParser("${bodyAs(${header.foo})}", true); Expression exp = parser.parseExpression(); Object obj = exp.evaluate(exchange, Object.class); assertNotNull(obj); Integer num = assertIsInstanceOf(Integer.class, obj); assertEquals(123, num.intValue()); } public void testThreeNestedFunctions() throws Exception { exchange.getIn().setBody("123"); exchange.getIn().setHeader("foo", "Int"); exchange.getIn().setHeader("bar", "e"); exchange.getIn().setHeader("baz", "ger"); SimpleExpressionParser parser = new SimpleExpressionParser("${bodyAs(${header.foo}${header.bar}${header.baz})}", true); Expression exp = parser.parseExpression(); Object obj = exp.evaluate(exchange, Object.class); assertNotNull(obj); Integer num = assertIsInstanceOf(Integer.class, obj); assertEquals(123, num.intValue()); } public void testNestedNestedFunctions() throws Exception { exchange.getIn().setBody("123"); exchange.getIn().setHeader("foo", "Integer"); exchange.getIn().setHeader("bar", "foo"); SimpleExpressionParser parser = new SimpleExpressionParser("${bodyAs(${header.${header.bar}})}", true); Expression exp = parser.parseExpression(); Object obj = exp.evaluate(exchange, Object.class); assertNotNull(obj); Integer num = assertIsInstanceOf(Integer.class, obj); assertEquals(123, num.intValue()); } public void testSimpleMap() throws Exception { Map<String, String> map = new HashMap<String, String>(); map.put("foo", "123"); map.put("foo bar", "456"); exchange.getIn().setBody(map); SimpleExpressionParser parser = new SimpleExpressionParser("${body[foo]}", true); Expression exp = parser.parseExpression(); assertEquals("123", exp.evaluate(exchange, Object.class)); parser = new SimpleExpressionParser("${body['foo bar']}", true); exp = parser.parseExpression(); assertEquals("456", exp.evaluate(exchange, Object.class)); } public void testUnaryLenient() throws Exception { exchange.getIn().setHeader("JMSMessageID", "JMSMessageID-123"); exchange.getIn().setBody("THE MSG ID ${header.JMSMessageID} isA --"); SimpleExpressionParser parser = new SimpleExpressionParser("THE MSG ID ${header.JMSMessageID} isA --", true); Expression exp = parser.parseExpression(); assertEquals("THE MSG ID JMSMessageID-123 isA --", exp.evaluate(exchange, String.class)); } public void testUnaryLenient2() throws Exception { exchange.getIn().setHeader("JMSMessageID", "JMSMessageID-123"); exchange.getIn().setBody("------------THE MSG ID ${header.JMSMessageID}------------"); SimpleExpressionParser parser = new SimpleExpressionParser("------------THE MSG ID ${header.JMSMessageID}------------", true); Expression exp = parser.parseExpression(); assertEquals("------------THE MSG ID JMSMessageID-123------------", exp.evaluate(exchange, String.class)); } public void testUnaryLenient3() throws Exception { exchange.getIn().setHeader("JMSMessageID", "JMSMessageID-123"); exchange.getIn().setBody("------------ THE MSG ID ${header.JMSMessageID} ------------"); SimpleExpressionParser parser = new SimpleExpressionParser("------------ THE MSG ID ${header.JMSMessageID} ------------", true); Expression exp = parser.parseExpression(); assertEquals("------------ THE MSG ID JMSMessageID-123 ------------", exp.evaluate(exchange, String.class)); } }