blob: 77326ce5c5c7c08719ee980bc883336d63985aad [file] [log] [blame]
Simon Hunte9828152015-05-01 17:54:25 -07001/*
2 * Copyright 2015 Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.ui.table;
18
19import org.junit.Test;
Simon Hunt933b1a82015-05-04 19:07:24 -070020import org.onosproject.ui.table.TableModel.SortDir;
Simon Hunt3ee7f742015-05-05 10:18:20 -070021import org.onosproject.ui.table.cell.DefaultCellFormatter;
22import org.onosproject.ui.table.cell.HexFormatter;
Simon Hunte9828152015-05-01 17:54:25 -070023
Simon Hunt933b1a82015-05-04 19:07:24 -070024import static org.junit.Assert.*;
Simon Hunte9828152015-05-01 17:54:25 -070025
26/**
27 * Unit tests for {@link TableModel}.
28 */
29public class TableModelTest {
30
Simon Hunt3ee7f742015-05-05 10:18:20 -070031 private static final String UNEX_SORT = "unexpected sort: index ";
Simon Hunt933b1a82015-05-04 19:07:24 -070032
Simon Hunte9828152015-05-01 17:54:25 -070033 private static final String FOO = "foo";
34 private static final String BAR = "bar";
Simon Hunte9828152015-05-01 17:54:25 -070035 private static final String ZOO = "zoo";
36
Simon Hunt27bf0792015-05-07 10:50:29 -070037 private enum StarWars {
38 LUKE_SKYWALKER, LEIA_ORGANA, HAN_SOLO, C3PO, R2D2, JABBA_THE_HUTT
39 }
40
Simon Hunt3ee7f742015-05-05 10:18:20 -070041 private static class ParenFormatter implements CellFormatter {
Simon Hunte9828152015-05-01 17:54:25 -070042 @Override
43 public String format(Object value) {
44 return "(" + value + ")";
45 }
46 }
47
48 private TableModel tm;
Simon Hunt933b1a82015-05-04 19:07:24 -070049 private TableModel.Row[] rows;
50 private TableModel.Row row;
Simon Hunte9828152015-05-01 17:54:25 -070051 private CellFormatter fmt;
52
53 @Test(expected = NullPointerException.class)
54 public void guardAgainstNull() {
55 tm = new TableModel(null);
56 }
57
58 @Test(expected = IllegalArgumentException.class)
59 public void guardAgainstEmpty() {
60 tm = new TableModel();
61 }
62
63 @Test(expected = IllegalArgumentException.class)
64 public void guardAgainstDuplicateCols() {
65 tm = new TableModel(FOO, BAR, FOO);
66 }
67
68 @Test
69 public void basic() {
70 tm = new TableModel(FOO, BAR);
71 assertEquals("column count", 2, tm.columnCount());
72 assertEquals("row count", 0, tm.rowCount());
Simon Hunte9828152015-05-01 17:54:25 -070073 }
74
75 @Test
76 public void defaultFormatter() {
77 tm = new TableModel(FOO);
78 fmt = tm.getFormatter(FOO);
79 assertTrue("Wrong formatter", fmt instanceof DefaultCellFormatter);
80 }
81
82 @Test(expected = IllegalArgumentException.class)
83 public void formatterBadColumn() {
84 tm = new TableModel(FOO);
85 fmt = tm.getFormatter(BAR);
86 }
87
88 @Test
89 public void altFormatter() {
90 tm = new TableModel(FOO, BAR);
Simon Hunt3ee7f742015-05-05 10:18:20 -070091 tm.setFormatter(BAR, new ParenFormatter());
Simon Hunte9828152015-05-01 17:54:25 -070092
93 fmt = tm.getFormatter(FOO);
94 assertTrue("Wrong formatter", fmt instanceof DefaultCellFormatter);
95 assertEquals("Wrong result", "2", fmt.format(2));
96
97 fmt = tm.getFormatter(BAR);
Simon Hunt3ee7f742015-05-05 10:18:20 -070098 assertTrue("Wrong formatter", fmt instanceof ParenFormatter);
Simon Hunte9828152015-05-01 17:54:25 -070099 assertEquals("Wrong result", "(2)", fmt.format(2));
100 }
101
102 @Test
103 public void emptyRow() {
104 tm = new TableModel(FOO, BAR);
105 tm.addRow();
106 assertEquals("bad row count", 1, tm.rowCount());
107 }
108
109 @Test(expected = IllegalArgumentException.class)
110 public void rowBadColumn() {
111 tm = new TableModel(FOO, BAR);
112 tm.addRow().cell(ZOO, 2);
113 }
114
115 @Test(expected = NullPointerException.class)
116 public void rowNullValue() {
117 tm = new TableModel(FOO, BAR);
118 tm.addRow().cell(FOO, null);
119 }
120
121 @Test
122 public void simpleRow() {
123 tm = new TableModel(FOO, BAR);
124 tm.addRow().cell(FOO, 3).cell(BAR, true);
125 assertEquals("bad row count", 1, tm.rowCount());
Simon Hunt933b1a82015-05-04 19:07:24 -0700126 row = tm.getRows()[0];
127 assertEquals("bad cell", 3, row.get(FOO));
128 assertEquals("bad cell", true, row.get(BAR));
Simon Hunte9828152015-05-01 17:54:25 -0700129 }
Simon Hunt933b1a82015-05-04 19:07:24 -0700130
131
132 private static final String ONE = "one";
133 private static final String TWO = "two";
134 private static final String THREE = "three";
135 private static final String FOUR = "four";
136 private static final String ELEVEN = "eleven";
137 private static final String TWELVE = "twelve";
138 private static final String TWENTY = "twenty";
139 private static final String THIRTY = "thirty";
140
141 private static final String[] NAMES = {
142 FOUR,
143 THREE,
144 TWO,
145 ONE,
146 ELEVEN,
147 TWELVE,
148 THIRTY,
149 TWENTY,
150 };
151 private static final String[] SORTED_NAMES = {
152 ELEVEN,
153 FOUR,
154 ONE,
155 THIRTY,
156 THREE,
157 TWELVE,
158 TWENTY,
159 TWO,
160 };
161
162 private static final int[] NUMBERS = {
163 4, 3, 2, 1, 11, 12, 30, 20
164 };
165
166 private static final int[] SORTED_NUMBERS = {
167 1, 2, 3, 4, 11, 12, 20, 30
168 };
169
Simon Hunt3ee7f742015-05-05 10:18:20 -0700170 private static final String[] SORTED_HEX = {
171 "0x1", "0x2", "0x3", "0x4", "0xb", "0xc", "0x14", "0x1e"
172 };
173
Simon Hunt933b1a82015-05-04 19:07:24 -0700174 @Test
175 public void verifyTestData() {
176 // not a unit test per se, but will fail if we don't keep
177 // the three test arrays in sync
178 int nalen = NAMES.length;
179 int snlen = SORTED_NAMES.length;
180 int nulen = NUMBERS.length;
181
182 if (nalen != snlen || nalen != nulen) {
183 fail("test data array size discrepancy");
184 }
185 }
186
187 private void initUnsortedTable() {
188 tm = new TableModel(FOO, BAR);
189 for (int i = 0; i < NAMES.length; i++) {
190 tm.addRow().cell(FOO, NAMES[i]).cell(BAR, NUMBERS[i]);
191 }
192 }
193
194 @Test
195 public void tableStringSort() {
196 initUnsortedTable();
197
198 // sort by name
199 tm.sort(FOO, SortDir.ASC);
200
201 // verify results
202 rows = tm.getRows();
203 int nr = rows.length;
204 assertEquals("row count", NAMES.length, nr);
205 for (int i = 0; i < nr; i++) {
Simon Hunt3ee7f742015-05-05 10:18:20 -0700206 assertEquals(UNEX_SORT + i, SORTED_NAMES[i], rows[i].get(FOO));
Simon Hunt933b1a82015-05-04 19:07:24 -0700207 }
208
209 // now the other way
210 tm.sort(FOO, SortDir.DESC);
211
212 // verify results
213 rows = tm.getRows();
214 nr = rows.length;
215 assertEquals("row count", NAMES.length, nr);
216 for (int i = 0; i < nr; i++) {
Simon Hunt3ee7f742015-05-05 10:18:20 -0700217 assertEquals(UNEX_SORT + i,
Simon Hunt933b1a82015-05-04 19:07:24 -0700218 SORTED_NAMES[nr - 1 - i], rows[i].get(FOO));
219 }
220 }
221
222 @Test
223 public void tableNumberSort() {
224 initUnsortedTable();
225
Simon Hunt933b1a82015-05-04 19:07:24 -0700226 // sort by number
227 tm.sort(BAR, SortDir.ASC);
228
229 // verify results
230 rows = tm.getRows();
231 int nr = rows.length;
232 assertEquals("row count", NUMBERS.length, nr);
233 for (int i = 0; i < nr; i++) {
Simon Hunt3ee7f742015-05-05 10:18:20 -0700234 assertEquals(UNEX_SORT + i, SORTED_NUMBERS[i], rows[i].get(BAR));
Simon Hunt933b1a82015-05-04 19:07:24 -0700235 }
236
237 // now the other way
238 tm.sort(BAR, SortDir.DESC);
239
240 // verify results
241 rows = tm.getRows();
242 nr = rows.length;
243 assertEquals("row count", NUMBERS.length, nr);
244 for (int i = 0; i < nr; i++) {
Simon Hunt3ee7f742015-05-05 10:18:20 -0700245 assertEquals(UNEX_SORT + i,
Simon Hunt933b1a82015-05-04 19:07:24 -0700246 SORTED_NUMBERS[nr - 1 - i], rows[i].get(BAR));
247 }
248 }
249
250 @Test
Simon Hunt3ee7f742015-05-05 10:18:20 -0700251 public void sortAndFormat() {
252 initUnsortedTable();
253
Simon Hunt27bf0792015-05-07 10:50:29 -0700254 // set hex formatter
Simon Hunt3d1b0652015-05-05 17:27:24 -0700255 tm.setFormatter(BAR, HexFormatter.INSTANCE);
Simon Hunt3ee7f742015-05-05 10:18:20 -0700256
257 // sort by number
258 tm.sort(BAR, SortDir.ASC);
259
260 // verify results
261 rows = tm.getRows();
262 int nr = rows.length;
263 assertEquals("row count", SORTED_HEX.length, nr);
264 for (int i = 0; i < nr; i++) {
265 assertEquals(UNEX_SORT + i, SORTED_HEX[i], rows[i].getAsString(BAR));
266 }
267 }
268
Simon Hunt9ffbd8d2015-05-06 12:02:32 -0700269 private static final String[][] SORTED_NAMES_AND_HEX = {
270 {ELEVEN, "0xb"},
271 {FOUR, "0x4"},
272 {ONE, "0x1"},
273 {THIRTY, "0x1e"},
274 {THREE, "0x3"},
275 {TWELVE, "0xc"},
276 {TWENTY, "0x14"},
277 {TWO, "0x2"},
278 };
279
280 @Test
281 public void sortAndFormatTwo() {
282 initUnsortedTable();
283 tm.setFormatter(BAR, HexFormatter.INSTANCE);
284 tm.sort(FOO, SortDir.ASC);
285 rows = tm.getRows();
286 int nr = rows.length;
287 for (int i = 0; i < nr; i++) {
288 String[] exp = SORTED_NAMES_AND_HEX[i];
289 String[] act = rows[i].getAsFormattedStrings();
290 assertArrayEquals(UNEX_SORT + i, exp, act);
291 }
292 }
293
294 private static final String[] FBZ = {FOO, BAR, ZOO};
295
296 @Test
297 public void getColumnIds() {
298 tm = new TableModel(FOO, BAR, ZOO);
299 assertArrayEquals("col IDs", FBZ, tm.getColumnIds());
300 }
Simon Hunt3ee7f742015-05-05 10:18:20 -0700301
302 @Test
Simon Hunt933b1a82015-05-04 19:07:24 -0700303 public void sortDirAsc() {
304 assertEquals("asc sort dir", SortDir.ASC, TableModel.sortDir("asc"));
305 }
306
307 @Test
308 public void sortDirDesc() {
309 assertEquals("desc sort dir", SortDir.DESC, TableModel.sortDir("desc"));
310 }
311
312 @Test
313 public void sortDirOther() {
314 assertEquals("other sort dir", SortDir.ASC, TableModel.sortDir("other"));
315 }
316
317 @Test
318 public void sortDirNull() {
319 assertEquals("null sort dir", SortDir.ASC, TableModel.sortDir(null));
320 }
321
Simon Hunt27bf0792015-05-07 10:50:29 -0700322
323 @Test
324 public void enumSort() {
325 tm = new TableModel(FOO);
326 tm.addRow().cell(FOO, StarWars.HAN_SOLO);
327 tm.addRow().cell(FOO, StarWars.C3PO);
328 tm.addRow().cell(FOO, StarWars.JABBA_THE_HUTT);
329 tm.addRow().cell(FOO, StarWars.LEIA_ORGANA);
330 tm.addRow().cell(FOO, StarWars.R2D2);
331 tm.addRow().cell(FOO, StarWars.LUKE_SKYWALKER);
332
333 tm.sort(FOO, SortDir.ASC);
334
335 // verify expected results
336 StarWars[] ordered = StarWars.values();
337 TableModel.Row[] rows = tm.getRows();
338 assertEquals("wrong length?", ordered.length, rows.length);
339 int nr = rows.length;
340 for (int i = 0; i < nr; i++) {
341 assertEquals(UNEX_SORT + i, ordered[i], rows[i].get(FOO));
342 }
343 }
Simon Hunte9828152015-05-01 17:54:25 -0700344}