Add DeadEvent #9
@ -18,8 +18,13 @@ public final class DeadEvent {
|
||||
this.event = event;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("DeadEvent[eventBus=%s, event=%s]", eventBus, event);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the event bus that originated this event
|
||||
* @return the event bus that dispatched this event
|
||||
* @since 1.1.0
|
||||
*/
|
||||
public EventBus getEventBus() { return eventBus; }
|
||||
|
@ -84,7 +84,13 @@ public final class EventBus {
|
||||
handlers.next().execute(event);
|
||||
}
|
||||
} else if (!(event instanceof DeadEvent)) {
|
||||
kske marked this conversation as resolved
|
||||
|
||||
// Dispatch dead event
|
||||
dispatch(new DeadEvent(this, event));
|
||||
} else {
|
||||
|
||||
// Warn about the dead event not being handled
|
||||
logger.log(Level.WARNING, "{0} not handled", event);
|
||||
}
|
||||
|
||||
// Reset dispatch state
|
||||
|
@ -2,7 +2,7 @@ package dev.kske.eventbus.core;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import org.junit.jupiter.api.*;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
/**
|
||||
* Tests the dispatching of a dead event if an event could not be delivered.
|
||||
@ -12,20 +12,32 @@ import org.junit.jupiter.api.*;
|
||||
*/
|
||||
class DeadTest {
|
||||
|
||||
EventBus bus;
|
||||
EventBus bus = new EventBus();
|
||||
String event = "This event has no handler";
|
||||
boolean deadEventHandled;
|
||||
|
||||
@BeforeEach
|
||||
void registerListener() {
|
||||
bus = new EventBus();
|
||||
bus.registerListener(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests dead event delivery.
|
||||
*
|
||||
* @since 1.1.0
|
||||
*/
|
||||
@Test
|
||||
void testDeadEvent() {
|
||||
bus.registerListener(this);
|
||||
bus.dispatch(event);
|
||||
assertTrue(deadEventHandled);
|
||||
bus.removeListener(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests how the event bus reacts to an unhandled dead event. This should not lead to an
|
||||
* exception or endless recursion and instead be logged.
|
||||
*
|
||||
* @since 1.1.0
|
||||
*/
|
||||
@Test
|
||||
void testUnhandledDeadEvent() {
|
||||
bus.dispatch(event);
|
||||
}
|
||||
|
||||
@Event
|
||||
|
@ -27,8 +27,8 @@ class DispatchTest {
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests {@link EventBus#dispatch(Object)} with multiple handler priorities, a subtype handler
|
||||
* and a static handler.
|
||||
* Tests {@link EventBus#dispatch(Object)} with multiple handler priorities, a polymorphic
|
||||
* handler and a static handler.
|
||||
*
|
||||
* @since 0.0.1
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user
this would be a little bit different then.
That's why I use the if statement. I could use a boolean flag instead, but the iterator logic should be more efficient and arguably more readable here.