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 2010/08/13 17:41:57 UTC

svn commit: r985251 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/util/ObjectHelper.java test/java/org/apache/camel/language/SimpleOperatorTest.java

Author: davsclaus
Date: Fri Aug 13 15:41:56 2010
New Revision: 985251

URL: http://svn.apache.org/viewvc?rev=985251&view=rev
Log:
CAMEL-3052: Simple language better at comparing numeric types.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?rev=985251&r1=985250&r2=985251&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java Fri Aug 13 15:41:56 2010
@@ -113,6 +113,13 @@ public final class ObjectHelper {
     @SuppressWarnings("unchecked")
     public static int typeCoerceCompare(TypeConverter converter, Object leftValue, Object rightValue) {
 
+        // if both values is numeric then compare using numeric
+        Long leftNum = converter.convertTo(Long.class, leftValue);
+        Long rightNum = converter.convertTo(Long.class, rightValue);
+        if (leftNum != null && rightNum != null) {
+            return leftNum.compareTo(rightNum);
+        }
+
         // prefer to NOT coerce to String so use the type which is not String
         // for example if we are comparing String vs Integer then prefer to coerce to Integer
         // as all types can be converted to String which does not work well for comparison

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java?rev=985251&r1=985250&r2=985251&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleOperatorTest.java Fri Aug 13 15:41:56 2010
@@ -89,7 +89,7 @@ public class SimpleOperatorTest extends 
         assertExpression("${in.header.foo} == def", false);
         assertExpression("${in.header.foo} == '1'", false);
 
-        // integer to string comparioson
+        // integer to string comparison
         assertExpression("${in.header.bar} == '123'", true);
         assertExpression("${in.header.bar} == 123", true);
         assertExpression("${in.header.bar} == '444'", false);
@@ -105,7 +105,7 @@ public class SimpleOperatorTest extends 
         assertExpression("${in.header.foo} != def", true);
         assertExpression("${in.header.foo} != '1'", true);
 
-        // integer to string comparioson
+        // integer to string comparison
         assertExpression("${in.header.bar} != '123'", false);
         assertExpression("${in.header.bar} != 123", false);
         assertExpression("${in.header.bar} != '444'", true);
@@ -113,14 +113,14 @@ public class SimpleOperatorTest extends 
         assertExpression("${in.header.bar} != '1'", true);
     }
 
-    public void testGreatherThanOperator() throws Exception {
+    public void testGreaterThanOperator() throws Exception {
         // string to string comparison
         assertExpression("${in.header.foo} > 'aaa'", true);
         assertExpression("${in.header.foo} > aaa", true);
         assertExpression("${in.header.foo} > 'def'", false);
         assertExpression("${in.header.foo} > def", false);
 
-        // integer to string comparioson
+        // integer to string comparison
         assertExpression("${in.header.bar} > '100'", true);
         assertExpression("${in.header.bar} > 100", true);
         assertExpression("${in.header.bar} > '123'", false);
@@ -128,7 +128,43 @@ public class SimpleOperatorTest extends 
         assertExpression("${in.header.bar} > '200'", false);
     }
 
-    public void testGreatherThanOrEqualOperator() throws Exception {
+    public void testGreaterThanStringToInt() throws Exception {
+        // set a String value
+        exchange.getIn().setHeader("num", "70");
+
+        // string to int comparison
+        assertExpression("${in.header.num} > 100", false);
+        assertExpression("${in.header.num} > 100", false);
+        assertExpression("${in.header.num} > 80", false);
+        assertExpression("${in.header.num} > 800", false);
+        assertExpression("${in.header.num} > 1", true);
+        assertExpression("${in.header.num} > 8", true);
+        assertExpression("${in.header.num} > 48", true);
+        assertExpression("${in.header.num} > 69", true);
+        assertExpression("${in.header.num} > 71", false);
+        assertExpression("${in.header.num} > 88", false);
+        assertExpression("${in.header.num} > 777", false);
+    }
+
+    public void testLessThanStringToInt() throws Exception {
+        // set a String value
+        exchange.getIn().setHeader("num", "70");
+
+        // string to int comparison
+        assertExpression("${in.header.num} < 100", true);
+        assertExpression("${in.header.num} < 100", true);
+        assertExpression("${in.header.num} < 80", true);
+        assertExpression("${in.header.num} < 800", true);
+        assertExpression("${in.header.num} < 1", false);
+        assertExpression("${in.header.num} < 8", false);
+        assertExpression("${in.header.num} < 48", false);
+        assertExpression("${in.header.num} < 69", false);
+        assertExpression("${in.header.num} < 71", true);
+        assertExpression("${in.header.num} < 88", true);
+        assertExpression("${in.header.num} < 777", true);
+    }
+
+    public void testGreaterThanOrEqualOperator() throws Exception {
         // string to string comparison
         assertExpression("${in.header.foo} >= 'aaa'", true);
         assertExpression("${in.header.foo} >= aaa", true);
@@ -136,7 +172,7 @@ public class SimpleOperatorTest extends 
         assertExpression("${in.header.foo} >= abc", true);
         assertExpression("${in.header.foo} >= 'def'", false);
 
-        // integer to string comparioson
+        // integer to string comparison
         assertExpression("${in.header.bar} >= '100'", true);
         assertExpression("${in.header.bar} >= 100", true);
         assertExpression("${in.header.bar} >= '123'", true);
@@ -151,7 +187,7 @@ public class SimpleOperatorTest extends 
         assertExpression("${in.header.foo} < 'def'", true);
         assertExpression("${in.header.foo} < def", true);
 
-        // integer to string comparioson
+        // integer to string comparison
         assertExpression("${in.header.bar} < '100'", false);
         assertExpression("${in.header.bar} < 100", false);
         assertExpression("${in.header.bar} < '123'", false);
@@ -167,7 +203,7 @@ public class SimpleOperatorTest extends 
         assertExpression("${in.header.foo} <= abc", true);
         assertExpression("${in.header.foo} <= 'def'", true);
 
-        // integer to string comparioson
+        // integer to string comparison
         assertExpression("${in.header.bar} <= '100'", false);
         assertExpression("${in.header.bar} <= 100", false);
         assertExpression("${in.header.bar} <= '123'", true);