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