From b2fe3a9d6ce7080562531eec3ebe97ef183b07db Mon Sep 17 00:00:00 2001 From: kske Date: Sat, 20 Feb 2021 21:40:48 +0100 Subject: [PATCH] Log unhandled dead events --- .../dev/kske/eventbus/core/DeadEvent.java | 7 ++++- .../java/dev/kske/eventbus/core/EventBus.java | 6 ++++ .../java/dev/kske/eventbus/core/DeadTest.java | 28 +++++++++++++------ .../dev/kske/eventbus/core/DispatchTest.java | 4 +-- 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/event-bus-core/src/main/java/dev/kske/eventbus/core/DeadEvent.java b/event-bus-core/src/main/java/dev/kske/eventbus/core/DeadEvent.java index 0c93b9a..ad0feb8 100644 --- a/event-bus-core/src/main/java/dev/kske/eventbus/core/DeadEvent.java +++ b/event-bus-core/src/main/java/dev/kske/eventbus/core/DeadEvent.java @@ -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; } diff --git a/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java b/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java index f0c065d..88317c6 100644 --- a/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java +++ b/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java @@ -84,7 +84,13 @@ public final class EventBus { handlers.next().execute(event); } } else if (!(event instanceof DeadEvent)) { + + // 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 diff --git a/event-bus-core/src/test/java/dev/kske/eventbus/core/DeadTest.java b/event-bus-core/src/test/java/dev/kske/eventbus/core/DeadTest.java index 94e925d..50e1986 100644 --- a/event-bus-core/src/test/java/dev/kske/eventbus/core/DeadTest.java +++ b/event-bus-core/src/test/java/dev/kske/eventbus/core/DeadTest.java @@ -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 diff --git a/event-bus-core/src/test/java/dev/kske/eventbus/core/DispatchTest.java b/event-bus-core/src/test/java/dev/kske/eventbus/core/DispatchTest.java index 95bae3f..f8a5f90 100644 --- a/event-bus-core/src/test/java/dev/kske/eventbus/core/DispatchTest.java +++ b/event-bus-core/src/test/java/dev/kske/eventbus/core/DispatchTest.java @@ -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 */