You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by on...@apache.org on 2017/07/13 08:28:51 UTC

camel git commit: CAMEL-11533 - note "-" sign doing binary comparison against negative value

Repository: camel
Updated Branches:
  refs/heads/master c57d31075 -> 4484ccec6


CAMEL-11533 - note "-" sign doing binary comparison against negative value


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

Branch: refs/heads/master
Commit: 4484ccec60bebc1f62979278c85a92aac8c8ca56
Parents: c57d310
Author: onders86 <on...@gmail.com>
Authored: Wed Jul 12 07:40:16 2017 +0300
Committer: onders86 <on...@gmail.com>
Committed: Thu Jul 13 11:28:12 2017 +0300

----------------------------------------------------------------------
 .../language/simple/SimplePredicateParser.java  | 12 ++++-
 .../camel/language/simple/SimpleTokenizer.java  |  5 +++
 .../simple/types/BinaryOperatorType.java        |  6 ++-
 .../language/simple/types/SimpleTokenType.java  |  7 +++
 .../camel/language/simple/types/TokenType.java  |  2 +-
 .../language/simple/SimpleOperatorTest.java     | 46 ++++++++++++++++++++
 .../SimpleParserPredicateInvalidTest.java       |  4 +-
 7 files changed, 77 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/4484ccec/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java b/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
index a127f4a..524f345 100644
--- a/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
+++ b/camel-core/src/main/java/org/apache/camel/language/simple/SimplePredicateParser.java
@@ -587,6 +587,7 @@ public class SimplePredicateParser extends BaseSimpleParser {
             boolean numericSupported = false;
             boolean booleanSupported = false;
             boolean nullSupported = false;
+            boolean minusSupported = false;
             if (types == null || types.length == 0) {
                 literalWithFunctionsSupported = true;
                 // favor literal with functions over literals without functions
@@ -595,6 +596,7 @@ public class SimplePredicateParser extends BaseSimpleParser {
                 numericSupported = true;
                 booleanSupported = true;
                 nullSupported = true;
+                minusSupported = true;
             } else {
                 for (BinaryOperatorType.ParameterType parameterType : types) {
                     literalSupported |= parameterType.isLiteralSupported();
@@ -603,6 +605,7 @@ public class SimplePredicateParser extends BaseSimpleParser {
                     nullSupported |= parameterType.isNumericValueSupported();
                     booleanSupported |= parameterType.isBooleanValueSupported();
                     nullSupported |= parameterType.isNullValueSupported();
+                    minusSupported |= parameterType.isMinusValueSupported();
                 }
             }
 
@@ -615,7 +618,8 @@ public class SimplePredicateParser extends BaseSimpleParser {
                     || (functionSupported && functionText())
                     || (numericSupported && numericValue())
                     || (booleanSupported && booleanValue())
-                    || (nullSupported && nullValue())) {
+                    || (nullSupported && nullValue())
+                    || (minusSupported && minusValue())) {
                 // then after the right hand side value, there should be a whitespace if there is more tokens
                 nextToken();
                 if (!token.getType().isEol()) {
@@ -673,5 +677,11 @@ public class SimplePredicateParser extends BaseSimpleParser {
         return accept(TokenType.nullValue);
         // no other tokens to check so do not use nextToken
     }
+    
+    protected boolean minusValue() {
+        nextToken();
+        return accept(TokenType.numericValue);
+        // no other tokens to check so do not use nextToken
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/4484ccec/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 b72f23d..44728e2 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
@@ -83,6 +83,11 @@ public final class SimpleTokenizer {
         // TODO: @deprecated logical operators, to be removed in Camel 3.0
         KNOWN_TOKENS.add(new SimpleTokenType(TokenType.logicalOperator, "and"));
         KNOWN_TOKENS.add(new SimpleTokenType(TokenType.logicalOperator, "or"));
+        
+        //binary operator 
+        // it is added as the last item because unary -- has the priority
+        // if unary not found it is highly possible - operator is run into.
+        KNOWN_TOKENS.add(new SimpleTokenType(TokenType.minusValue, "-"));
     }
 
     private SimpleTokenizer() {

http://git-wip-us.apache.org/repos/asf/camel/blob/4484ccec/camel-core/src/main/java/org/apache/camel/language/simple/types/BinaryOperatorType.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/language/simple/types/BinaryOperatorType.java b/camel-core/src/main/java/org/apache/camel/language/simple/types/BinaryOperatorType.java
index 5ee1877..366555d 100644
--- a/camel-core/src/main/java/org/apache/camel/language/simple/types/BinaryOperatorType.java
+++ b/camel-core/src/main/java/org/apache/camel/language/simple/types/BinaryOperatorType.java
@@ -127,7 +127,7 @@ public enum BinaryOperatorType {
      * </ul>
      */
     public enum ParameterType {
-        Literal, LiteralWithFunction, Function, NumericValue, BooleanValue, NullValue;
+        Literal, LiteralWithFunction, Function, NumericValue, BooleanValue, NullValue, MinusValue;
 
         public boolean isLiteralSupported() {
             return this == Literal;
@@ -152,6 +152,10 @@ public enum BinaryOperatorType {
         public boolean isNullValueSupported() {
             return this == NullValue;
         }
+        
+        public boolean isMinusValueSupported() {
+            return this == MinusValue;
+        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/camel/blob/4484ccec/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java b/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
index f74e12e..cc68328 100644
--- a/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
+++ b/camel-core/src/main/java/org/apache/camel/language/simple/types/SimpleTokenType.java
@@ -123,6 +123,13 @@ public class SimpleTokenType {
     public boolean isNullValue() {
         return type == TokenType.nullValue;
     }
+    
+    /**
+     * Whether the type is a minus operator
+     */
+    public boolean isMinusValue() {
+        return type == TokenType.minusValue;
+    }
 
     @Override
     public String toString() {

http://git-wip-us.apache.org/repos/asf/camel/blob/4484ccec/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java b/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
index ff1a5d7..da95427 100644
--- a/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
+++ b/camel-core/src/main/java/org/apache/camel/language/simple/types/TokenType.java
@@ -23,7 +23,7 @@ public enum TokenType {
 
     whiteSpace, character,
     booleanValue, numericValue, nullValue,
-    singleQuote, doubleQuote,
+    singleQuote, doubleQuote, minusValue,
     escape,
     functionStart, functionEnd,
     binaryOperator, unaryOperator, logicalOperator,

http://git-wip-us.apache.org/repos/asf/camel/blob/4484ccec/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java
index 25de22e..01c594e 100644
--- a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java
+++ b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleOperatorTest.java
@@ -276,6 +276,52 @@ public class SimpleOperatorTest extends LanguageTestSupport {
         assertPredicate("${in.header.bar} < 123", false);
         assertPredicate("${in.header.bar} < '200'", true);
     }
+    
+    public void testAgainstNegativeValue() throws Exception {
+        assertPredicate("${in.header.bar} == 123", true);
+        assertPredicate("${in.header.bar} == -123", false);
+        assertPredicate("${in.header.bar} =~ 123", true);
+        assertPredicate("${in.header.bar} =~ -123", false);
+        assertPredicate("${in.header.bar} > -123", true);
+        assertPredicate("${in.header.bar} >= -123", true);
+        assertPredicate("${in.header.bar} > 123", false);
+        assertPredicate("${in.header.bar} >= 123", true);
+        assertPredicate("${in.header.bar} < -123", false);
+        assertPredicate("${in.header.bar} <= -123", false);
+        assertPredicate("${in.header.bar} < 123", false);
+        assertPredicate("${in.header.bar} <= 123", true);
+
+        exchange.getIn().setHeader("strNum", "123");
+        assertPredicate("${in.header.strNum} contains '123'", true);
+        assertPredicate("${in.header.strNum} not contains '123'", false);
+        assertPredicate("${in.header.strNum} contains '-123'", false);
+        assertPredicate("${in.header.strNum} not contains '-123'", true);
+        assertPredicate("${in.header.strNum} ~~ '123'", true);
+        assertPredicate("${in.header.strNum} ~~ '-123'", false);
+    
+        exchange.getIn().setHeader("num", -123);
+        assertPredicate("${in.header.num} == -123", true);
+        assertPredicate("${in.header.num} == 123", false);
+        assertPredicate("${in.header.num} =~ -123", true);
+        assertPredicate("${in.header.num} =~ 123", false);
+        assertPredicate("${in.header.num} > -123", false);
+        assertPredicate("${in.header.num} >= -123", true);
+        assertPredicate("${in.header.num} > 123", false);
+        assertPredicate("${in.header.num} >= 123", false);
+        assertPredicate("${in.header.num} < -123", false);
+        assertPredicate("${in.header.num} <= -123", true);
+        assertPredicate("${in.header.num} < 123", true);
+        assertPredicate("${in.header.num} <= 123", true);
+    
+        exchange.getIn().setHeader("strNumNegative", "-123");
+        assertPredicate("${in.header.strNumNegative} contains '123'", true);
+        assertPredicate("${in.header.strNumNegative} not contains '123'", false);
+        assertPredicate("${in.header.strNumNegative} contains '-123'", true);
+        assertPredicate("${in.header.strNumNegative} not contains '-123'", false);
+        assertPredicate("${in.header.strNumNegative} ~~ '123'", true);
+        assertPredicate("${in.header.strNumNegative} ~~ '-123'", true);
+
+    }
 
     public void testLessThanOrEqualOperator() throws Exception {
         // string to string comparison

http://git-wip-us.apache.org/repos/asf/camel/blob/4484ccec/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateInvalidTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateInvalidTest.java b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateInvalidTest.java
index 10ee394..d622100 100644
--- a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateInvalidTest.java
+++ b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleParserPredicateInvalidTest.java
@@ -33,7 +33,7 @@ public class SimpleParserPredicateInvalidTest extends ExchangeTestSupport {
             parser.parsePredicate();
             fail("Should thrown exception");
         } catch (SimpleIllegalSyntaxException e) {
-            assertEquals(18, e.getIndex());
+            assertEquals(19, e.getIndex());
         }
     }
 
@@ -106,7 +106,7 @@ public class SimpleParserPredicateInvalidTest extends ExchangeTestSupport {
             parser.parsePredicate();
             fail("Should thrown exception");
         } catch (SimpleIllegalSyntaxException e) {
-            assertEquals(11, e.getIndex());
+            assertEquals(13, e.getIndex());
         }
     }