package me.gnat008.perworldinventory.listeners; import me.gnat008.perworldinventory.ClassCollector; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.junit.BeforeClass; import org.junit.Test; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.List; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertThat; /** * Tests that listener classes are well formed. */ public class ListenerConsistencyTest { private static List<Class<? extends Listener>> listenerClasses; @BeforeClass public static void collectListeners() { listenerClasses = new ClassCollector("src/main/java", "me/gnat008/perworldinventory/listeners") .collectClasses(Listener.class); if (listenerClasses.isEmpty()) { throw new IllegalStateException("Failed collecting any listener classes"); } } @Test public void shouldOnlyHaveEventHandlerMethods() { listenerClasses.forEach(clz -> checkHasOnlyEventHandlerMethods(clz)); } private static void checkHasOnlyEventHandlerMethods(Class<?> clazz) { for (Method method : clazz.getDeclaredMethods()) { if (!Modifier.isPrivate(method.getModifiers())) { assertThat("Method '" + method.getName() + "' in '" + clazz + "' should have @EventHandler", method.isAnnotationPresent(EventHandler.class), equalTo(true)); } } } }