From 025487dd407fb6a63c4b2c60a0bd16b785a934de Mon Sep 17 00:00:00 2001 From: George Date: Sun, 7 Jun 2026 13:35:16 +0100 Subject: [PATCH] Add direct event bus contract tests --- .../com/livingworld/events/EventBusTest.java | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/test/java/com/livingworld/events/EventBusTest.java diff --git a/src/test/java/com/livingworld/events/EventBusTest.java b/src/test/java/com/livingworld/events/EventBusTest.java new file mode 100644 index 0000000..52db5f4 --- /dev/null +++ b/src/test/java/com/livingworld/events/EventBusTest.java @@ -0,0 +1,54 @@ +package com.livingworld.events; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; + +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; +import org.junit.jupiter.api.Test; + +class EventBusTest { + + @Test + void listenerReceivesPublishedEventExactlyOnce() { + LivingWorldEventBus bus = new LivingWorldEventBus(); + AtomicInteger calls = new AtomicInteger(); + AtomicReference received = new AtomicReference<>(); + BaseLivingWorldEvent event = event("test_event"); + bus.register(event.eventType(), published -> { + calls.incrementAndGet(); + received.set(published); + }); + + bus.publish(event); + + assertEquals(1, calls.get()); + assertSame(event, received.get()); + } + + @Test + void multipleListenersReceiveTheSameEvent() { + LivingWorldEventBus bus = new LivingWorldEventBus(); + AtomicInteger calls = new AtomicInteger(); + bus.register("test_event", event -> calls.incrementAndGet()); + bus.register("test_event", event -> calls.incrementAndGet()); + bus.register("test_event", event -> calls.incrementAndGet()); + + bus.publish(event("test_event")); + + assertEquals(3, calls.get()); + } + + @Test + void unknownEventTypeDoesNotCrash() { + LivingWorldEventBus bus = new LivingWorldEventBus(); + + assertDoesNotThrow(() -> bus.publish(event("unknown"))); + assertEquals(1, bus.getPublishedEventCount()); + } + + private static BaseLivingWorldEvent event(String type) { + return new BaseLivingWorldEvent(type, 1L, "test"); + } +}