SPR-7840: comparator dealing with nulls

master
Andy Clement 14 years ago
parent fadfc76443
commit b9d07b9c47
  1. 4
      org.springframework.expression/src/main/java/org/springframework/expression/spel/support/StandardTypeComparator.java
  2. 4
      org.springframework.expression/src/test/java/org/springframework/expression/spel/DefaultComparatorUnitTests.java
  3. 44
      org.springframework.expression/src/test/java/org/springframework/expression/spel/SpringEL300Tests.java

@ -33,9 +33,9 @@ public class StandardTypeComparator implements TypeComparator {
public int compare(Object left, Object right) throws SpelEvaluationException {
// If one is null, check if the other is
if (left == null) {
return right == null ? 0 : 1;
return right == null ? 0 : -1;
} else if (right == null) {
return -1; // left cannot be null
return 1; // left cannot be null
}
// Basic number comparisons

@ -61,9 +61,9 @@ public class DefaultComparatorUnitTests {
@Test
public void testNulls() throws EvaluationException {
TypeComparator comparator = new StandardTypeComparator();
Assert.assertTrue(comparator.compare(null,"abc")>0);
Assert.assertTrue(comparator.compare(null,"abc")<0);
Assert.assertTrue(comparator.compare(null,null)==0);
Assert.assertTrue(comparator.compare("abc",null)<0);
Assert.assertTrue(comparator.compare("abc",null)>0);
}
@Test

@ -16,6 +16,8 @@
package org.springframework.expression.spel;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
@ -767,5 +769,47 @@ public class SpringEL300Tests extends ExpressionTestCase {
}
}
static class D {
public String a;
private D(String s) {
a=s;
}
public String toString() {
return "D("+a+")";
}
}
@Test
public void testGreaterThanWithNulls_SPR7840() throws Exception {
List<D> list = new ArrayList<D>();
list.add(new D("aaa"));
list.add(new D("bbb"));
list.add(new D(null));
list.add(new D("ccc"));
list.add(new D(null));
list.add(new D("zzz"));
StandardEvaluationContext ctx = new StandardEvaluationContext(list);
SpelExpressionParser parser = new SpelExpressionParser();
String el1 = "#root.?[a < 'hhh']";
SpelExpression exp = parser.parseRaw(el1);
Object value = exp.getValue(ctx);
assertEquals("[D(aaa), D(bbb), D(null), D(ccc), D(null)]",value.toString());
String el2 = "#root.?[a > 'hhh']";
SpelExpression exp2 = parser.parseRaw(el2);
Object value2 = exp2.getValue(ctx);
assertEquals("[D(zzz)]",value2.toString());
// trim out the nulls first
String el3 = "#root.?[a!=null].?[a < 'hhh']";
SpelExpression exp3 = parser.parseRaw(el3);
Object value3 = exp3.getValue(ctx);
assertEquals("[D(aaa), D(bbb), D(ccc)]",value3.toString());
}
}

Loading…
Cancel
Save