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));
+ }
}