[issue-114] EL should coerce String to Integer in equals operation

Signed-off-by: rmartinc <rmartinc@redhat.com>
diff --git a/impl/src/main/java/com/sun/el/lang/ELSupport.java b/impl/src/main/java/com/sun/el/lang/ELSupport.java
index 1c68c91..1ecb927 100644
--- a/impl/src/main/java/com/sun/el/lang/ELSupport.java
+++ b/impl/src/main/java/com/sun/el/lang/ELSupport.java
@@ -106,18 +106,6 @@
         if (obj0 == null || obj1 == null) {
             return false;
         }
-        if (obj0 instanceof Boolean || obj1 instanceof Boolean) {
-            return coerceToBoolean(obj0).equals(coerceToBoolean(obj1));
-        }
-        if (obj0.getClass().isEnum()) {
-            return obj0.equals(coerceToEnum(obj1, obj0.getClass()));
-        }
-        if (obj1.getClass().isEnum()) {
-            return obj1.equals(coerceToEnum(obj0, obj1.getClass()));
-        }
-        if (obj0 instanceof String || obj1 instanceof String) {
-            return coerceToString(obj0).equals(coerceToString(obj1));
-        }
         if (isBigDecimalOp(obj0, obj1)) {
             BigDecimal bd0 = (BigDecimal) coerceToNumber(obj0, BigDecimal.class);
             BigDecimal bd1 = (BigDecimal) coerceToNumber(obj1, BigDecimal.class);
@@ -137,9 +125,20 @@
             Long l0 = (Long) coerceToNumber(obj0, Long.class);
             Long l1 = (Long) coerceToNumber(obj1, Long.class);
             return l0.equals(l1);
-        } else {
-            return obj0.equals(obj1);
         }
+        if (obj0 instanceof Boolean || obj1 instanceof Boolean) {
+            return coerceToBoolean(obj0).equals(coerceToBoolean(obj1));
+        }
+        if (obj0.getClass().isEnum()) {
+            return obj0.equals(coerceToEnum(obj1, obj0.getClass()));
+        }
+        if (obj1.getClass().isEnum()) {
+            return obj1.equals(coerceToEnum(obj0, obj1.getClass()));
+        }
+        if (obj0 instanceof String || obj1 instanceof String) {
+            return coerceToString(obj0).equals(coerceToString(obj1));
+        }
+        return obj0.equals(obj1);
     }
 
     /**
diff --git a/src/test/java/org/glassfish/el/test/OperatorTest.java b/src/test/java/org/glassfish/el/test/OperatorTest.java
index 774a6f1..d52ea10 100644
--- a/src/test/java/org/glassfish/el/test/OperatorTest.java
+++ b/src/test/java/org/glassfish/el/test/OperatorTest.java
@@ -49,22 +49,14 @@
     public void setUp() {
     }
     
-    void testExpr(String testname, String expr, Long expected) {
+    void testExpr(String testname, String expr, Object expected) {
         System.out.println("=== Test " + testname + " ===");
         System.out.println(" ** " + expr);
         Object result = elp.eval(expr);
         System.out.println("    returns " + result);
         assertEquals(expected, result);
     }
-    
-    void testExpr(String testname, String expr, String expected) {
-        System.out.println("=== Test " + testname + " ===");
-        System.out.println(" ** " + expr);
-        Object result = elp.eval(expr);
-        System.out.println("    returns " + result);
-        assertEquals(expected, result);
-    }
-    
+
     @Test
     public void testConcat() {
         testExpr("concat", "a = null; b = null; a + b", 0L);
@@ -123,4 +115,13 @@
         m.invoke(elm.getELContext(), null);
         */
     }
+
+    @Test
+    public void testEquals() {
+        testExpr("string", "'xx' == 'xx'", Boolean.TRUE);
+        testExpr("number", "'a'.length() == 1", Boolean.TRUE);
+        testExpr("coerce '01'", "'01' == 1", Boolean.TRUE);
+        testExpr("coerce '01'", "1 == '01'", Boolean.TRUE);
+        testExpr("coerce '01.10'", "'01.10' == 1.10", Boolean.TRUE);
+    }
 }