You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2013/07/09 10:03:33 UTC

[2/4] git commit: CAMEL-6414: The unary operators in Simple is now only applied on functions

CAMEL-6414: The unary operators in Simple is now only applied on functions


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/44d44c53
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/44d44c53
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/44d44c53

Branch: refs/heads/master
Commit: 44d44c53c9ba7648286d0bc700c46eacb129f4b6
Parents: ac7b3d6
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Jul 9 10:01:43 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Jul 9 10:01:43 2013 +0200

----------------------------------------------------------------------
 .../camel/language/simple/SimpleTokenizer.java  | 21 +++++++++++++++++-
 .../simple/SimpleParserExpressionTest.java      | 23 ++++++++++++++++++--
 2 files changed, 41 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/44d44c53/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java b/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
index f70a7d7..9d59507 100644
--- a/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
+++ b/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
@@ -22,6 +22,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
 import org.apache.camel.language.simple.types.SimpleToken;
 import org.apache.camel.language.simple.types.SimpleTokenType;
 import org.apache.camel.language.simple.types.TokenType;
+import org.apache.camel.util.ObjectHelper;
 
 /**
  * Tokenizer to create {@link SimpleToken} from the input.
@@ -203,7 +204,7 @@ public final class SimpleTokenizer {
         String text = expression.substring(index);
         for (SimpleTokenType token : KNOWN_TOKENS) {
             if (acceptType(token.getType(), filters)) {
-                if (text.startsWith(token.getValue())) {
+                if (acceptToken(token, text, expression, index)) {
                     return new SimpleToken(token, index);
                 }
             }
@@ -227,4 +228,22 @@ public final class SimpleTokenizer {
         return false;
     }
 
+    private static boolean acceptToken(SimpleTokenType token, String text, String expression, int index) {
+        if (token.isUnary() && text.startsWith(token.getValue())) {
+            // special check for unary as the previous must be a function end, and the next a whitespace
+            // to ensure unary operators is only applied on functions as intended
+            int len = token.getValue().length();
+            char previous = ' ';
+            if (index > 0) {
+                previous = expression.charAt(index - 1);
+            }
+            String after = text.substring(len);
+            boolean whiteSpace = ObjectHelper.isEmpty(after) || after.startsWith(" ");
+            boolean functionEnd = previous == '}';
+            return functionEnd && whiteSpace;
+        }
+
+        return text.startsWith(token.getValue());
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/44d44c53/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionTest.java b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionTest.java
index e48bffe..4da2b9c 100644
--- a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionTest.java
+++ b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserExpressionTest.java
@@ -181,8 +181,7 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
         assertEquals("456", exp.evaluate(exchange, Object.class));
     }
 
-    // FIXME: see CAMEL-6414
-    public void xxxTestSimpleParser() throws Exception {
+    public void testUnaryLenient() throws Exception {
         exchange.getIn().setHeader("JMSMessageID", "JMSMessageID-123");
         exchange.getIn().setBody("THE MSG ID ${header.JMSMessageID} isA --");
 
@@ -191,4 +190,24 @@ public class SimpleParserExpressionTest extends ExchangeTestSupport {
 
         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));
+    }
 }