1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.myfaces.tobago.util;
21
22 import org.apache.myfaces.tobago.internal.util.StringUtils;
23 import org.junit.jupiter.api.Assertions;
24
25 import java.lang.reflect.Field;
26
27 public abstract class EnumUnitTest {
28
29 protected String getEnumRegexp() {
30 return "[a-z][a-zA-Z]*";
31 }
32
33 protected String constantCaseToEnum(final String constant) {
34 return StringUtils.constantToLowerCamelCase(constant);
35 }
36
37 public <E extends Enum<E>> void testNames(final Class<E> enumType)
38 throws NoSuchFieldException, IllegalAccessException {
39
40 final Field[] fields = enumType.getFields();
41 final E[] values = enumType.getEnumConstants();
42
43 Assertions.assertEquals(fields.length, 2 * values.length, "Is for every enum a string constant defined?");
44
45 for (final Field field : fields) {
46 final Object object = field.get(null);
47 final String fieldName = field.getName();
48 if (object instanceof String) {
49
50 final String value = (String) object;
51 final String expected = constantCaseToEnum(fieldName);
52 Assertions.assertEquals(expected, value);
53 Assertions.assertNotNull(enumType.getField(value), "exists");
54 } else if (object.getClass().isAssignableFrom(enumType)) {
55
56 Assertions.assertTrue(fieldName.matches(getEnumRegexp()), "value='" + fieldName + "'");
57 } else {
58 Assertions.fail();
59 }
60 }
61 }
62 }