1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.commons.collections;
18
19 import static org.apache.juneau.junit.bct.BctAssertions.*;
20 import static org.junit.jupiter.api.Assertions.*;
21
22 import java.util.*;
23
24 import org.apache.juneau.*;
25 import org.junit.jupiter.api.*;
26
27 class FluentList_Test extends TestBase {
28
29
30
31
32
33 @Test
34 void a01_addSingleElement() {
35 var list = new FluentList<>(new ArrayList<String>());
36 list.a("item1").a("item2").a("item3");
37
38 assertSize(3, list);
39 assertEquals("item1", list.get(0));
40 assertEquals("item2", list.get(1));
41 assertEquals("item3", list.get(2));
42 }
43
44 @Test
45 void a02_addSingleElement_returnsThis() {
46 var list = new FluentList<>(new ArrayList<String>());
47 var result = list.a("item1");
48
49 assertSame(list, result);
50 }
51
52 @Test
53 void a03_addSingleElement_nullValue() {
54 var list = new FluentList<>(new ArrayList<String>());
55 list.a("item1").a(null).a("item3");
56
57 assertSize(3, list);
58 assertEquals("item1", list.get(0));
59 assertNull(list.get(1));
60 assertEquals("item3", list.get(2));
61 }
62
63
64
65
66
67 @Test
68 void b01_addCollection() {
69 var list = new FluentList<>(new ArrayList<String>());
70 var other = List.of("item1", "item2", "item3");
71 list.aa(other);
72
73 assertSize(3, list);
74 assertEquals("item1", list.get(0));
75 assertEquals("item2", list.get(1));
76 assertEquals("item3", list.get(2));
77 }
78
79 @Test
80 void b02_addCollection_returnsThis() {
81 var list = new FluentList<>(new ArrayList<String>());
82 var other = List.of("item1", "item2");
83 var result = list.aa(other);
84
85 assertSame(list, result);
86 }
87
88 @Test
89 void b03_addCollection_nullCollection() {
90 var list = new FluentList<>(new ArrayList<String>());
91 list.a("item1");
92 list.aa((Collection<String>)null);
93 list.a("item2");
94
95 assertSize(2, list);
96 assertEquals("item1", list.get(0));
97 assertEquals("item2", list.get(1));
98 }
99
100 @Test
101 void b04_addCollection_emptyCollection() {
102 var list = new FluentList<>(new ArrayList<String>());
103 list.a("item1");
104 list.aa(List.of());
105 list.a("item2");
106
107 assertSize(2, list);
108 assertEquals("item1", list.get(0));
109 assertEquals("item2", list.get(1));
110 }
111
112 @Test
113 void b05_addCollection_multipleCalls() {
114 var list = new FluentList<>(new ArrayList<String>());
115 list.aa(List.of("item1", "item2"));
116 list.aa(List.of("item3", "item4"));
117
118 assertSize(4, list);
119 assertEquals("item1", list.get(0));
120 assertEquals("item2", list.get(1));
121 assertEquals("item3", list.get(2));
122 assertEquals("item4", list.get(3));
123 }
124
125
126
127
128
129 @Test
130 void c01_ai_conditionTrue() {
131 var list = new FluentList<>(new ArrayList<String>());
132 list.a("item1").ai(true, "item2").a("item3");
133
134 assertSize(3, list);
135 assertEquals("item1", list.get(0));
136 assertEquals("item2", list.get(1));
137 assertEquals("item3", list.get(2));
138 }
139
140 @Test
141 void c02_ai_conditionFalse() {
142 var list = new FluentList<>(new ArrayList<String>());
143 list.a("item1").ai(false, "item2").a("item3");
144
145 assertSize(2, list);
146 assertEquals("item1", list.get(0));
147 assertEquals("item3", list.get(1));
148 }
149
150 @Test
151 void c03_ai_returnsThis() {
152 var list = new FluentList<>(new ArrayList<String>());
153 var result1 = list.ai(true, "item1");
154 var result2 = list.ai(false, "item2");
155
156 assertSame(list, result1);
157 assertSame(list, result2);
158 }
159
160 @Test
161 void c04_ai_conditionalBuilding() {
162 boolean includeDebug = true;
163 boolean includeTest = false;
164
165 var list = new FluentList<>(new ArrayList<String>())
166 .a("basic")
167 .ai(includeDebug, "debug")
168 .ai(includeTest, "test");
169
170 assertSize(2, list);
171 assertTrue(list.contains("basic"));
172 assertTrue(list.contains("debug"));
173 assertFalse(list.contains("test"));
174 }
175
176
177
178
179
180 @Test
181 void d01_methodChaining() {
182 var list = new FluentList<>(new ArrayList<String>())
183 .a("item1")
184 .a("item2")
185 .ai(true, "item3")
186 .ai(false, "item4")
187 .aa(List.of("item5", "item6"));
188
189 assertSize(5, list);
190 assertEquals("item1", list.get(0));
191 assertEquals("item2", list.get(1));
192 assertEquals("item3", list.get(2));
193 assertEquals("item5", list.get(3));
194 assertEquals("item6", list.get(4));
195 }
196
197
198
199
200
201 @Test
202 void e01_listInterface_get() {
203 var list = new FluentList<>(new ArrayList<String>());
204 list.a("item1").a("item2").a("item3");
205
206 assertEquals("item1", list.get(0));
207 assertEquals("item2", list.get(1));
208 assertEquals("item3", list.get(2));
209 }
210
211 @Test
212 void e02_listInterface_size() {
213 var list = new FluentList<>(new ArrayList<String>());
214 assertEquals(0, list.size());
215
216 list.a("item1");
217 assertEquals(1, list.size());
218
219 list.a("item2");
220 assertEquals(2, list.size());
221 }
222
223 @Test
224 void e03_listInterface_add() {
225 var list = new FluentList<>(new ArrayList<String>());
226 assertTrue(list.add("item1"));
227 assertTrue(list.add("item2"));
228
229 assertSize(2, list);
230 assertEquals("item1", list.get(0));
231 assertEquals("item2", list.get(1));
232 }
233
234 @Test
235 void e04_listInterface_addAtIndex() {
236 var list = new FluentList<>(new ArrayList<String>());
237 list.a("item1").a("item3");
238 list.add(1, "item2");
239
240 assertSize(3, list);
241 assertEquals("item1", list.get(0));
242 assertEquals("item2", list.get(1));
243 assertEquals("item3", list.get(2));
244 }
245
246 @Test
247 void e05_listInterface_addAll() {
248 var list = new FluentList<>(new ArrayList<String>());
249 list.a("item1");
250 assertTrue(list.addAll(List.of("item2", "item3")));
251
252 assertSize(3, list);
253 assertEquals("item1", list.get(0));
254 assertEquals("item2", list.get(1));
255 assertEquals("item3", list.get(2));
256 }
257
258 @Test
259 void e05b_listInterface_addAllAtIndex() {
260 var list = new FluentList<>(new ArrayList<String>());
261 list.a("item1").a("item4");
262 assertTrue(list.addAll(1, List.of("item2", "item3")));
263
264 assertSize(4, list);
265 assertEquals("item1", list.get(0));
266 assertEquals("item2", list.get(1));
267 assertEquals("item3", list.get(2));
268 assertEquals("item4", list.get(3));
269 }
270
271 @Test
272 void e06_listInterface_remove() {
273 var list = new FluentList<>(new ArrayList<String>());
274 list.a("item1").a("item2").a("item3");
275
276 assertTrue(list.remove("item2"));
277 assertSize(2, list);
278 assertEquals("item1", list.get(0));
279 assertEquals("item3", list.get(1));
280 }
281
282 @Test
283 void e07_listInterface_removeAtIndex() {
284 var list = new FluentList<>(new ArrayList<String>());
285 list.a("item1").a("item2").a("item3");
286
287 assertEquals("item2", list.remove(1));
288 assertSize(2, list);
289 assertEquals("item1", list.get(0));
290 assertEquals("item3", list.get(1));
291 }
292
293 @Test
294 void e08_listInterface_set() {
295 var list = new FluentList<>(new ArrayList<String>());
296 list.a("item1").a("item2").a("item3");
297
298 assertEquals("item2", list.set(1, "item2-updated"));
299 assertEquals("item2-updated", list.get(1));
300 }
301
302 @Test
303 void e09_listInterface_indexOf() {
304 var list = new FluentList<>(new ArrayList<String>());
305 list.a("item1").a("item2").a("item1");
306
307 assertEquals(0, list.indexOf("item1"));
308 assertEquals(1, list.indexOf("item2"));
309 assertEquals(-1, list.indexOf("item3"));
310 }
311
312 @Test
313 void e10_listInterface_lastIndexOf() {
314 var list = new FluentList<>(new ArrayList<String>());
315 list.a("item1").a("item2").a("item1");
316
317 assertEquals(2, list.lastIndexOf("item1"));
318 assertEquals(1, list.lastIndexOf("item2"));
319 assertEquals(-1, list.lastIndexOf("item3"));
320 }
321
322 @Test
323 void e11_listInterface_contains() {
324 var list = new FluentList<>(new ArrayList<String>());
325 list.a("item1").a("item2");
326
327 assertTrue(list.contains("item1"));
328 assertTrue(list.contains("item2"));
329 assertFalse(list.contains("item3"));
330 }
331
332 @Test
333 void e12_listInterface_containsAll() {
334 var list = new FluentList<>(new ArrayList<String>());
335 list.a("item1").a("item2").a("item3");
336
337 assertTrue(list.containsAll(List.of("item1", "item2")));
338 assertTrue(list.containsAll(List.of("item1", "item2", "item3")));
339 assertFalse(list.containsAll(List.of("item1", "item4")));
340 }
341
342 @Test
343 void e13_listInterface_isEmpty() {
344 var list = new FluentList<>(new ArrayList<String>());
345 assertTrue(list.isEmpty());
346
347 list.a("item1");
348 assertFalse(list.isEmpty());
349 }
350
351 @Test
352 void e14_listInterface_clear() {
353 var list = new FluentList<>(new ArrayList<String>());
354 list.a("item1").a("item2").a("item3");
355
356 list.clear();
357 assertTrue(list.isEmpty());
358 assertSize(0, list);
359 }
360
361 @Test
362 void e15_listInterface_iterator() {
363 var list = new FluentList<>(new ArrayList<String>());
364 list.a("item1").a("item2").a("item3");
365
366 var found = new ArrayList<String>();
367 for (var item : list) {
368 found.add(item);
369 }
370
371 assertEquals(List.of("item1", "item2", "item3"), found);
372 }
373
374 @Test
375 void e16_listInterface_listIterator() {
376 var list = new FluentList<>(new ArrayList<String>());
377 list.a("item1").a("item2").a("item3");
378
379 var it = list.listIterator();
380 assertTrue(it.hasNext());
381 assertEquals("item1", it.next());
382 assertEquals("item2", it.next());
383 assertTrue(it.hasPrevious());
384 assertEquals("item2", it.previous());
385 }
386
387 @Test
388 void e17_listInterface_subList() {
389 var list = new FluentList<>(new ArrayList<String>());
390 list.a("item1").a("item2").a("item3").a("item4");
391
392 var subList = list.subList(1, 3);
393 assertSize(2, subList);
394 assertEquals("item2", subList.get(0));
395 assertEquals("item3", subList.get(1));
396 }
397
398 @Test
399 void e18_listInterface_toArray() {
400 var list = new FluentList<>(new ArrayList<String>());
401 list.a("item1").a("item2").a("item3");
402
403 var array = list.toArray();
404 assertEquals(3, array.length);
405 assertEquals("item1", array[0]);
406 assertEquals("item2", array[1]);
407 assertEquals("item3", array[2]);
408 }
409
410 @Test
411 void e19_listInterface_toArrayTyped() {
412 var list = new FluentList<>(new ArrayList<String>());
413 list.a("item1").a("item2").a("item3");
414
415 var array = list.toArray(new String[0]);
416 assertEquals(3, array.length);
417 assertEquals("item1", array[0]);
418 assertEquals("item2", array[1]);
419 assertEquals("item3", array[2]);
420 }
421
422
423
424
425
426 @Test
427 void f01_linkedList() {
428 var list = new FluentList<>(new LinkedList<String>());
429 list.a("item1").a("item2").a("item3");
430
431 assertSize(3, list);
432 }
433
434 @Test
435 void f02_vector() {
436 var list = new FluentList<>(new Vector<String>());
437 list.a("item1").a("item2").a("item3");
438
439 assertSize(3, list);
440 }
441
442
443
444
445
446 @Test
447 void g01_emptyList() {
448 var list = new FluentList<>(new ArrayList<String>());
449
450 assertTrue(list.isEmpty());
451 assertSize(0, list);
452 assertFalse(list.contains("anything"));
453 }
454
455 @Test
456 void g02_removeAll() {
457 var list = new FluentList<>(new ArrayList<String>());
458 list.a("item1").a("item2").a("item3").a("item4");
459
460 assertTrue(list.removeAll(List.of("item2", "item4")));
461 assertSize(2, list);
462 assertEquals("item1", list.get(0));
463 assertEquals("item3", list.get(1));
464 }
465
466 @Test
467 void g03_retainAll() {
468 var list = new FluentList<>(new ArrayList<String>());
469 list.a("item1").a("item2").a("item3").a("item4");
470
471 assertTrue(list.retainAll(List.of("item2", "item4")));
472 assertSize(2, list);
473 assertEquals("item2", list.get(0));
474 assertEquals("item4", list.get(1));
475 }
476
477
478
479
480
481 @Test
482 void w01_toString_delegatesToUnderlyingList() {
483 var list = new FluentList<>(new ArrayList<String>());
484 list.a("item1").a("item2").a("item3");
485
486 var underlyingList = new ArrayList<String>();
487 underlyingList.add("item1");
488 underlyingList.add("item2");
489 underlyingList.add("item3");
490
491 assertEquals(underlyingList.toString(), list.toString());
492 }
493
494 @Test
495 void w02_equals_delegatesToUnderlyingList() {
496 var list1 = new FluentList<>(new ArrayList<String>());
497 list1.a("item1").a("item2").a("item3");
498
499 var list2 = new ArrayList<String>();
500 list2.add("item1");
501 list2.add("item2");
502 list2.add("item3");
503
504 assertTrue(list1.equals(list2));
505 assertTrue(list2.equals(list1));
506 }
507
508 @Test
509 void w03_equals_differentContents_returnsFalse() {
510 var list1 = new FluentList<>(new ArrayList<String>());
511 list1.a("item1").a("item2");
512
513 var list2 = new ArrayList<String>();
514 list2.add("item1");
515 list2.add("item3");
516
517 assertFalse(list1.equals(list2));
518 assertFalse(list2.equals(list1));
519 }
520
521 @Test
522 void w04_hashCode_delegatesToUnderlyingList() {
523 var list = new FluentList<>(new ArrayList<String>());
524 list.a("item1").a("item2").a("item3");
525
526 var underlyingList = new ArrayList<String>();
527 underlyingList.add("item1");
528 underlyingList.add("item2");
529 underlyingList.add("item3");
530
531 assertEquals(underlyingList.hashCode(), list.hashCode());
532 }
533 }
534