Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions src/java/ognl/OgnlOps.java
Original file line number Diff line number Diff line change
Expand Up @@ -807,13 +807,11 @@ public static Object binaryAnd(Object v1, Object v2)
if (type == BIGINT || type == BIGDEC) return bigIntValue(v1).and(bigIntValue(v2));
return newInteger(type, longValue(v1) & longValue(v2));
}

public static boolean equal(Object v1, Object v2)
{
if (v1 == null) return v2 == null;
if (v1 == v2 || isEqual(v1, v2)) return true;
if (v1 instanceof Number && v2 instanceof Number)
return ((Number) v1).doubleValue() == ((Number) v2).doubleValue();
if (v1 == null) return v2 == null;
if (v1 == v2 || isEqual(v1, v2)) return true;
return false;
}

Expand Down
77 changes: 77 additions & 0 deletions src/test/java/ognl/OgnlOpsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package ognl;

import junit.framework.TestCase;

public class OgnlOpsTest extends TestCase {
public void testEqualStringsEqual() throws Exception {
final String v1 = "a";
final String v2 = "a";
final boolean res = OgnlOps.equal(v1, v2);
assertEquals(v1.equals(v2), res);
}

public void testEqualStringsNotEqual() throws Exception {
final String v1 = "a";
final String v2 = "b";
final boolean res = OgnlOps.equal(v1, v2);
assertEquals(v1.equals(v2), res);
}

public void testEqualFloatsEqual() throws Exception {
final Float v1 = 0.1f;
final Float v2 = 0.1f;
final boolean res = OgnlOps.equal(v1, v2);
assertEquals(v1.equals(v2), res);
}

public void testEqualFloatsNotEqual() throws Exception {
final Float v1 = 0.1f;
final Float v2 = 0.2f;
final boolean res = OgnlOps.equal(v1, v2);
assertEquals(v1.equals(v2), res);
}

public void testEqualLongsEqual() throws Exception {
final Long v1 = 1l;
final Long v2 = 1l;
final boolean res = OgnlOps.equal(v1, v2);
assertEquals(v1.equals(v2), res);
}

public void testEqualLongsNotEqual() throws Exception {
final Long v1 = 1l;
final Long v2 = 2l;
final boolean res = OgnlOps.equal(v1, v2);
assertEquals(v1.equals(v2), res);
}

public void testEqualBigLongsEqual() throws Exception {
final Long v1 = 1000000000000000001l;
final Long v2 = 1000000000000000001l;
final boolean res = OgnlOps.equal(v1, v2);
assertEquals(v1.equals(v2), res);
}

public void testEqualBigLongsNotEqual() throws Exception {
final Long v1 = 1000000000000000001l;
final Long v2 = 1000000000000000002l;
final boolean res = OgnlOps.equal(v1, v2);
assertEquals(v1.equals(v2), res);
}

public void testEqualNullsEqual() throws Exception {
final Object v1 = null;
final Object v2 = null;
final boolean res = OgnlOps.equal(v1, v2);
assertTrue(res);
}

public void testEqualNullsNotEqual() throws Exception {
final Object v1 = null;
final Object v2 = "b";
final boolean res = OgnlOps.equal(v1, v2);
assertFalse(res);
final boolean res2 = OgnlOps.equal(v2, v1);
assertFalse(res2);
}
}