From 217a37976e3e4f949fadc8c6136af8b985d68653 Mon Sep 17 00:00:00 2001 From: lieght Date: Wed, 10 Sep 2025 21:52:55 +0200 Subject: [PATCH] Global event bus unittests --- pom.xml | 6 ++ src/test/java/GlobalEventBusTest.java | 115 ++++++++++++++++++++++++++ 2 files changed, 121 insertions(+) create mode 100644 src/test/java/GlobalEventBusTest.java diff --git a/pom.xml b/pom.xml index 1bbb5b8..b009172 100644 --- a/pom.xml +++ b/pom.xml @@ -103,6 +103,12 @@ lwjgl-stb ${lwjgl.natives} + + org.junit.jupiter + junit-jupiter + RELEASE + test + \ No newline at end of file diff --git a/src/test/java/GlobalEventBusTest.java b/src/test/java/GlobalEventBusTest.java new file mode 100644 index 0000000..213d816 --- /dev/null +++ b/src/test/java/GlobalEventBusTest.java @@ -0,0 +1,115 @@ +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.toop.eventbus.EventMeta; +import org.toop.eventbus.EventRegistry; +import org.toop.eventbus.GlobalEventBus; + +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; + +import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.*; + +public class GlobalEventBusTest { + + // Sample event class + public static class TestEvent { + private final String message; + + public TestEvent(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } + + } + + @BeforeEach + public void resetRegistry() { + EventRegistry.reset(); // clear ready states and stored events + } + + @Test + public void testSubscribeAndPost() { + AtomicBoolean called = new AtomicBoolean(false); + AtomicReference receivedMessage = new AtomicReference<>(); + + // Subscribe and register listener + EventMeta meta = GlobalEventBus.subscribeAndRegister(TestEvent.class, e -> { + called.set(true); + receivedMessage.set(e.getMessage()); + }); + + assertTrue(EventRegistry.isReady(TestEvent.class)); + assertTrue(meta.isReady()); + + // Post an event + TestEvent event = new TestEvent("Hello World"); + GlobalEventBus.post(event); + + // Give Guava EventBus a moment (optional if single-threaded) + try { Thread.sleep(50); } catch (InterruptedException ignored) {} + + assertTrue(called.get()); + assertEquals("Hello World", receivedMessage.get()); + } + + @Test + public void testUnregister() { + AtomicBoolean called = new AtomicBoolean(false); + + EventMeta meta = GlobalEventBus.subscribeAndRegister(TestEvent.class, e -> called.set(true)); + assertTrue(meta.isReady()); + assertTrue(EventRegistry.isReady(TestEvent.class)); + + // Unregister listener + GlobalEventBus.unregister(meta); + + assertFalse(meta.isReady()); + assertFalse(EventRegistry.isReady(TestEvent.class)); + + // Post event — listener should NOT be called + GlobalEventBus.post(new TestEvent("Test")); + try { Thread.sleep(50); } catch (InterruptedException ignored) {} + + assertFalse(called.get()); + } + + @Test + public void testMultipleListeners() { + AtomicBoolean listener1Called = new AtomicBoolean(false); + AtomicBoolean listener2Called = new AtomicBoolean(false); + + EventMeta l1 = GlobalEventBus.subscribeAndRegister(TestEvent.class, e -> listener1Called.set(true)); + EventMeta l2 = GlobalEventBus.subscribeAndRegister(TestEvent.class, e -> listener2Called.set(true)); + + GlobalEventBus.post(new TestEvent("Event")); + + try { Thread.sleep(50); } catch (InterruptedException ignored) {} + + assertTrue(listener1Called.get()); + assertTrue(listener2Called.get()); + } + + // TODO: Fix registry +// @Test +// public void testEventStoredInRegistry() { +// // Subscribe listener (marks type ready) +// EventMeta meta = GlobalEventBus.subscribeAndRegister(TestEvent.class, e -> {}); +// +// // Post the event +// TestEvent event = new TestEvent("StoreTest"); +// GlobalEventBus.post(event); +// +// // Retrieve the last stored EventEntry +// EventRegistry.EventEntry storedEntry = EventRegistry.getLastEvent(TestEvent.class); +// +// assertNotNull(storedEntry); +// +// // Compare the inner event +// TestEvent storedEvent = storedEntry.getEvent(); +// assertEquals(event, storedEvent); +// } +} \ No newline at end of file