Minor refactoring and Event Test fixes
This commit is contained in:
@@ -43,11 +43,11 @@ public interface IDhApiEventInjector
|
||||
/**
|
||||
* Fires all bound events of the given type (does nothing if no events are bound).
|
||||
*
|
||||
* @param dependencyInterface event type
|
||||
* @param abstractEvent event type
|
||||
* @param eventParameterObject event parameter
|
||||
* @return if any of the events returned that this event should be canceled.
|
||||
* @return if any of bound event handlers returned that this event should be canceled.
|
||||
* @param <T> the parameter type taken by the event handlers.
|
||||
*/
|
||||
<T, U extends IDhApiEvent<T>> boolean fireAllEvents(Class<U> dependencyInterface, T eventParameterObject);
|
||||
<T, U extends IDhApiEvent<T>> boolean fireAllEvents(Class<U> abstractEvent, T eventParameterObject);
|
||||
|
||||
}
|
||||
|
||||
-1
@@ -40,7 +40,6 @@ public abstract class DhApiLevelUnloadEvent implements IDhApiEvent<DhApiLevelUnl
|
||||
/** The recently unloaded level. */
|
||||
public final IDhApiLevelWrapper levelWrapper;
|
||||
|
||||
|
||||
public EventParam(IDhApiLevelWrapper newLevelWrapper) { this.levelWrapper = newLevelWrapper; }
|
||||
}
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ import java.util.HashMap;
|
||||
* This class takes care of dependency injection for API events.
|
||||
*
|
||||
* @author James Seibel
|
||||
* @version 2022-11-20
|
||||
* @version 2022-11-24
|
||||
*/
|
||||
public class ApiEventInjector extends DependencyInjector<IDhApiEvent> implements IDhApiEventInjector // Note to self: Don't try adding a generic type to IDhApiEvent, the consturctor won't accept it
|
||||
{
|
||||
@@ -56,12 +56,12 @@ public class ApiEventInjector extends DependencyInjector<IDhApiEvent> implements
|
||||
if (ApiEventDefinitionHandler.INSTANCE.getEventDefinition(abstractEvent).isOneTimeEvent)
|
||||
{
|
||||
// has this one time event been fired yet?
|
||||
if (firedOneTimeEventParamsByEventInterface.containsKey(abstractEvent))
|
||||
if (this.firedOneTimeEventParamsByEventInterface.containsKey(abstractEvent))
|
||||
{
|
||||
// the one time event has happened, fire the handler
|
||||
|
||||
// this has to be an unsafe cast since the hash map can't hold the generic objects
|
||||
Object parameter = firedOneTimeEventParamsByEventInterface.get(abstractEvent);
|
||||
Object parameter = this.firedOneTimeEventParamsByEventInterface.get(abstractEvent);
|
||||
eventImplementation.fireEvent(parameter);
|
||||
}
|
||||
}
|
||||
@@ -121,9 +121,9 @@ public class ApiEventInjector extends DependencyInjector<IDhApiEvent> implements
|
||||
|
||||
// if this is a one time event, record that it was called
|
||||
if (ApiEventDefinitionHandler.INSTANCE.getEventDefinition(abstractEvent).isOneTimeEvent &&
|
||||
!firedOneTimeEventParamsByEventInterface.containsKey(abstractEvent))
|
||||
!this.firedOneTimeEventParamsByEventInterface.containsKey(abstractEvent))
|
||||
{
|
||||
firedOneTimeEventParamsByEventInterface.put(abstractEvent, eventParameterObject);
|
||||
this.firedOneTimeEventParamsByEventInterface.put(abstractEvent, eventParameterObject);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ import java.util.HashMap;
|
||||
* event instance.
|
||||
*
|
||||
* @author James Seibel
|
||||
* @version 2022-11-21
|
||||
* @version 2022-11-24
|
||||
*/
|
||||
public class ApiEventDefinitionHandler
|
||||
{
|
||||
@@ -47,6 +47,7 @@ public class ApiEventDefinitionHandler
|
||||
|
||||
private ApiEventDefinitionHandler() { this.addInitialBindings(); }
|
||||
|
||||
/** This must include all available events */
|
||||
public void addInitialBindings()
|
||||
{
|
||||
this.setEventDefinition(DhApiAfterDhInitEvent.class, DhApiAfterDhInitEvent.EVENT_DEFINITION);
|
||||
@@ -82,9 +83,6 @@ public class ApiEventDefinitionHandler
|
||||
{
|
||||
if (!this.DEFINITIONS_BY_EVENT_INTERFACE.containsKey(eventInterface))
|
||||
{
|
||||
// attempt to get the definition for this class
|
||||
|
||||
|
||||
throw new NullPointerException("event definition missing for: [" + eventInterface.getSimpleName() + "]");
|
||||
}
|
||||
|
||||
|
||||
@@ -19,22 +19,25 @@ import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* @author James Seibel
|
||||
* @version 2022-11-21
|
||||
* @version 2022-11-25
|
||||
*/
|
||||
public class EventInjectorTest
|
||||
{
|
||||
@Before
|
||||
public void testSetup()
|
||||
{
|
||||
ApiEventDefinitionHandler definitionHandler = ApiEventDefinitionHandler.INSTANCE;
|
||||
|
||||
|
||||
// reset the injectors and event definitions
|
||||
ApiEventInjector.INSTANCE.clear();
|
||||
ApiEventDefinitionHandler.INSTANCE.clear();
|
||||
definitionHandler.clear();
|
||||
|
||||
|
||||
// register test events
|
||||
ApiEventDefinitionHandler.INSTANCE.setEventDefinition(DhApiTestEvent.class, DhApiTestEvent.EVENT_DEFINITION);
|
||||
ApiEventDefinitionHandler.INSTANCE.setEventDefinition(DhApiOneTimeTestEvent.class, DhApiOneTimeTestEvent.EVENT_DEFINITION);
|
||||
ApiEventDefinitionHandler.INSTANCE.addInitialBindings();
|
||||
definitionHandler.setEventDefinition(DhApiTestEvent.class, DhApiTestEvent.EVENT_DEFINITION);
|
||||
definitionHandler.setEventDefinition(DhApiOneTimeTestEvent.class, DhApiOneTimeTestEvent.EVENT_DEFINITION);
|
||||
definitionHandler.addInitialBindings();
|
||||
|
||||
}
|
||||
|
||||
@@ -110,14 +113,21 @@ public class EventInjectorTest
|
||||
@Test
|
||||
public void testEventDefinition()
|
||||
{
|
||||
ApiEventDefinitionHandler definitionHandler = ApiEventDefinitionHandler.INSTANCE;
|
||||
|
||||
String errorMessagePrefix = "Missing " + DhApiEventDefinition.class.getSimpleName() + " for event class [";
|
||||
Assert.assertNotNull(errorMessagePrefix + DhApiTestEvent.class.getSimpleName() + "]", ApiEventDefinitionHandler.INSTANCE.getEventDefinition(DhApiTestEvent.class));
|
||||
Assert.assertNotNull(errorMessagePrefix + DhApiOneTimeTestEvent.class.getSimpleName() + "]", ApiEventDefinitionHandler.INSTANCE.getEventDefinition(DhApiOneTimeTestEvent.class));
|
||||
Assert.assertNotNull(errorMessagePrefix + DhApiAfterDhInitEvent.class.getSimpleName() + "]", ApiEventDefinitionHandler.INSTANCE.getEventDefinition(DhApiAfterDhInitEvent.class));
|
||||
Assert.assertNotNull(errorMessagePrefix + DhApiTestEvent.class.getSimpleName() + "]", definitionHandler.getEventDefinition(DhApiTestEvent.class));
|
||||
Assert.assertNotNull(errorMessagePrefix + DhApiOneTimeTestEvent.class.getSimpleName() + "]", definitionHandler.getEventDefinition(DhApiOneTimeTestEvent.class));
|
||||
Assert.assertNotNull(errorMessagePrefix + DhApiAfterDhInitEvent.class.getSimpleName() + "]", definitionHandler.getEventDefinition(DhApiAfterDhInitEvent.class));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testOneTimeEventFiring()
|
||||
public void oneTimeEventTestPreFireBinding() { this.oneTimeEventTest(false); }
|
||||
@Test
|
||||
public void oneTimeEventTestPostFireBinding() { this.oneTimeEventTest(true); }
|
||||
|
||||
public void oneTimeEventTest(boolean bindEventBeforeOneTimeFiring)
|
||||
{
|
||||
// Injector setup
|
||||
ApiEventInjector TEST_EVENT_HANDLER = ApiEventInjector.INSTANCE;
|
||||
@@ -127,16 +137,23 @@ public class EventInjectorTest
|
||||
Assert.assertNull("Nothing should have been bound.", TEST_EVENT_HANDLER.get(DhApiOneTimeTestEvent.class));
|
||||
|
||||
|
||||
// pre-event fire binding
|
||||
TEST_EVENT_HANDLER.bind(DhApiOneTimeTestEvent.class, new DhOneTimeTestEventHandler());
|
||||
if (bindEventBeforeOneTimeFiring)
|
||||
{
|
||||
TEST_EVENT_HANDLER.bind(DhApiOneTimeTestEvent.class, new DhOneTimeTestEventHandler());
|
||||
}
|
||||
TEST_EVENT_HANDLER.runDelayedSetup();
|
||||
|
||||
|
||||
// pre-bound event firing
|
||||
Assert.assertEquals("fireAllEvents canceled returned canceled incorrectly.", true, TEST_EVENT_HANDLER.fireAllEvents(DhApiOneTimeTestEvent.class, true));
|
||||
// validate event fired correctly
|
||||
ArrayList<DhApiOneTimeTestEvent> oneTimeEventList = TEST_EVENT_HANDLER.getAll(DhApiOneTimeTestEvent.class);
|
||||
Assert.assertEquals("Event not fired for pre-fire object.", true, oneTimeEventList.get(0).getTestValue());
|
||||
Assert.assertEquals("fireAllEvents canceled returned canceled incorrectly.", bindEventBeforeOneTimeFiring, TEST_EVENT_HANDLER.fireAllEvents(DhApiOneTimeTestEvent.class, true));
|
||||
|
||||
// validate pre-bound events fired correctly
|
||||
ArrayList<DhApiOneTimeTestEvent> oneTimeEventList;
|
||||
if (bindEventBeforeOneTimeFiring)
|
||||
{
|
||||
oneTimeEventList = TEST_EVENT_HANDLER.getAll(DhApiOneTimeTestEvent.class);
|
||||
Assert.assertEquals("Event not fired for pre-fire object.", true, oneTimeEventList.get(0).getTestValue());
|
||||
}
|
||||
|
||||
|
||||
// post-event fire binding
|
||||
@@ -144,8 +161,10 @@ public class EventInjectorTest
|
||||
TEST_EVENT_HANDLER.bind(DhApiOneTimeTestEvent.class, new DhOneTimeTestEventHandlerAlt());
|
||||
// validate both events have fired
|
||||
oneTimeEventList = TEST_EVENT_HANDLER.getAll(DhApiOneTimeTestEvent.class);
|
||||
Assert.assertEquals("Event not fired for pre-fire object.", true, oneTimeEventList.get(0).getTestValue());
|
||||
Assert.assertEquals("Event not fired for post-fire object.", true, oneTimeEventList.get(1).getTestValue());
|
||||
for (int i = 0; i < oneTimeEventList.size(); i++)
|
||||
{
|
||||
Assert.assertEquals("Event not fired for object ["+i+"].", true, oneTimeEventList.get(i).getTestValue());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user