From 0647d212d68abfcc49d86c28c618b850875d9c7f Mon Sep 17 00:00:00 2001 From: James Seibel Date: Thu, 24 Nov 2022 22:32:37 -0600 Subject: [PATCH] Fix Event tests not failing correctly --- .../events/ApiEventDefinitionHandler.java | 21 ++++++++----- .../DhApiOneTimeTestEvent.java | 2 +- .../abstractObjects/DhApiTestEvent.java | 2 +- .../test/java/tests/EventInjectorTest.java | 30 +++++++++++++++++-- 4 files changed, 43 insertions(+), 12 deletions(-) diff --git a/api/src/main/java/com/seibel/lod/core/events/ApiEventDefinitionHandler.java b/api/src/main/java/com/seibel/lod/core/events/ApiEventDefinitionHandler.java index 84c29076b..17a7e2237 100644 --- a/api/src/main/java/com/seibel/lod/core/events/ApiEventDefinitionHandler.java +++ b/api/src/main/java/com/seibel/lod/core/events/ApiEventDefinitionHandler.java @@ -19,6 +19,7 @@ package com.seibel.lod.core.events; +import com.seibel.lod.api.methods.events.abstractEvents.DhApiBeforeDhInitEvent; import com.seibel.lod.api.methods.events.interfaces.IDhApiEvent; import com.seibel.lod.api.objects.events.DhApiEventDefinition; import org.apache.logging.log4j.LogManager; @@ -38,34 +39,40 @@ public class ApiEventDefinitionHandler { private static final Logger LOGGER = LogManager.getLogger(ApiEventDefinitionHandler.class.getSimpleName()); // note to self: don't try adding a generic interface type here, the event dependency handler's constructor method won't accept it - private static final HashMap, DhApiEventDefinition> DEFINITIONS_BY_EVENT_INTERFACE = new HashMap<>(); + private final HashMap, DhApiEventDefinition> DEFINITIONS_BY_EVENT_INTERFACE = new HashMap<>(); - public ApiEventDefinitionHandler INSTANCE = new ApiEventDefinitionHandler(); + public static final ApiEventDefinitionHandler INSTANCE = new ApiEventDefinitionHandler(); - private ApiEventDefinitionHandler() { } + private ApiEventDefinitionHandler() { } + + /** + * This should only be used for unit testing. + * Under normal circumstances there isn't any reason to clear the event definitions. + */ + public void clear() { this.DEFINITIONS_BY_EVENT_INTERFACE.clear(); } public static void setEventDefinition(Class eventInterface, DhApiEventDefinition definition) { - if (DEFINITIONS_BY_EVENT_INTERFACE.containsKey(eventInterface)) + if (INSTANCE.DEFINITIONS_BY_EVENT_INTERFACE.containsKey(eventInterface)) { LOGGER.warn("duplicate key added [" + eventInterface.getSimpleName() + "]"); } - DEFINITIONS_BY_EVENT_INTERFACE.put(eventInterface, definition); + INSTANCE.DEFINITIONS_BY_EVENT_INTERFACE.put(eventInterface, definition); } public static DhApiEventDefinition getEventDefinition(Class eventInterface) { - if (!DEFINITIONS_BY_EVENT_INTERFACE.containsKey(eventInterface)) + if (!INSTANCE.DEFINITIONS_BY_EVENT_INTERFACE.containsKey(eventInterface)) { throw new NullPointerException("event definition missing for: [" + eventInterface.getSimpleName() + "]"); } - return DEFINITIONS_BY_EVENT_INTERFACE.get(eventInterface); + return INSTANCE.DEFINITIONS_BY_EVENT_INTERFACE.get(eventInterface); } } diff --git a/api/src/test/java/testItems/events/abstractObjects/DhApiOneTimeTestEvent.java b/api/src/test/java/testItems/events/abstractObjects/DhApiOneTimeTestEvent.java index 4b82ab858..b5ab57285 100644 --- a/api/src/test/java/testItems/events/abstractObjects/DhApiOneTimeTestEvent.java +++ b/api/src/test/java/testItems/events/abstractObjects/DhApiOneTimeTestEvent.java @@ -30,7 +30,7 @@ public abstract class DhApiOneTimeTestEvent implements IDhApiEvent return input; } - private static boolean firstTimeSetupComplete = false; + public static boolean firstTimeSetupComplete = false; public DhApiOneTimeTestEvent() { if (!firstTimeSetupComplete) diff --git a/api/src/test/java/testItems/events/abstractObjects/DhApiTestEvent.java b/api/src/test/java/testItems/events/abstractObjects/DhApiTestEvent.java index e8eefba18..5469f1ece 100644 --- a/api/src/test/java/testItems/events/abstractObjects/DhApiTestEvent.java +++ b/api/src/test/java/testItems/events/abstractObjects/DhApiTestEvent.java @@ -31,7 +31,7 @@ public abstract class DhApiTestEvent implements IDhApiEvent return input; } - private static boolean firstTimeSetupComplete = false; + public static boolean firstTimeSetupComplete = false; public DhApiTestEvent() { if (!firstTimeSetupComplete) diff --git a/api/src/test/java/tests/EventInjectorTest.java b/api/src/test/java/tests/EventInjectorTest.java index 9ed79c7c6..884daacd1 100644 --- a/api/src/test/java/tests/EventInjectorTest.java +++ b/api/src/test/java/tests/EventInjectorTest.java @@ -1,8 +1,13 @@ package tests; +import com.seibel.lod.api.objects.events.DhApiEventDefinition; import com.seibel.lod.core.DependencyInjection.ApiEventInjector; +import com.seibel.lod.core.events.ApiEventDefinitionHandler; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Order; import testItems.events.abstractObjects.DhApiOneTimeTestEvent; import testItems.events.objects.DhOneTimeTestEventHandler; import testItems.events.objects.DhOneTimeTestEventHandlerAlt; @@ -19,13 +24,25 @@ import java.util.ArrayList; */ public class EventInjectorTest { + @Before + public void testSetup() + { + // reset the injectors and event definitions + ApiEventInjector.INSTANCE.clear(); + ApiEventDefinitionHandler.INSTANCE.clear(); + + DhApiTestEvent.firstTimeSetupComplete = false; + DhApiOneTimeTestEvent.firstTimeSetupComplete = false; + } + + + @Test public void testGeneralAndRecurringEvents() // this also tests list dependencies since there can be more than one event handler bound per event { // Injector setup ApiEventInjector TEST_EVENT_HANDLER = ApiEventInjector.INSTANCE; - TEST_EVENT_HANDLER.clear(); // pre-dependency setup @@ -87,12 +104,19 @@ public class EventInjectorTest } + @Test + public void testEventDefinition() + { + String errorMessagePrefix = "Missing " + DhApiEventDefinition.class.getSimpleName() + " for event class ["; + Assert.assertNotNull(errorMessagePrefix + DhApiTestEvent.class.getSimpleName() + "]", ApiEventDefinitionHandler.getEventDefinition(DhApiTestEvent.class)); + Assert.assertNotNull(errorMessagePrefix + DhApiOneTimeTestEvent.class.getSimpleName() + "]", ApiEventDefinitionHandler.getEventDefinition(DhApiOneTimeTestEvent.class)); + } + @Test public void testOneTimeEventFiring() { // Injector setup ApiEventInjector TEST_EVENT_HANDLER = ApiEventInjector.INSTANCE; - TEST_EVENT_HANDLER.clear(); // pre-dependency setup @@ -124,7 +148,7 @@ public class EventInjectorTest // recurring event test TEST_EVENT_HANDLER.bind(DhApiTestEvent.class, new DhTestEventHandler()); ArrayList recurringEventList = TEST_EVENT_HANDLER.getAll(DhApiTestEvent.class); - Assert.assertNull("This unrealted recurring event shouldn't have been fired.", recurringEventList.get(0).getTestValue()); + Assert.assertNull("This unrelated recurring event shouldn't have been fired.", recurringEventList.get(0).getTestValue()); }