1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.commons.lang3;
20
21 import static org.junit.jupiter.api.Assertions.assertEquals;
22 import static org.junit.jupiter.api.Assertions.assertFalse;
23 import static org.junit.jupiter.api.Assertions.assertNull;
24 import static org.junit.jupiter.api.Assertions.assertThrows;
25 import static org.junit.jupiter.api.Assertions.assertTrue;
26
27 import java.util.ArrayList;
28 import java.util.Arrays;
29 import java.util.EnumSet;
30 import java.util.HashMap;
31 import java.util.List;
32 import java.util.Map;
33 import java.util.function.Function;
34
35 import org.junit.jupiter.api.Assertions;
36 import org.junit.jupiter.api.Test;
37
38 enum Enum64 {
39 A00, A01, A02, A03, A04, A05, A06, A07, A08, A09, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A20, A21, A22,
40 A23, A24, A25, A26, A27, A28, A29, A30, A31, A32, A33, A34, A35, A36, A37, A38, A39, A40, A41, A42, A43, A44, A45,
41 A46, A47, A48, A49, A50, A51, A52, A53, A54, A55, A56, A57, A58, A59, A60, A61, A62, A63
42 }
43
44
45
46 public class EnumUtilsTest extends AbstractLangTest {
47
48 private void assertArrayEquals(final long[] actual, final long... expected) {
49 Assertions.assertArrayEquals(expected, actual);
50 }
51
52 @Test
53 public void test_generateBitVector() {
54 assertEquals(0L, EnumUtils.generateBitVector(Traffic.class, EnumSet.noneOf(Traffic.class)));
55 assertEquals(1L, EnumUtils.generateBitVector(Traffic.class, EnumSet.of(Traffic.RED)));
56 assertEquals(2L, EnumUtils.generateBitVector(Traffic.class, EnumSet.of(Traffic.AMBER)));
57 assertEquals(4L, EnumUtils.generateBitVector(Traffic.class, EnumSet.of(Traffic.GREEN)));
58 assertEquals(3L, EnumUtils.generateBitVector(Traffic.class, EnumSet.of(Traffic.RED, Traffic.AMBER)));
59 assertEquals(5L, EnumUtils.generateBitVector(Traffic.class, EnumSet.of(Traffic.RED, Traffic.GREEN)));
60 assertEquals(6L, EnumUtils.generateBitVector(Traffic.class, EnumSet.of(Traffic.AMBER, Traffic.GREEN)));
61 assertEquals(7L,
62 EnumUtils.generateBitVector(Traffic.class, EnumSet.of(Traffic.RED, Traffic.AMBER, Traffic.GREEN)));
63
64
65 assertEquals(1L << 31, EnumUtils.generateBitVector(Enum64.class, EnumSet.of(Enum64.A31)));
66 assertEquals(1L << 32, EnumUtils.generateBitVector(Enum64.class, EnumSet.of(Enum64.A32)));
67 assertEquals(1L << 63, EnumUtils.generateBitVector(Enum64.class, EnumSet.of(Enum64.A63)));
68 assertEquals(Long.MIN_VALUE, EnumUtils.generateBitVector(Enum64.class, EnumSet.of(Enum64.A63)));
69 }
70
71 @Test
72 public void test_generateBitVector_longClass() {
73 assertThrows(IllegalArgumentException.class,
74 () -> EnumUtils.generateBitVector(TooMany.class, EnumSet.of(TooMany.A1)));
75 }
76
77 @Test
78 public void test_generateBitVector_longClassWithArray() {
79 assertThrows(IllegalArgumentException.class, () -> EnumUtils.generateBitVector(TooMany.class, TooMany.A1));
80 }
81
82 @SuppressWarnings("unchecked")
83 @Test
84 public void test_generateBitVector_nonEnumClass() {
85 @SuppressWarnings("rawtypes")
86 final Class rawType = Object.class;
87 @SuppressWarnings("rawtypes")
88 final List rawList = new ArrayList();
89 assertThrows(IllegalArgumentException.class, () -> EnumUtils.generateBitVector(rawType, rawList));
90 }
91
92 @SuppressWarnings("unchecked")
93 @Test
94 public void test_generateBitVector_nonEnumClassWithArray() {
95 @SuppressWarnings("rawtypes")
96 final Class rawType = Object.class;
97 assertThrows(IllegalArgumentException.class, () -> EnumUtils.generateBitVector(rawType));
98 }
99
100 @Test
101 public void test_generateBitVector_nullArray() {
102 assertThrows(NullPointerException.class, () -> EnumUtils.generateBitVector(Traffic.class, (Traffic[]) null));
103 }
104
105 @Test
106 public void test_generateBitVector_nullArrayElement() {
107 assertThrows(IllegalArgumentException.class,
108 () -> EnumUtils.generateBitVector(Traffic.class, Traffic.RED, null));
109 }
110
111 @Test
112 public void test_generateBitVector_nullClass() {
113 assertThrows(NullPointerException.class, () -> EnumUtils.generateBitVector(null, EnumSet.of(Traffic.RED)));
114 }
115
116 @Test
117 public void test_generateBitVector_nullClassWithArray() {
118 assertThrows(NullPointerException.class, () -> EnumUtils.generateBitVector(null, Traffic.RED));
119 }
120
121 @Test
122 public void test_generateBitVector_nullElement() {
123 assertThrows(NullPointerException.class,
124 () -> EnumUtils.generateBitVector(Traffic.class, Arrays.asList(Traffic.RED, null)));
125 }
126
127 @Test
128 public void test_generateBitVector_nullIterable() {
129 assertThrows(NullPointerException.class,
130 () -> EnumUtils.generateBitVector(Traffic.class, (Iterable<Traffic>) null));
131 }
132
133 @Test
134 public void test_generateBitVectorFromArray() {
135 assertEquals(0L, EnumUtils.generateBitVector(Traffic.class));
136 assertEquals(1L, EnumUtils.generateBitVector(Traffic.class, Traffic.RED));
137 assertEquals(2L, EnumUtils.generateBitVector(Traffic.class, Traffic.AMBER));
138 assertEquals(4L, EnumUtils.generateBitVector(Traffic.class, Traffic.GREEN));
139 assertEquals(3L, EnumUtils.generateBitVector(Traffic.class, Traffic.RED, Traffic.AMBER));
140 assertEquals(5L, EnumUtils.generateBitVector(Traffic.class, Traffic.RED, Traffic.GREEN));
141 assertEquals(6L, EnumUtils.generateBitVector(Traffic.class, Traffic.AMBER, Traffic.GREEN));
142 assertEquals(7L, EnumUtils.generateBitVector(Traffic.class, Traffic.RED, Traffic.AMBER, Traffic.GREEN));
143
144 assertEquals(7L,
145 EnumUtils.generateBitVector(Traffic.class, Traffic.RED, Traffic.AMBER, Traffic.GREEN, Traffic.GREEN));
146
147
148 assertEquals(1L << 31, EnumUtils.generateBitVector(Enum64.class, Enum64.A31));
149 assertEquals(1L << 32, EnumUtils.generateBitVector(Enum64.class, Enum64.A32));
150 assertEquals(1L << 63, EnumUtils.generateBitVector(Enum64.class, Enum64.A63));
151 assertEquals(Long.MIN_VALUE, EnumUtils.generateBitVector(Enum64.class, Enum64.A63));
152 }
153
154 @Test
155 public void test_generateBitVectors() {
156 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class, EnumSet.noneOf(Traffic.class)), 0L);
157 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class, EnumSet.of(Traffic.RED)), 1L);
158 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class, EnumSet.of(Traffic.AMBER)), 2L);
159 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class, EnumSet.of(Traffic.GREEN)), 4L);
160 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class, EnumSet.of(Traffic.RED, Traffic.AMBER)), 3L);
161 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class, EnumSet.of(Traffic.RED, Traffic.GREEN)), 5L);
162 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class, EnumSet.of(Traffic.AMBER, Traffic.GREEN)), 6L);
163 assertArrayEquals(
164 EnumUtils.generateBitVectors(Traffic.class, EnumSet.of(Traffic.RED, Traffic.AMBER, Traffic.GREEN)), 7L);
165
166
167 assertArrayEquals(EnumUtils.generateBitVectors(Enum64.class, EnumSet.of(Enum64.A31)), 1L << 31);
168 assertArrayEquals(EnumUtils.generateBitVectors(Enum64.class, EnumSet.of(Enum64.A32)), 1L << 32);
169 assertArrayEquals(EnumUtils.generateBitVectors(Enum64.class, EnumSet.of(Enum64.A63)), 1L << 63);
170 assertArrayEquals(EnumUtils.generateBitVectors(Enum64.class, EnumSet.of(Enum64.A63)), Long.MIN_VALUE);
171
172
173 assertArrayEquals(EnumUtils.generateBitVectors(TooMany.class, EnumSet.of(TooMany.M2)), 1L, 0L);
174 assertArrayEquals(EnumUtils.generateBitVectors(TooMany.class, EnumSet.of(TooMany.L2, TooMany.M2)), 1L,
175 1L << 63);
176 }
177
178 @SuppressWarnings("unchecked")
179 @Test
180 public void test_generateBitVectors_nonEnumClass() {
181 @SuppressWarnings("rawtypes")
182 final Class rawType = Object.class;
183 @SuppressWarnings("rawtypes")
184 final List rawList = new ArrayList();
185 assertThrows(IllegalArgumentException.class, () -> EnumUtils.generateBitVectors(rawType, rawList));
186 }
187
188 @SuppressWarnings("unchecked")
189 @Test
190 public void test_generateBitVectors_nonEnumClassWithArray() {
191 @SuppressWarnings("rawtypes")
192 final Class rawType = Object.class;
193 assertThrows(IllegalArgumentException.class, () -> EnumUtils.generateBitVectors(rawType));
194 }
195
196 @Test
197 public void test_generateBitVectors_nullArray() {
198 assertThrows(NullPointerException.class, () -> EnumUtils.generateBitVectors(Traffic.class, (Traffic[]) null));
199 }
200
201 @Test
202 public void test_generateBitVectors_nullArrayElement() {
203 assertThrows(IllegalArgumentException.class,
204 () -> EnumUtils.generateBitVectors(Traffic.class, Traffic.RED, null));
205 }
206
207 @Test
208 public void test_generateBitVectors_nullClass() {
209 assertThrows(NullPointerException.class, () -> EnumUtils.generateBitVectors(null, EnumSet.of(Traffic.RED)));
210 }
211
212 @Test
213 public void test_generateBitVectors_nullClassWithArray() {
214 assertThrows(NullPointerException.class, () -> EnumUtils.generateBitVectors(null, Traffic.RED));
215 }
216
217 @Test
218 public void test_generateBitVectors_nullElement() {
219 assertThrows(NullPointerException.class,
220 () -> EnumUtils.generateBitVectors(Traffic.class, Arrays.asList(Traffic.RED, null)));
221 }
222
223 @Test
224 public void test_generateBitVectors_nullIterable() {
225 assertThrows(NullPointerException.class, () -> EnumUtils.generateBitVectors(null, (Iterable<Traffic>) null));
226 }
227
228 @Test
229 public void test_generateBitVectorsFromArray() {
230 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class), 0L);
231 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class, Traffic.RED), 1L);
232 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class, Traffic.AMBER), 2L);
233 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class, Traffic.GREEN), 4L);
234 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class, Traffic.RED, Traffic.AMBER), 3L);
235 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class, Traffic.RED, Traffic.GREEN), 5L);
236 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class, Traffic.AMBER, Traffic.GREEN), 6L);
237 assertArrayEquals(EnumUtils.generateBitVectors(Traffic.class, Traffic.RED, Traffic.AMBER, Traffic.GREEN), 7L);
238
239 assertArrayEquals(
240 EnumUtils.generateBitVectors(Traffic.class, Traffic.RED, Traffic.AMBER, Traffic.GREEN, Traffic.GREEN), 7L);
241
242
243 assertArrayEquals(EnumUtils.generateBitVectors(Enum64.class, Enum64.A31), 1L << 31);
244 assertArrayEquals(EnumUtils.generateBitVectors(Enum64.class, Enum64.A32), 1L << 32);
245 assertArrayEquals(EnumUtils.generateBitVectors(Enum64.class, Enum64.A63), 1L << 63);
246 assertArrayEquals(EnumUtils.generateBitVectors(Enum64.class, Enum64.A63), Long.MIN_VALUE);
247
248
249 assertArrayEquals(EnumUtils.generateBitVectors(TooMany.class, TooMany.M2), 1L, 0L);
250 assertArrayEquals(EnumUtils.generateBitVectors(TooMany.class, TooMany.L2, TooMany.M2), 1L, 1L << 63);
251
252 }
253
254 @Test
255 public void test_getEnum() {
256 assertEquals(Traffic.RED, EnumUtils.getEnum(Traffic.class, "RED"));
257 assertEquals(Traffic.AMBER, EnumUtils.getEnum(Traffic.class, "AMBER"));
258 assertEquals(Traffic.GREEN, EnumUtils.getEnum(Traffic.class, "GREEN"));
259 assertNull(EnumUtils.getEnum(Traffic.class, "PURPLE"));
260 assertNull(EnumUtils.getEnum(Traffic.class, null));
261 }
262
263 @Test
264 public void test_getEnum_defaultEnum() {
265 assertEquals(Traffic.RED, EnumUtils.getEnum(Traffic.class, "RED", Traffic.AMBER));
266 assertEquals(Traffic.AMBER, EnumUtils.getEnum(Traffic.class, "AMBER", Traffic.GREEN));
267 assertEquals(Traffic.GREEN, EnumUtils.getEnum(Traffic.class, "GREEN", Traffic.RED));
268 assertEquals(Traffic.AMBER, EnumUtils.getEnum(Traffic.class, "PURPLE", Traffic.AMBER));
269 assertEquals(Traffic.GREEN, EnumUtils.getEnum(Traffic.class, "PURPLE", Traffic.GREEN));
270 assertEquals(Traffic.RED, EnumUtils.getEnum(Traffic.class, "PURPLE", Traffic.RED));
271 assertEquals(Traffic.AMBER, EnumUtils.getEnum(Traffic.class, null, Traffic.AMBER));
272 assertEquals(Traffic.GREEN, EnumUtils.getEnum(Traffic.class, null, Traffic.GREEN));
273 assertEquals(Traffic.RED, EnumUtils.getEnum(Traffic.class, null, Traffic.RED));
274 assertNull(EnumUtils.getEnum(Traffic.class, "PURPLE", null));
275 }
276
277
278
279
280 @SuppressWarnings("unchecked")
281 @Test
282 public void test_getEnum_nonEnumClass() {
283 @SuppressWarnings("rawtypes")
284 final Class rawType = Object.class;
285 assertNull(EnumUtils.getEnum(rawType, "rawType"));
286 }
287
288 @Test
289 public void test_getEnum_nullClass() {
290 assertThrows(NullPointerException.class, () -> EnumUtils.getEnum((Class<Traffic>) null, "PURPLE"));
291 }
292
293 @Test
294 public void test_getEnumIgnoreCase() {
295 assertEquals(Traffic.RED, EnumUtils.getEnumIgnoreCase(Traffic.class, "red"));
296 assertEquals(Traffic.AMBER, EnumUtils.getEnumIgnoreCase(Traffic.class, "Amber"));
297 assertEquals(Traffic.GREEN, EnumUtils.getEnumIgnoreCase(Traffic.class, "grEEn"));
298 assertNull(EnumUtils.getEnumIgnoreCase(Traffic.class, "purple"));
299 assertNull(EnumUtils.getEnumIgnoreCase(Traffic.class, null));
300 }
301
302 @Test
303 public void test_getEnumIgnoreCase_defaultEnum() {
304 assertEquals(Traffic.RED, EnumUtils.getEnumIgnoreCase(Traffic.class, "red", Traffic.AMBER));
305 assertEquals(Traffic.AMBER, EnumUtils.getEnumIgnoreCase(Traffic.class, "Amber", Traffic.GREEN));
306 assertEquals(Traffic.GREEN, EnumUtils.getEnumIgnoreCase(Traffic.class, "grEEn", Traffic.RED));
307 assertEquals(Traffic.AMBER, EnumUtils.getEnumIgnoreCase(Traffic.class, "PURPLE", Traffic.AMBER));
308 assertEquals(Traffic.GREEN, EnumUtils.getEnumIgnoreCase(Traffic.class, "purple", Traffic.GREEN));
309 assertEquals(Traffic.RED, EnumUtils.getEnumIgnoreCase(Traffic.class, "pUrPlE", Traffic.RED));
310 assertEquals(Traffic.AMBER, EnumUtils.getEnumIgnoreCase(Traffic.class, null, Traffic.AMBER));
311 assertEquals(Traffic.GREEN, EnumUtils.getEnumIgnoreCase(Traffic.class, null, Traffic.GREEN));
312 assertEquals(Traffic.RED, EnumUtils.getEnumIgnoreCase(Traffic.class, null, Traffic.RED));
313 assertNull(EnumUtils.getEnumIgnoreCase(Traffic.class, "PURPLE", null));
314 }
315
316
317
318
319 @SuppressWarnings("unchecked")
320 @Test
321 public void test_getEnumIgnoreCase_nonEnumClass() {
322 @SuppressWarnings("rawtypes")
323 final Class rawType = Object.class;
324 assertNull(EnumUtils.getEnumIgnoreCase(rawType, "rawType"));
325 }
326
327 @Test
328 public void test_getEnumIgnoreCase_nullClass() {
329 assertThrows(NullPointerException.class, () -> EnumUtils.getEnumIgnoreCase((Class<Traffic>) null, "PURPLE"));
330 }
331
332 @Test
333 public void test_getEnumList() {
334 final List<Traffic> test = EnumUtils.getEnumList(Traffic.class);
335 assertEquals(3, test.size());
336 assertEquals(Traffic.RED, test.get(0));
337 assertEquals(Traffic.AMBER, test.get(1));
338 assertEquals(Traffic.GREEN, test.get(2));
339 }
340
341 @Test
342 public void test_getEnumMap() {
343 final Map<String, Traffic> test = EnumUtils.getEnumMap(Traffic.class);
344 final Map<String, Traffic> expected = new HashMap<>();
345 expected.put("RED", Traffic.RED);
346 expected.put("AMBER", Traffic.AMBER);
347 expected.put("GREEN", Traffic.GREEN);
348 assertEquals(expected, test, "getEnumMap not created correctly");
349 assertEquals(3, test.size());
350 assertTrue(test.containsKey("RED"));
351 assertEquals(Traffic.RED, test.get("RED"));
352 assertTrue(test.containsKey("AMBER"));
353 assertEquals(Traffic.AMBER, test.get("AMBER"));
354 assertTrue(test.containsKey("GREEN"));
355 assertEquals(Traffic.GREEN, test.get("GREEN"));
356 assertFalse(test.containsKey("PURPLE"));
357 }
358
359 @Test
360 public void test_getEnumMap_keyFunction() {
361 final Map<Integer, Month> test = EnumUtils.getEnumMap(Month.class, Month::getId);
362 final Map<Integer, Month> expected = new HashMap<>();
363 expected.put(1, Month.JAN);
364 expected.put(2, Month.FEB);
365 expected.put(3, Month.MAR);
366 expected.put(4, Month.APR);
367 expected.put(5, Month.MAY);
368 expected.put(6, Month.JUN);
369 expected.put(7, Month.JUL);
370 expected.put(8, Month.AUG);
371 expected.put(9, Month.SEP);
372 expected.put(10, Month.OCT);
373 expected.put(11, Month.NOV);
374 expected.put(12, Month.DEC);
375 assertEquals(expected, test, "getEnumMap not created correctly");
376 assertEquals(12, test.size());
377 assertFalse(test.containsKey(0));
378 assertTrue(test.containsKey(1));
379 assertEquals(Month.JAN, test.get(1));
380 assertTrue(test.containsKey(2));
381 assertEquals(Month.FEB, test.get(2));
382 assertTrue(test.containsKey(3));
383 assertEquals(Month.MAR, test.get(3));
384 assertTrue(test.containsKey(4));
385 assertEquals(Month.APR, test.get(4));
386 assertTrue(test.containsKey(5));
387 assertEquals(Month.MAY, test.get(5));
388 assertTrue(test.containsKey(6));
389 assertEquals(Month.JUN, test.get(6));
390 assertTrue(test.containsKey(7));
391 assertEquals(Month.JUL, test.get(7));
392 assertTrue(test.containsKey(8));
393 assertEquals(Month.AUG, test.get(8));
394 assertTrue(test.containsKey(9));
395 assertEquals(Month.SEP, test.get(9));
396 assertTrue(test.containsKey(10));
397 assertEquals(Month.OCT, test.get(10));
398 assertTrue(test.containsKey(11));
399 assertEquals(Month.NOV, test.get(11));
400 assertTrue(test.containsKey(12));
401 assertEquals(Month.DEC, test.get(12));
402 assertFalse(test.containsKey(13));
403 }
404
405 @Test
406 public void test_getEnumSystemProperty() {
407 final String key = getClass().getName();
408 System.setProperty(key, Traffic.RED.toString());
409 try {
410 assertEquals(Traffic.RED, EnumUtils.getEnumSystemProperty(Traffic.class, key, null));
411 assertEquals(Traffic.RED, EnumUtils.getEnumSystemProperty(Traffic.class, "?", Traffic.RED));
412 assertEquals(Traffic.RED, EnumUtils.getEnumSystemProperty(null, null, Traffic.RED));
413 assertEquals(Traffic.RED, EnumUtils.getEnumSystemProperty(null, "?", Traffic.RED));
414 assertEquals(Traffic.RED, EnumUtils.getEnumSystemProperty(Traffic.class, null, Traffic.RED));
415 } finally {
416 System.getProperties().remove(key);
417 }
418 }
419
420 @Test
421 public void test_getFirstEnumIgnoreCase_defaultEnum() {
422 final Function<Traffic2, String> f = Traffic2::getLabel;
423 assertEquals(Traffic2.RED, EnumUtils.getFirstEnumIgnoreCase(Traffic2.class, "***red***", f, Traffic2.AMBER));
424 assertEquals(Traffic2.AMBER, EnumUtils.getFirstEnumIgnoreCase(Traffic2.class, "**Amber**", f, Traffic2.GREEN));
425 assertEquals(Traffic2.GREEN, EnumUtils.getFirstEnumIgnoreCase(Traffic2.class, "*grEEn*", f, Traffic2.RED));
426 assertEquals(Traffic2.AMBER, EnumUtils.getFirstEnumIgnoreCase(Traffic2.class, "PURPLE", f, Traffic2.AMBER));
427 assertEquals(Traffic2.GREEN, EnumUtils.getFirstEnumIgnoreCase(Traffic2.class, "purple", f, Traffic2.GREEN));
428 assertEquals(Traffic2.RED, EnumUtils.getFirstEnumIgnoreCase(Traffic2.class, "pUrPlE", f, Traffic2.RED));
429 assertEquals(Traffic2.AMBER, EnumUtils.getFirstEnumIgnoreCase(Traffic2.class, null, f, Traffic2.AMBER));
430 assertEquals(Traffic2.GREEN, EnumUtils.getFirstEnumIgnoreCase(Traffic2.class, null, f, Traffic2.GREEN));
431 assertEquals(Traffic2.RED, EnumUtils.getFirstEnumIgnoreCase(Traffic2.class, null, f, Traffic2.RED));
432 assertNull(EnumUtils.getFirstEnumIgnoreCase(Traffic2.class, "PURPLE", f, null));
433 }
434
435 @Test
436 public void test_isValidEnum() {
437 assertTrue(EnumUtils.isValidEnum(Traffic.class, "RED"));
438 assertTrue(EnumUtils.isValidEnum(Traffic.class, "AMBER"));
439 assertTrue(EnumUtils.isValidEnum(Traffic.class, "GREEN"));
440 assertFalse(EnumUtils.isValidEnum(Traffic.class, "PURPLE"));
441 assertFalse(EnumUtils.isValidEnum(Traffic.class, null));
442 }
443
444 @Test
445 public void test_isValidEnum_nullClass() {
446 assertThrows(NullPointerException.class, () -> EnumUtils.isValidEnum(null, "PURPLE"));
447 }
448
449 @Test
450 public void test_isValidEnumIgnoreCase() {
451 assertTrue(EnumUtils.isValidEnumIgnoreCase(Traffic.class, "red"));
452 assertTrue(EnumUtils.isValidEnumIgnoreCase(Traffic.class, "Amber"));
453 assertTrue(EnumUtils.isValidEnumIgnoreCase(Traffic.class, "grEEn"));
454 assertFalse(EnumUtils.isValidEnumIgnoreCase(Traffic.class, "purple"));
455 assertFalse(EnumUtils.isValidEnumIgnoreCase(Traffic.class, null));
456 }
457
458 @Test
459 public void test_isValidEnumIgnoreCase_nullClass() {
460 assertThrows(NullPointerException.class, () -> EnumUtils.isValidEnumIgnoreCase(null, "PURPLE"));
461 }
462
463 @Test
464 public void test_processBitVector() {
465 assertEquals(EnumSet.noneOf(Traffic.class), EnumUtils.processBitVector(Traffic.class, 0L));
466 assertEquals(EnumSet.of(Traffic.RED), EnumUtils.processBitVector(Traffic.class, 1L));
467 assertEquals(EnumSet.of(Traffic.AMBER), EnumUtils.processBitVector(Traffic.class, 2L));
468 assertEquals(EnumSet.of(Traffic.RED, Traffic.AMBER), EnumUtils.processBitVector(Traffic.class, 3L));
469 assertEquals(EnumSet.of(Traffic.GREEN), EnumUtils.processBitVector(Traffic.class, 4L));
470 assertEquals(EnumSet.of(Traffic.RED, Traffic.GREEN), EnumUtils.processBitVector(Traffic.class, 5L));
471 assertEquals(EnumSet.of(Traffic.AMBER, Traffic.GREEN), EnumUtils.processBitVector(Traffic.class, 6L));
472 assertEquals(EnumSet.of(Traffic.RED, Traffic.AMBER, Traffic.GREEN),
473 EnumUtils.processBitVector(Traffic.class, 7L));
474
475
476 assertEquals(EnumSet.of(Enum64.A31), EnumUtils.processBitVector(Enum64.class, 1L << 31));
477 assertEquals(EnumSet.of(Enum64.A32), EnumUtils.processBitVector(Enum64.class, 1L << 32));
478 assertEquals(EnumSet.of(Enum64.A63), EnumUtils.processBitVector(Enum64.class, 1L << 63));
479 assertEquals(EnumSet.of(Enum64.A63), EnumUtils.processBitVector(Enum64.class, Long.MIN_VALUE));
480 }
481
482 @Test
483 public void test_processBitVector_longClass() {
484 assertThrows(IllegalArgumentException.class, () -> EnumUtils.processBitVector(TooMany.class, 0L));
485 }
486
487 @Test
488 public void test_processBitVector_nullClass() {
489 final Class<Traffic> empty = null;
490 assertThrows(NullPointerException.class, () -> EnumUtils.processBitVector(empty, 0L));
491 }
492
493 @Test
494 public void test_processBitVectors() {
495 assertEquals(EnumSet.noneOf(Traffic.class), EnumUtils.processBitVectors(Traffic.class, 0L));
496 assertEquals(EnumSet.of(Traffic.RED), EnumUtils.processBitVectors(Traffic.class, 1L));
497 assertEquals(EnumSet.of(Traffic.AMBER), EnumUtils.processBitVectors(Traffic.class, 2L));
498 assertEquals(EnumSet.of(Traffic.RED, Traffic.AMBER), EnumUtils.processBitVectors(Traffic.class, 3L));
499 assertEquals(EnumSet.of(Traffic.GREEN), EnumUtils.processBitVectors(Traffic.class, 4L));
500 assertEquals(EnumSet.of(Traffic.RED, Traffic.GREEN), EnumUtils.processBitVectors(Traffic.class, 5L));
501 assertEquals(EnumSet.of(Traffic.AMBER, Traffic.GREEN), EnumUtils.processBitVectors(Traffic.class, 6L));
502 assertEquals(EnumSet.of(Traffic.RED, Traffic.AMBER, Traffic.GREEN),
503 EnumUtils.processBitVectors(Traffic.class, 7L));
504
505 assertEquals(EnumSet.noneOf(Traffic.class), EnumUtils.processBitVectors(Traffic.class, 0L, 0L));
506 assertEquals(EnumSet.of(Traffic.RED), EnumUtils.processBitVectors(Traffic.class, 0L, 1L));
507 assertEquals(EnumSet.of(Traffic.AMBER), EnumUtils.processBitVectors(Traffic.class, 0L, 2L));
508 assertEquals(EnumSet.of(Traffic.RED, Traffic.AMBER), EnumUtils.processBitVectors(Traffic.class, 0L, 3L));
509 assertEquals(EnumSet.of(Traffic.GREEN), EnumUtils.processBitVectors(Traffic.class, 0L, 4L));
510 assertEquals(EnumSet.of(Traffic.RED, Traffic.GREEN), EnumUtils.processBitVectors(Traffic.class, 0L, 5L));
511 assertEquals(EnumSet.of(Traffic.AMBER, Traffic.GREEN), EnumUtils.processBitVectors(Traffic.class, 0L, 6L));
512 assertEquals(EnumSet.of(Traffic.RED, Traffic.AMBER, Traffic.GREEN),
513 EnumUtils.processBitVectors(Traffic.class, 0L, 7L));
514
515
516 assertEquals(EnumSet.noneOf(Traffic.class), EnumUtils.processBitVectors(Traffic.class, 666L, 0L));
517 assertEquals(EnumSet.of(Traffic.RED), EnumUtils.processBitVectors(Traffic.class, 666L, 1L));
518 assertEquals(EnumSet.of(Traffic.AMBER), EnumUtils.processBitVectors(Traffic.class, 666L, 2L));
519 assertEquals(EnumSet.of(Traffic.RED, Traffic.AMBER), EnumUtils.processBitVectors(Traffic.class, 666L, 3L));
520 assertEquals(EnumSet.of(Traffic.GREEN), EnumUtils.processBitVectors(Traffic.class, 666L, 4L));
521 assertEquals(EnumSet.of(Traffic.RED, Traffic.GREEN), EnumUtils.processBitVectors(Traffic.class, 666L, 5L));
522 assertEquals(EnumSet.of(Traffic.AMBER, Traffic.GREEN), EnumUtils.processBitVectors(Traffic.class, 666L, 6L));
523 assertEquals(EnumSet.of(Traffic.RED, Traffic.AMBER, Traffic.GREEN),
524 EnumUtils.processBitVectors(Traffic.class, 666L, 7L));
525
526
527 assertEquals(EnumSet.of(Enum64.A31), EnumUtils.processBitVectors(Enum64.class, 1L << 31));
528 assertEquals(EnumSet.of(Enum64.A32), EnumUtils.processBitVectors(Enum64.class, 1L << 32));
529 assertEquals(EnumSet.of(Enum64.A63), EnumUtils.processBitVectors(Enum64.class, 1L << 63));
530 assertEquals(EnumSet.of(Enum64.A63), EnumUtils.processBitVectors(Enum64.class, Long.MIN_VALUE));
531 }
532
533 @Test
534 public void test_processBitVectors_longClass() {
535 assertEquals(EnumSet.noneOf(TooMany.class), EnumUtils.processBitVectors(TooMany.class, 0L));
536 assertEquals(EnumSet.of(TooMany.A), EnumUtils.processBitVectors(TooMany.class, 1L));
537 assertEquals(EnumSet.of(TooMany.B), EnumUtils.processBitVectors(TooMany.class, 2L));
538 assertEquals(EnumSet.of(TooMany.A, TooMany.B), EnumUtils.processBitVectors(TooMany.class, 3L));
539 assertEquals(EnumSet.of(TooMany.C), EnumUtils.processBitVectors(TooMany.class, 4L));
540 assertEquals(EnumSet.of(TooMany.A, TooMany.C), EnumUtils.processBitVectors(TooMany.class, 5L));
541 assertEquals(EnumSet.of(TooMany.B, TooMany.C), EnumUtils.processBitVectors(TooMany.class, 6L));
542 assertEquals(EnumSet.of(TooMany.A, TooMany.B, TooMany.C), EnumUtils.processBitVectors(TooMany.class, 7L));
543
544 assertEquals(EnumSet.noneOf(TooMany.class), EnumUtils.processBitVectors(TooMany.class, 0L, 0L));
545 assertEquals(EnumSet.of(TooMany.A), EnumUtils.processBitVectors(TooMany.class, 0L, 1L));
546 assertEquals(EnumSet.of(TooMany.B), EnumUtils.processBitVectors(TooMany.class, 0L, 2L));
547 assertEquals(EnumSet.of(TooMany.A, TooMany.B), EnumUtils.processBitVectors(TooMany.class, 0L, 3L));
548 assertEquals(EnumSet.of(TooMany.C), EnumUtils.processBitVectors(TooMany.class, 0L, 4L));
549 assertEquals(EnumSet.of(TooMany.A, TooMany.C), EnumUtils.processBitVectors(TooMany.class, 0L, 5L));
550 assertEquals(EnumSet.of(TooMany.B, TooMany.C), EnumUtils.processBitVectors(TooMany.class, 0L, 6L));
551 assertEquals(EnumSet.of(TooMany.A, TooMany.B, TooMany.C), EnumUtils.processBitVectors(TooMany.class, 0L, 7L));
552 assertEquals(EnumSet.of(TooMany.A, TooMany.B, TooMany.C), EnumUtils.processBitVectors(TooMany.class, 0L, 7L));
553
554 assertEquals(EnumSet.of(TooMany.M2), EnumUtils.processBitVectors(TooMany.class, 1L, 0L));
555 assertEquals(EnumSet.of(TooMany.A, TooMany.M2), EnumUtils.processBitVectors(TooMany.class, 1L, 1L));
556 assertEquals(EnumSet.of(TooMany.B, TooMany.M2), EnumUtils.processBitVectors(TooMany.class, 1L, 2L));
557 assertEquals(EnumSet.of(TooMany.A, TooMany.B, TooMany.M2), EnumUtils.processBitVectors(TooMany.class, 1L, 3L));
558 assertEquals(EnumSet.of(TooMany.C, TooMany.M2), EnumUtils.processBitVectors(TooMany.class, 1L, 4L));
559 assertEquals(EnumSet.of(TooMany.A, TooMany.C, TooMany.M2), EnumUtils.processBitVectors(TooMany.class, 1L, 5L));
560 assertEquals(EnumSet.of(TooMany.B, TooMany.C, TooMany.M2), EnumUtils.processBitVectors(TooMany.class, 1L, 6L));
561 assertEquals(EnumSet.of(TooMany.A, TooMany.B, TooMany.C, TooMany.M2),
562 EnumUtils.processBitVectors(TooMany.class, 1L, 7L));
563 assertEquals(EnumSet.of(TooMany.A, TooMany.B, TooMany.C, TooMany.M2),
564 EnumUtils.processBitVectors(TooMany.class, 1L, 7L));
565
566
567 assertEquals(EnumSet.of(TooMany.M2), EnumUtils.processBitVectors(TooMany.class, 9L, 0L));
568 assertEquals(EnumSet.of(TooMany.A, TooMany.M2), EnumUtils.processBitVectors(TooMany.class, 9L, 1L));
569 assertEquals(EnumSet.of(TooMany.B, TooMany.M2), EnumUtils.processBitVectors(TooMany.class, 9L, 2L));
570 assertEquals(EnumSet.of(TooMany.A, TooMany.B, TooMany.M2), EnumUtils.processBitVectors(TooMany.class, 9L, 3L));
571 assertEquals(EnumSet.of(TooMany.C, TooMany.M2), EnumUtils.processBitVectors(TooMany.class, 9L, 4L));
572 assertEquals(EnumSet.of(TooMany.A, TooMany.C, TooMany.M2), EnumUtils.processBitVectors(TooMany.class, 9L, 5L));
573 assertEquals(EnumSet.of(TooMany.B, TooMany.C, TooMany.M2), EnumUtils.processBitVectors(TooMany.class, 9L, 6L));
574 assertEquals(EnumSet.of(TooMany.A, TooMany.B, TooMany.C, TooMany.M2),
575 EnumUtils.processBitVectors(TooMany.class, 9L, 7L));
576 assertEquals(EnumSet.of(TooMany.A, TooMany.B, TooMany.C, TooMany.M2),
577 EnumUtils.processBitVectors(TooMany.class, 9L, 7L));
578 }
579
580 @Test
581 public void test_processBitVectors_nullClass() {
582 final Class<Traffic> empty = null;
583 assertThrows(NullPointerException.class, () -> EnumUtils.processBitVectors(empty, 0L));
584 }
585
586 @Test
587 public void testConstructable() {
588
589 new EnumUtils();
590 }
591
592 }
593
594 enum Month {
595 JAN(1), FEB(2), MAR(3), APR(4), MAY(5), JUN(6), JUL(7), AUG(8), SEP(9), OCT(10), NOV(11), DEC(12);
596
597 private final int id;
598
599 Month(final int id) {
600 this.id = id;
601 }
602
603 public int getId() {
604 return this.id;
605 }
606 }
607
608 enum TooMany {
609 A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, A1, B1, C1, D1, E1, F1, G1, H1, I1,
610 J1, K1, L1, M1, N1, O1, P1, Q1, R1, S1, T1, U1, V1, W1, X1, Y1, Z1, A2, B2, C2, D2, E2, F2, G2, H2, I2, J2, K2, L2,
611 M2
612 }
613
614 enum Traffic {
615 RED, AMBER, GREEN
616 }
617
618 enum Traffic2 {
619
620 RED("***Red***"), AMBER("**Amber**"), GREEN("*green*");
621
622 final String label;
623
624 Traffic2(final String label) {
625 this.label = label;
626 }
627
628 public String getLabel() {
629 return label;
630 }
631 }