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 2012/09/23 19:53:14 UTC

svn commit: r1389107 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/language/simple/SimpleTokenizer.java test/java/org/apache/camel/language/simple/SimpleTest.java

Author: davsclaus
Date: Sun Sep 23 17:53:13 2012
New Revision: 1389107

URL: http://svn.apache.org/viewvc?rev=1389107&view=rev
Log:
CAMEL-5642: Simple language - Limit escaping to newline related characters.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java?rev=1389107&r1=1389106&r2=1389107&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java Sun Sep 23 17:53:13 2012
@@ -176,18 +176,23 @@ public final class SimpleTokenizer {
                 // grab next character to escape
                 char next = expression.charAt(++index);
                 // special for new line, tabs and carriage return
+                boolean special = false;
                 if ('n' == next) {
                     sb.append("\n");
+                    special = true;
                 } else if ('t' == next) {
                     sb.append("\t");
+                    special = true;
                 } else if ('r' == next) {
                     sb.append("\r");
+                    special = true;
                 } else {
-                    // append the next
-                    sb.append(next);
+                    // not special just a regular character
+                    sb.append(ch);
                 }
-                // force 2 as length
-                return new SimpleToken(new SimpleTokenType(TokenType.character, sb.toString()), index, 2);
+
+                // force 2 as length if special
+                return new SimpleToken(new SimpleTokenType(TokenType.character, sb.toString()), index, special ? 2 : 1);
             }
         }
 

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java?rev=1389107&r1=1389106&r2=1389107&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java Sun Sep 23 17:53:13 2012
@@ -1086,6 +1086,24 @@ public class SimpleTest extends Language
         assertExpression("${body.substring(${header.min}, ${header.max})}", "me");
     }
 
+    public void testBodyOgnlReplace() throws Exception {
+        exchange.getIn().setBody("Kamel is a cool Kamel");
+
+        assertExpression("${body.replace(\"Kamel\", \"Camel\")}", "Camel is a cool Camel");
+    }
+
+    public void testBodyOgnlReplaceEscapedChar() throws Exception {
+        exchange.getIn().setBody("foo$bar$baz");
+
+        assertExpression("${body.replace('$', '-')}", "foo-bar-baz");
+    }
+
+    public void testBodyOgnlReplaceEscapedBackslashChar() throws Exception {
+        exchange.getIn().setBody("foo\\bar\\baz");
+
+        assertExpression("${body.replace('\\', '\\\\')}", "foo\\\\bar\\\\baz");
+    }
+
     public void testClassSimpleName() throws Exception {
         Animal tiger = new Animal("Tony the Tiger", 13);
         exchange.getIn().setBody(tiger);
@@ -1109,7 +1127,7 @@ public class SimpleTest extends Language
 
     public void testSlashBeforeHeader() throws Exception {
         assertExpression("foo/${header.foo}", "foo/abc");
-        assertExpression("foo\\\\${header.foo}", "foo\\abc");
+        assertExpression("foo\\${header.foo}", "foo\\abc");
     }
 
     public void testJSonLike() throws Exception {
@@ -1133,7 +1151,7 @@ public class SimpleTest extends Language
         exchange.getIn().setBody("Something");
 
         // slash foo
-        assertExpression("\\\\foo", "\\foo");
+        assertExpression("\\foo", "\\foo");
 
         assertExpression("\\n${body}", "\nSomething");
         assertExpression("\\t${body}", "\tSomething");
@@ -1144,9 +1162,7 @@ public class SimpleTest extends Language
         assertExpression("\\r${body}\\r", "\rSomething\r");
         assertExpression("\\n\\r${body}\\n\\r", "\n\rSomething\n\r");
 
-        assertExpression("\\$${body}", "$Something");
-        assertExpression("\\$\\{${body}\\}", "${Something}");
-        assertExpression("\\$\\{body\\}", "${body}");
+        assertExpression("$${body}", "$Something");
     }
 
     protected String getLanguageName() {
@@ -1154,15 +1170,12 @@ public class SimpleTest extends Language
     }
 
     protected void assertExpressionResultInstanceOf(String expressionText, Class<?> expectedType) {
-        // TODO [hz]: we should refactor TestSupport.assertExpression(Expression, Exchange, Object)
-        // into 2 methods, a helper that returns the value and use that helper in assertExpression
-        // Then use the helper here to get the value and move this method to LanguageTestSupport
         Language language = assertResolveLanguage(getLanguageName());
         Expression expression = language.createExpression(expressionText);
         assertNotNull("Cannot assert type when no type is provided", expectedType);
         assertNotNull("No Expression could be created for text: " + expressionText + " language: " + language, expression);
         Object answer = expression.evaluate(exchange, Object.class);
-        assertIsInstanceOf(Animal.class, answer);
+        assertIsInstanceOf(expectedType, answer);
     }
 
     public static final class Animal {