Skip to content

Commit b323b28

Browse files
committed
check all enums that use idToEnum to be correct
1 parent e5a4059 commit b323b28

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

src/main/java/bwapi/UpgradeType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ public enum UpgradeType {
199199
Race.Protoss, Race.Protoss, Race.Protoss, Race.None, Race.None, Race.Protoss, Race.None, Race.Protoss, Race.None, Race.Terran, Race.Zerg, Race.Zerg, Race.Terran, Race.None, Race.None, Race.None, Race.None, Race.None, Race.None, Race.None, Race.Unknown
200200
};
201201

202-
public static final UpgradeType[] idToEnum = new UpgradeType[62 + 1];
202+
static final UpgradeType[] idToEnum = new UpgradeType[62 + 1];
203203

204204
static {
205205
Arrays.stream(UpgradeType.values()).forEach(v -> idToEnum[v.id] = v);

src/test/java/bwapi/EnumsTest.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package bwapi;
2+
3+
import org.junit.Test;
4+
5+
import java.io.File;
6+
import java.lang.reflect.Field;
7+
import java.util.Arrays;
8+
import java.util.Objects;
9+
10+
import static org.junit.Assert.assertEquals;
11+
import static org.junit.Assert.assertFalse;
12+
13+
public class EnumsTest {
14+
static String CLASSES_LOCATION = "src/main/java/bwapi";
15+
static String ARRAY_VALUE = "idToEnum";
16+
static String ID_VALUE = "id";
17+
18+
/*
19+
* Check, via reflection, that all Enums that have an "idToEnum" array to be of correct lenght
20+
*/
21+
@Test
22+
public void checkAllEnums() throws Exception {
23+
for (File file : Objects.requireNonNull(new File(CLASSES_LOCATION).listFiles())) {
24+
if (file.isFile()) {
25+
Class<?> cls = Class.forName("bwapi." + file.getName().replace(".java", ""));
26+
if (cls.isEnum() && Arrays.stream(cls.getDeclaredFields()).anyMatch(f -> f.getName().equals(ARRAY_VALUE))) {
27+
Field field = cls.getDeclaredField(ARRAY_VALUE);
28+
assertFalse(field.isAccessible());
29+
field.setAccessible(true);
30+
31+
int arrayLength = ((Object[])field.get(null)).length;
32+
int maxEnumVal = Arrays.stream((Object[]) cls.getDeclaredMethod("values").invoke(null))
33+
.mapToInt(obj -> {
34+
try {
35+
Field f = obj.getClass().getDeclaredField(ID_VALUE);
36+
assertFalse(f.isAccessible());
37+
f.setAccessible(true);
38+
return f.getInt(obj);
39+
} catch (Exception e) {
40+
e.printStackTrace();
41+
return -1;
42+
}
43+
})
44+
.max()
45+
.orElse(-1);
46+
assertEquals(arrayLength, maxEnumVal + 1);
47+
}
48+
}
49+
}
50+
}
51+
}

0 commit comments

Comments
 (0)