|
0
|
1 |
package hirondelle.web4j.model;
|
|
|
2 |
|
|
|
3 |
import java.util.*;
|
|
|
4 |
import java.io.FileNotFoundException;
|
|
|
5 |
import java.math.*;
|
|
|
6 |
import java.util.regex.*;
|
|
|
7 |
import junit.framework.*;
|
|
|
8 |
import static hirondelle.web4j.model.ModelUtil.NullsGo;
|
|
|
9 |
|
|
|
10 |
public class TESTComparePossiblyNull extends TestCase {
|
|
|
11 |
|
|
|
12 |
/** Run the test cases. */
|
|
|
13 |
public static void main(String args[]) throws AppException, FileNotFoundException {
|
|
|
14 |
String[] testCaseName = { TESTComparePossiblyNull.class.getName() };
|
|
|
15 |
junit.textui.TestRunner.main(testCaseName);
|
|
|
16 |
}
|
|
|
17 |
|
|
|
18 |
public TESTComparePossiblyNull( String aName) {
|
|
|
19 |
super(aName);
|
|
|
20 |
}
|
|
|
21 |
|
|
|
22 |
|
|
|
23 |
// TEST CASES //
|
|
|
24 |
|
|
|
25 |
public void testStrings(){
|
|
|
26 |
assertTrue(compareStringsNullsLast("aaa", "bbb", BEFORE));
|
|
|
27 |
assertTrue(compareStringsNullsLast("ccc", "bbb", AFTER));
|
|
|
28 |
assertTrue(compareStringsNullsLast("ccc", null , BEFORE));
|
|
|
29 |
assertTrue(compareStringsNullsLast(null, "ccc" , AFTER));
|
|
|
30 |
assertTrue(compareStringsNullsLast("ccc", "ccc", EQUAL));
|
|
|
31 |
assertTrue(compareStringsNullsLast("ccc", "CCC", AFTER));
|
|
|
32 |
|
|
|
33 |
assertTrue(compareStringsNullsFirst("aaa", "bbb", BEFORE));
|
|
|
34 |
assertTrue(compareStringsNullsFirst("ccc", "bbb", AFTER));
|
|
|
35 |
assertTrue(compareStringsNullsFirst("ccc", null , AFTER));
|
|
|
36 |
assertTrue(compareStringsNullsFirst(null, "ccc" , BEFORE));
|
|
|
37 |
assertTrue(compareStringsNullsFirst("ccc", "ccc", EQUAL));
|
|
|
38 |
assertTrue(compareStringsNullsFirst("ccc", "CCC", AFTER));
|
|
|
39 |
}
|
|
|
40 |
|
|
|
41 |
public void testTypicalObject(){
|
|
|
42 |
Person bob = new Person();
|
|
|
43 |
assertTrue(compareObjectsNullsLast(bob, bob, EQUAL));
|
|
|
44 |
|
|
|
45 |
Person peter = new Person();
|
|
|
46 |
peter.setName("Peter");
|
|
|
47 |
assertTrue(compareObjectsNullsLast(bob, peter, BEFORE));
|
|
|
48 |
|
|
|
49 |
Person andrea = new Person();
|
|
|
50 |
andrea.setName("Andrea");
|
|
|
51 |
assertTrue(compareObjectsNullsLast(bob, andrea, AFTER));
|
|
|
52 |
assertTrue(compareObjectsNullsLast(andrea, bob, BEFORE));
|
|
|
53 |
|
|
|
54 |
assertTrue(compareObjectsNullsLast(bob, null, BEFORE));
|
|
|
55 |
assertTrue(compareObjectsNullsLast(null, bob, AFTER));
|
|
|
56 |
|
|
|
57 |
Person noName = new Person();
|
|
|
58 |
noName.setName(null);
|
|
|
59 |
assertTrue(compareObjectsNullsLast(bob, noName, BEFORE));
|
|
|
60 |
assertTrue(compareObjectsNullsLast(noName, bob, AFTER));
|
|
|
61 |
|
|
|
62 |
Person bobTwo = new Person();
|
|
|
63 |
bobTwo.setName("Bob");
|
|
|
64 |
assertTrue(compareObjectsNullsLast(bob, bobTwo, EQUAL));
|
|
|
65 |
assertTrue(compareObjectsNullsLast(bobTwo, bob, EQUAL));
|
|
|
66 |
|
|
|
67 |
Person bobOld = new Person();
|
|
|
68 |
bobOld.setBirthDate(new Date(22,2,1));
|
|
|
69 |
assertTrue(compareObjectsNullsLast(bob, bobOld, AFTER));
|
|
|
70 |
assertTrue(compareObjectsNullsLast(bobOld, bob, BEFORE));
|
|
|
71 |
|
|
|
72 |
Person bobSame = new Person();
|
|
|
73 |
bobSame.setBirthDate(new Date(45,3,3));
|
|
|
74 |
assertTrue(compareObjectsNullsLast(bob, bobSame, EQUAL));
|
|
|
75 |
assertTrue(compareObjectsNullsLast(bobSame, bob, EQUAL));
|
|
|
76 |
|
|
|
77 |
Person bobYoung = new Person();
|
|
|
78 |
bobYoung.setBirthDate(new Date(63,2,1));
|
|
|
79 |
assertTrue(compareObjectsNullsLast(bob, bobYoung, BEFORE));
|
|
|
80 |
|
|
|
81 |
Person bobYoung2 = new Person();
|
|
|
82 |
bobYoung2.setAge(10);
|
|
|
83 |
assertTrue(compareObjectsNullsLast(bob, bobYoung2, AFTER));
|
|
|
84 |
|
|
|
85 |
Person bobOld2 = new Person();
|
|
|
86 |
bobOld2.setAge(100);
|
|
|
87 |
assertTrue(compareObjectsNullsLast(bob, bobOld2, BEFORE));
|
|
|
88 |
|
|
|
89 |
Person poor = new Person();
|
|
|
90 |
poor.setSalary(new BigDecimal("10"));
|
|
|
91 |
assertTrue(compareObjectsNullsLast(bob, poor, AFTER));
|
|
|
92 |
|
|
|
93 |
Person rich = new Person();
|
|
|
94 |
rich.setSalary(new BigDecimal("1000"));
|
|
|
95 |
assertTrue(compareObjectsNullsLast(bob, rich, BEFORE));
|
|
|
96 |
}
|
|
|
97 |
|
|
|
98 |
//test how a collection will sort items? worth it...
|
|
|
99 |
public void testCollection(){
|
|
|
100 |
Set<Person> items = new TreeSet<Person>(); //sorts the items
|
|
|
101 |
|
|
|
102 |
Person bob = new Person();
|
|
|
103 |
|
|
|
104 |
Person andrea = new Person();
|
|
|
105 |
andrea.setName("Andrea");
|
|
|
106 |
|
|
|
107 |
Person noName = new Person();
|
|
|
108 |
noName.setName("");
|
|
|
109 |
|
|
|
110 |
Person nobody = new Person();
|
|
|
111 |
nobody.setName(null);
|
|
|
112 |
|
|
|
113 |
items.add(bob);
|
|
|
114 |
items.add(andrea);
|
|
|
115 |
items.add(noName);
|
|
|
116 |
items.add(nobody);
|
|
|
117 |
|
|
|
118 |
//Informal : just print it out
|
|
|
119 |
//System.out.println(items);
|
|
|
120 |
}
|
|
|
121 |
|
|
|
122 |
// PRIVATE //
|
|
|
123 |
private static final int BEFORE = -1;
|
|
|
124 |
private static final int AFTER = 1;
|
|
|
125 |
private static final int EQUAL = 0;
|
|
|
126 |
|
|
|
127 |
private boolean compareStringsNullsLast(String aThis, String aThat, int aExpectedResult) {
|
|
|
128 |
int result = ModelUtil.comparePossiblyNull(aThis, aThat, NullsGo.LAST);
|
|
|
129 |
return sign(result) == aExpectedResult;
|
|
|
130 |
}
|
|
|
131 |
|
|
|
132 |
private boolean compareStringsNullsFirst(String aThis, String aThat, int aExpectedResult) {
|
|
|
133 |
int result = ModelUtil.comparePossiblyNull(aThis, aThat, NullsGo.FIRST);
|
|
|
134 |
return sign(result) == aExpectedResult;
|
|
|
135 |
}
|
|
|
136 |
|
|
|
137 |
private boolean compareObjectsNullsLast(Comparable aThis, Comparable aThat, int aExpectedResult) {
|
|
|
138 |
int result = ModelUtil.comparePossiblyNull(aThis, aThat, NullsGo.LAST);
|
|
|
139 |
return sign(result) == aExpectedResult;
|
|
|
140 |
}
|
|
|
141 |
|
|
|
142 |
private int sign(int aNumber){
|
|
|
143 |
int result = 0;
|
|
|
144 |
if (aNumber > 0){
|
|
|
145 |
result = 1;
|
|
|
146 |
}
|
|
|
147 |
else if (aNumber < 0){
|
|
|
148 |
result = -1;
|
|
|
149 |
}
|
|
|
150 |
return result;
|
|
|
151 |
}
|
|
|
152 |
|
|
|
153 |
private static final class Person implements Comparable<Person> {
|
|
|
154 |
Person(String aName, Integer aAge, Date aBirthDate, BigDecimal aSalary){
|
|
|
155 |
fName = aName;
|
|
|
156 |
fAge = aAge;
|
|
|
157 |
fBirthDate = aBirthDate;
|
|
|
158 |
fSalary = aSalary;
|
|
|
159 |
}
|
|
|
160 |
Person(){
|
|
|
161 |
fName = "Bob";
|
|
|
162 |
fAge = new Integer(65);
|
|
|
163 |
fBirthDate = new Date(45,3,3);
|
|
|
164 |
fSalary = new BigDecimal("123.45");
|
|
|
165 |
}
|
|
|
166 |
void setName(String aName){ fName = aName; }
|
|
|
167 |
void setAge(Integer aAge){ fAge = aAge; }
|
|
|
168 |
void setBirthDate(Date aBirthDate){ fBirthDate = aBirthDate; }
|
|
|
169 |
void setSalary(BigDecimal aSalary){ fSalary = aSalary; }
|
|
|
170 |
public String toString() { return fName; }
|
|
|
171 |
public int compareTo(Person aThat) {
|
|
|
172 |
if ( this == aThat ) return EQUAL;
|
|
|
173 |
|
|
|
174 |
int comparison = ModelUtil.comparePossiblyNull(this.fName, aThat.fName, NullsGo.LAST);
|
|
|
175 |
if ( comparison != EQUAL ) return comparison;
|
|
|
176 |
|
|
|
177 |
comparison = ModelUtil.comparePossiblyNull(this.fAge, aThat.fAge, NullsGo.LAST);
|
|
|
178 |
if ( comparison != EQUAL ) return comparison;
|
|
|
179 |
|
|
|
180 |
comparison = ModelUtil.comparePossiblyNull(this.fBirthDate, aThat.fBirthDate, NullsGo.LAST);
|
|
|
181 |
if ( comparison != EQUAL ) return comparison;
|
|
|
182 |
|
|
|
183 |
comparison = ModelUtil.comparePossiblyNull(this.fSalary, aThat.fSalary, NullsGo.LAST);
|
|
|
184 |
if ( comparison != EQUAL ) return comparison;
|
|
|
185 |
|
|
|
186 |
return EQUAL;
|
|
|
187 |
}
|
|
|
188 |
//assume all these can be null
|
|
|
189 |
private String fName;
|
|
|
190 |
private Integer fAge;
|
|
|
191 |
private Date fBirthDate;
|
|
|
192 |
private BigDecimal fSalary;
|
|
|
193 |
}
|
|
|
194 |
}
|