Author: markt Date: Wed Feb 15 16:26:08 2012 New Revision: 1244567 URL: http://svn.apache.org/viewvc?rev=1244567&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=52666 Correct coercion order in EL for A {==,!=,eq,ne} B
Modified: tomcat/trunk/java/org/apache/el/lang/ELSupport.java tomcat/trunk/test/org/apache/el/lang/TestELSupport.java Modified: tomcat/trunk/java/org/apache/el/lang/ELSupport.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/lang/ELSupport.java?rev=1244567&r1=1244566&r2=1244567&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/el/lang/ELSupport.java (original) +++ tomcat/trunk/java/org/apache/el/lang/ELSupport.java Wed Feb 15 16:26:08 2012 @@ -127,35 +127,31 @@ public class ELSupport { return true; } else if (obj0 == null || obj1 == null) { return false; - } else if (obj0 instanceof Boolean || obj1 instanceof Boolean) { - return coerceToBoolean(obj0).equals(coerceToBoolean(obj1)); - } else if (obj0.getClass().isEnum()) { - return obj0.equals(coerceToEnum(obj1, obj0.getClass())); - } else if (obj1.getClass().isEnum()) { - return obj1.equals(coerceToEnum(obj0, obj1.getClass())); - } else if (obj0 instanceof String || obj1 instanceof String) { - int lexCompare = coerceToString(obj0).compareTo(coerceToString(obj1)); - return (lexCompare == 0) ? true : false; - } - if (isBigDecimalOp(obj0, obj1)) { + } else if (isBigDecimalOp(obj0, obj1)) { BigDecimal bd0 = (BigDecimal) coerceToNumber(obj0, BigDecimal.class); BigDecimal bd1 = (BigDecimal) coerceToNumber(obj1, BigDecimal.class); return bd0.equals(bd1); - } - if (isDoubleOp(obj0, obj1)) { + } else if (isDoubleOp(obj0, obj1)) { Double d0 = (Double) coerceToNumber(obj0, Double.class); Double d1 = (Double) coerceToNumber(obj1, Double.class); return d0.equals(d1); - } - if (isBigIntegerOp(obj0, obj1)) { + } else if (isBigIntegerOp(obj0, obj1)) { BigInteger bi0 = (BigInteger) coerceToNumber(obj0, BigInteger.class); BigInteger bi1 = (BigInteger) coerceToNumber(obj1, BigInteger.class); return bi0.equals(bi1); - } - if (isLongOp(obj0, obj1)) { + } else if (isLongOp(obj0, obj1)) { Long l0 = (Long) coerceToNumber(obj0, Long.class); Long l1 = (Long) coerceToNumber(obj1, Long.class); return l0.equals(l1); + } else if (obj0 instanceof Boolean || obj1 instanceof Boolean) { + return coerceToBoolean(obj0).equals(coerceToBoolean(obj1)); + } else if (obj0.getClass().isEnum()) { + return obj0.equals(coerceToEnum(obj1, obj0.getClass())); + } else if (obj1.getClass().isEnum()) { + return obj1.equals(coerceToEnum(obj0, obj1.getClass())); + } else if (obj0 instanceof String || obj1 instanceof String) { + int lexCompare = coerceToString(obj0).compareTo(coerceToString(obj1)); + return (lexCompare == 0) ? true : false; } else { return obj0.equals(obj1); } Modified: tomcat/trunk/test/org/apache/el/lang/TestELSupport.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/lang/TestELSupport.java?rev=1244567&r1=1244566&r2=1244567&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/el/lang/TestELSupport.java (original) +++ tomcat/trunk/test/org/apache/el/lang/TestELSupport.java Wed Feb 15 16:26:08 2012 @@ -23,11 +23,17 @@ import javax.el.ELException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import org.junit.Test; public class TestELSupport { @Test + public void testEquals() { + assertTrue(ELSupport.equals("01", Long.valueOf(1))); + } + + @Test public void testBigDecimal() { testIsSame(new BigDecimal( "0.123456789012345678901234567890123456789012345678901234567890123456789")); --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org