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