blob: 7e3c651d4c0471274773d24e3a85e20aa7a91baf [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;
23import org.onosproject.ui.table.cell.IntComparator;
Simon Hunte9828152015-05-01 17:54:25 -070024
Simon Hunt933b1a82015-05-04 19:07:24 -070025import static org.junit.Assert.*;
Simon Hunte9828152015-05-01 17:54:25 -070026
27/**
28 * Unit tests for {@link TableModel}.
29 */
30public class TableModelTest {
31
Simon Hunt3ee7f742015-05-05 10:18:20 -070032 private static final String UNEX_SORT = "unexpected sort: index ";
Simon Hunt933b1a82015-05-04 19:07:24 -070033
Simon Hunte9828152015-05-01 17:54:25 -070034 private static final String FOO = "foo";
35 private static final String BAR = "bar";
Simon Hunte9828152015-05-01 17:54:25 -070036 private static final String ZOO = "zoo";
37
Simon Hunt3ee7f742015-05-05 10:18:20 -070038 private static class ParenFormatter implements CellFormatter {
Simon Hunte9828152015-05-01 17:54:25 -070039 @Override
40 public String format(Object value) {
41 return "(" + value + ")";
42 }
43 }
44
45 private TableModel tm;
Simon Hunt933b1a82015-05-04 19:07:24 -070046 private TableModel.Row[] rows;
47 private TableModel.Row row;
Simon Hunte9828152015-05-01 17:54:25 -070048 private CellFormatter fmt;
49
50 @Test(expected = NullPointerException.class)
51 public void guardAgainstNull() {
52 tm = new TableModel(null);
53 }
54
55 @Test(expected = IllegalArgumentException.class)
56 public void guardAgainstEmpty() {
57 tm = new TableModel();
58 }
59
60 @Test(expected = IllegalArgumentException.class)
61 public void guardAgainstDuplicateCols() {
62 tm = new TableModel(FOO, BAR, FOO);
63 }
64
65 @Test
66 public void basic() {
67 tm = new TableModel(FOO, BAR);
68 assertEquals("column count", 2, tm.columnCount());
69 assertEquals("row count", 0, tm.rowCount());
Simon Hunte9828152015-05-01 17:54:25 -070070 }
71
72 @Test
73 public void defaultFormatter() {
74 tm = new TableModel(FOO);
75 fmt = tm.getFormatter(FOO);
76 assertTrue("Wrong formatter", fmt instanceof DefaultCellFormatter);
77 }
78
79 @Test(expected = IllegalArgumentException.class)
80 public void formatterBadColumn() {
81 tm = new TableModel(FOO);
82 fmt = tm.getFormatter(BAR);
83 }
84
85 @Test
86 public void altFormatter() {
87 tm = new TableModel(FOO, BAR);
Simon Hunt3ee7f742015-05-05 10:18:20 -070088 tm.setFormatter(BAR, new ParenFormatter());
Simon Hunte9828152015-05-01 17:54:25 -070089
90 fmt = tm.getFormatter(FOO);
91 assertTrue("Wrong formatter", fmt instanceof DefaultCellFormatter);
92 assertEquals("Wrong result", "2", fmt.format(2));
93
94 fmt = tm.getFormatter(BAR);
Simon Hunt3ee7f742015-05-05 10:18:20 -070095 assertTrue("Wrong formatter", fmt instanceof ParenFormatter);
Simon Hunte9828152015-05-01 17:54:25 -070096 assertEquals("Wrong result", "(2)", fmt.format(2));
97 }
98
99 @Test
100 public void emptyRow() {
101 tm = new TableModel(FOO, BAR);
102 tm.addRow();
103 assertEquals("bad row count", 1, tm.rowCount());
104 }
105
106 @Test(expected = IllegalArgumentException.class)
107 public void rowBadColumn() {
108 tm = new TableModel(FOO, BAR);
109 tm.addRow().cell(ZOO, 2);
110 }
111
112 @Test(expected = NullPointerException.class)
113 public void rowNullValue() {
114 tm = new TableModel(FOO, BAR);
115 tm.addRow().cell(FOO, null);
116 }
117
118 @Test
119 public void simpleRow() {
120 tm = new TableModel(FOO, BAR);
121 tm.addRow().cell(FOO, 3).cell(BAR, true);
122 assertEquals("bad row count", 1, tm.rowCount());
Simon Hunt933b1a82015-05-04 19:07:24 -0700123 row = tm.getRows()[0];
124 assertEquals("bad cell", 3, row.get(FOO));
125 assertEquals("bad cell", true, row.get(BAR));
Simon Hunte9828152015-05-01 17:54:25 -0700126 }
Simon Hunt933b1a82015-05-04 19:07:24 -0700127
128
129 private static final String ONE = "one";
130 private static final String TWO = "two";
131 private static final String THREE = "three";
132 private static final String FOUR = "four";
133 private static final String ELEVEN = "eleven";
134 private static final String TWELVE = "twelve";
135 private static final String TWENTY = "twenty";
136 private static final String THIRTY = "thirty";
137
138 private static final String[] NAMES = {
139 FOUR,
140 THREE,
141 TWO,
142 ONE,
143 ELEVEN,
144 TWELVE,
145 THIRTY,
146 TWENTY,
147 };
148 private static final String[] SORTED_NAMES = {
149 ELEVEN,
150 FOUR,
151 ONE,
152 THIRTY,
153 THREE,
154 TWELVE,
155 TWENTY,
156 TWO,
157 };
158
159 private static final int[] NUMBERS = {
160 4, 3, 2, 1, 11, 12, 30, 20
161 };
162
163 private static final int[] SORTED_NUMBERS = {
164 1, 2, 3, 4, 11, 12, 20, 30
165 };
166
Simon Hunt3ee7f742015-05-05 10:18:20 -0700167 private static final String[] SORTED_HEX = {
168 "0x1", "0x2", "0x3", "0x4", "0xb", "0xc", "0x14", "0x1e"
169 };
170
Simon Hunt933b1a82015-05-04 19:07:24 -0700171 @Test
172 public void verifyTestData() {
173 // not a unit test per se, but will fail if we don't keep
174 // the three test arrays in sync
175 int nalen = NAMES.length;
176 int snlen = SORTED_NAMES.length;
177 int nulen = NUMBERS.length;
178
179 if (nalen != snlen || nalen != nulen) {
180 fail("test data array size discrepancy");
181 }
182 }
183
184 private void initUnsortedTable() {
185 tm = new TableModel(FOO, BAR);
186 for (int i = 0; i < NAMES.length; i++) {
187 tm.addRow().cell(FOO, NAMES[i]).cell(BAR, NUMBERS[i]);
188 }
189 }
190
191 @Test
192 public void tableStringSort() {
193 initUnsortedTable();
194
195 // sort by name
196 tm.sort(FOO, SortDir.ASC);
197
198 // verify results
199 rows = tm.getRows();
200 int nr = rows.length;
201 assertEquals("row count", NAMES.length, nr);
202 for (int i = 0; i < nr; i++) {
Simon Hunt3ee7f742015-05-05 10:18:20 -0700203 assertEquals(UNEX_SORT + i, SORTED_NAMES[i], rows[i].get(FOO));
Simon Hunt933b1a82015-05-04 19:07:24 -0700204 }
205
206 // now the other way
207 tm.sort(FOO, SortDir.DESC);
208
209 // verify results
210 rows = tm.getRows();
211 nr = rows.length;
212 assertEquals("row count", NAMES.length, nr);
213 for (int i = 0; i < nr; i++) {
Simon Hunt3ee7f742015-05-05 10:18:20 -0700214 assertEquals(UNEX_SORT + i,
Simon Hunt933b1a82015-05-04 19:07:24 -0700215 SORTED_NAMES[nr - 1 - i], rows[i].get(FOO));
216 }
217 }
218
219 @Test
220 public void tableNumberSort() {
221 initUnsortedTable();
222
223 // first, tell the table to use an integer-based comparator
Simon Hunt3d1b0652015-05-05 17:27:24 -0700224 tm.setComparator(BAR, IntComparator.INSTANCE);
Simon Hunt933b1a82015-05-04 19:07:24 -0700225
226 // 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
254 // set integer-based comparator and hex formatter
Simon Hunt3d1b0652015-05-05 17:27:24 -0700255 tm.setComparator(BAR, IntComparator.INSTANCE);
256 tm.setFormatter(BAR, HexFormatter.INSTANCE);
Simon Hunt3ee7f742015-05-05 10:18:20 -0700257
258 // sort by number
259 tm.sort(BAR, SortDir.ASC);
260
261 // verify results
262 rows = tm.getRows();
263 int nr = rows.length;
264 assertEquals("row count", SORTED_HEX.length, nr);
265 for (int i = 0; i < nr; i++) {
266 assertEquals(UNEX_SORT + i, SORTED_HEX[i], rows[i].getAsString(BAR));
267 }
268 }
269
Simon Hunt9ffbd8d2015-05-06 12:02:32 -0700270 private static final String[][] SORTED_NAMES_AND_HEX = {
271 {ELEVEN, "0xb"},
272 {FOUR, "0x4"},
273 {ONE, "0x1"},
274 {THIRTY, "0x1e"},
275 {THREE, "0x3"},
276 {TWELVE, "0xc"},
277 {TWENTY, "0x14"},
278 {TWO, "0x2"},
279 };
280
281 @Test
282 public void sortAndFormatTwo() {
283 initUnsortedTable();
284 tm.setFormatter(BAR, HexFormatter.INSTANCE);
285 tm.sort(FOO, SortDir.ASC);
286 rows = tm.getRows();
287 int nr = rows.length;
288 for (int i = 0; i < nr; i++) {
289 String[] exp = SORTED_NAMES_AND_HEX[i];
290 String[] act = rows[i].getAsFormattedStrings();
291 assertArrayEquals(UNEX_SORT + i, exp, act);
292 }
293 }
294
295 private static final String[] FBZ = {FOO, BAR, ZOO};
296
297 @Test
298 public void getColumnIds() {
299 tm = new TableModel(FOO, BAR, ZOO);
300 assertArrayEquals("col IDs", FBZ, tm.getColumnIds());
301 }
Simon Hunt3ee7f742015-05-05 10:18:20 -0700302
303 @Test
Simon Hunt933b1a82015-05-04 19:07:24 -0700304 public void sortDirAsc() {
305 assertEquals("asc sort dir", SortDir.ASC, TableModel.sortDir("asc"));
306 }
307
308 @Test
309 public void sortDirDesc() {
310 assertEquals("desc sort dir", SortDir.DESC, TableModel.sortDir("desc"));
311 }
312
313 @Test
314 public void sortDirOther() {
315 assertEquals("other sort dir", SortDir.ASC, TableModel.sortDir("other"));
316 }
317
318 @Test
319 public void sortDirNull() {
320 assertEquals("null sort dir", SortDir.ASC, TableModel.sortDir(null));
321 }
322
Simon Hunte9828152015-05-01 17:54:25 -0700323}