1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.myfaces.trinidad.model;
20
21 import java.util.ArrayList;
22 import java.util.Collections;
23 import java.util.List;
24 import javax.faces.model.DataModel;
25 import javax.faces.model.ListDataModel;
26
27 import junit.framework.Test;
28 import junit.framework.TestSuite;
29
30 import org.apache.myfaces.trinidad.model.CollectionModel;
31 import org.apache.myfaces.trinidad.model.SortCriterion;
32 import org.apache.myfaces.trinidad.model.SortableModel;
33 import org.apache.shale.test.base.AbstractJsfTestCase;
34
35
36
37 public class SortableModelTest extends AbstractJsfTestCase
38 {
39 public SortableModelTest(String name)
40 {
41 super(name);
42 }
43
44 @Override
45 protected void setUp() throws Exception
46 {
47 super.setUp();
48 }
49
50 @Override
51 protected void tearDown() throws Exception
52 {
53 super.tearDown();
54 }
55
56 public static Test suite()
57 {
58 return new TestSuite(SortableModelTest.class);
59 }
60
61 public void testInitialSort()
62 {
63 DataModel dModel = _createTestDataModel();
64 SortableModel sModel = new SortableModel(dModel);
65 _testInitialSort(sModel);
66 }
67
68 private void _testInitialSort(SortableModel sModel)
69 {
70 sModel.setRowIndex(0);
71 assertTrue(sModel.getRowData() == _bean1);
72 sModel.setRowIndex(1);
73 assertTrue(sModel.getRowData() == _bean2);
74 sModel.setRowIndex(2);
75 assertTrue(sModel.getRowData() == _bean3);
76 }
77
78 public void testRowCount()
79 {
80 DataModel dModel = _createTestDataModel();
81 SortableModel sModel = new SortableModel(dModel);
82 assertTrue(sModel.getRowCount() == dModel.getRowCount());
83 _sort(sModel, "name", true);
84 assertTrue(sModel.getRowCount() == dModel.getRowCount());
85 }
86
87 public void testSortableProperties()
88 {
89 DataModel dModel = _createTestDataModel();
90 SortableModel sModel = new SortableModel(dModel);
91 assertTrue(sModel.isSortable("age"));
92 assertTrue(sModel.isSortable("name"));
93 assertFalse(sModel.isSortable("object"));
94 }
95
96 public void testSortAscending()
97 {
98 DataModel dModel = _createTestDataModel();
99 SortableModel sModel = new SortableModel(dModel);
100 _sort(sModel, "name", true);
101
102
103
104
105
106
107
108
109 sModel.setRowIndex(0);
110 assertTrue(sModel.getRowData() == _bean2);
111 sModel.setRowIndex(1);
112 assertTrue(sModel.getRowData() == _bean1);
113 sModel.setRowIndex(2);
114 assertTrue(sModel.getRowData() == _bean3);
115 }
116
117 public void testUnsort()
118 {
119 DataModel dModel = _createTestDataModel();
120 SortableModel sModel = new SortableModel(dModel);
121 _sort(sModel, "name", true);
122
123 sModel.setSortCriteria(null);
124 _testInitialSort(sModel);
125 }
126
127 public void testSortDescending()
128 {
129 DataModel dModel = _createTestDataModel();
130 SortableModel sModel = new SortableModel(dModel);
131 _sort(sModel, "age", false);
132 sModel.setRowIndex(0);
133 assertTrue(sModel.getRowData() == _bean2);
134 sModel.setRowIndex(1);
135 assertTrue(sModel.getRowData() == _bean3);
136 sModel.setRowIndex(2);
137 assertTrue(sModel.getRowData() == _bean1);
138 }
139
140
141
142 public void testEmptyTable()
143 {
144 DataModel emptyModel = new ListDataModel(new ArrayList<Bean>());
145 SortableModel sModel = new SortableModel(emptyModel);
146 _sort(sModel, "age", false);
147 }
148
149 public void testGetRowIndex()
150 {
151 DataModel dModel = _createTestDataModel();
152 SortableModel sModel = new SortableModel(dModel);
153 _sort(sModel, "age", true);
154
155 dModel.setRowIndex(2);
156 assertTrue(sModel.getRowIndex() == 1);
157 dModel.setRowIndex(0);
158 assertTrue(sModel.getRowIndex() == 0);
159 dModel.setRowIndex(1);
160 assertTrue(sModel.getRowIndex() == 2);
161 }
162
163 public void testSetRowIndex()
164 {
165 DataModel dModel = _createTestDataModel();
166 SortableModel sModel = new SortableModel(dModel);
167 _sort(sModel, "age", true);
168
169 sModel.setRowIndex(1);
170 assertTrue(dModel.getRowIndex() == 2);
171 sModel.setRowIndex(0);
172 assertTrue(dModel.getRowIndex() == 0);
173 sModel.setRowIndex(2);
174 assertTrue(dModel.getRowIndex() == 1);
175 }
176
177 private DataModel _createTestDataModel()
178 {
179 List<Bean> list = new ArrayList<Bean>(3);
180 list.add(_bean1);
181 list.add(_bean2);
182 list.add(_bean3);
183 return new ListDataModel(Collections.unmodifiableList(list));
184 }
185
186 private void _sort(CollectionModel model,
187 String property, boolean isAscending)
188 {
189 SortCriterion criterion = new SortCriterion(property, isAscending);
190 model.setSortCriteria(Collections.singletonList(criterion));
191 }
192
193 private final Bean _bean1 = new Bean(10, "Tracy");
194 private final Bean _bean2 = new Bean(15, "Anne");
195 private final Bean _bean3 = new Bean(12, "Zach");
196
197 public static final class Bean
198 {
199 public Bean(int age, String name)
200 {
201 _age = age;
202 _name = name;
203 _obj = new Object();
204 }
205
206 public int getAge()
207 {
208 return _age;
209 }
210
211 public String getName()
212 {
213 return _name;
214 }
215
216
217 public Object getObject()
218 {
219 return _obj;
220 }
221
222 @Override
223 public String toString()
224 {
225 return "name:"+_name+" age:"+_age;
226 }
227
228 private final int _age;
229 private final String _name;
230 private final Object _obj;
231 }
232 }