|
4 | 4 | */ |
5 | 5 | package net.minecraftforge.eventbus.test; |
6 | 6 |
|
| 7 | +import net.minecraftforge.eventbus.api.bus.BusGroup; |
7 | 8 | import net.minecraftforge.eventbus.api.bus.CancellableEventBus; |
8 | 9 | import net.minecraftforge.eventbus.api.bus.EventBus; |
9 | 10 | import net.minecraftforge.eventbus.api.event.RecordEvent; |
@@ -316,4 +317,43 @@ record CancellableTestEvent() implements Cancellable, RecordEvent { |
316 | 317 | CancellableTestEvent.BUS.removeListener(listener); |
317 | 318 | Assertions.assertFalse(CancellableTestEvent.BUS.hasListeners(), "CancellableTestEvent.BUS should no longer have listeners"); |
318 | 319 | } |
| 320 | + |
| 321 | + /** |
| 322 | + * Tests that {@link BusGroup#shutdown()} and {@link BusGroup#startup()} work as expected. |
| 323 | + */ |
| 324 | + @Test |
| 325 | + public void testShutdownAndStartup() { |
| 326 | + record TestEvent() implements RecordEvent { |
| 327 | + static final BusGroup TEST_GROUP = BusGroup.create(TestEvent.class.getName() + "testShutdown"); |
| 328 | + static final EventBus<TestEvent> BUS = EventBus.create(TEST_GROUP, TestEvent.class); |
| 329 | + } |
| 330 | + |
| 331 | + var called = new AtomicBoolean(); |
| 332 | + Assertions.assertFalse(called.get(), "Listeners should not have been called yet"); |
| 333 | + var listener1 = TestEvent.BUS.addListener(event -> called.set(true)); |
| 334 | + var listener2 = TestEvent.BUS.addListener(event -> called.set(true)); |
| 335 | + Assertions.assertFalse(called.get(), "Listeners should not have been called yet"); |
| 336 | + TestEvent.BUS.post(new TestEvent()); |
| 337 | + Assertions.assertTrue(called.get(), "Listeners should have been called"); |
| 338 | + |
| 339 | + called.set(false); |
| 340 | + TestEvent.TEST_GROUP.shutdown(); |
| 341 | + TestEvent.BUS.post(new TestEvent()); |
| 342 | + Assertions.assertFalse(called.get(), "Listeners should not have been called after shutdown"); |
| 343 | + |
| 344 | + TestEvent.BUS.removeListener(listener1); |
| 345 | + TestEvent.BUS.post(new TestEvent()); |
| 346 | + Assertions.assertFalse(called.get(), "Listener2 should not have been called after removal of Listener1"); |
| 347 | + |
| 348 | + TestEvent.BUS.removeListener(listener2); |
| 349 | + TestEvent.BUS.addListener(listener1); |
| 350 | + TestEvent.BUS.post(new TestEvent()); |
| 351 | + Assertions.assertFalse(called.get(), "Listener1 should not have been called after adding Listener2 back when the bus is shutdown"); |
| 352 | + |
| 353 | + TestEvent.TEST_GROUP.startup(); |
| 354 | + TestEvent.BUS.post(new TestEvent()); |
| 355 | + Assertions.assertTrue(called.get(), "Listener1 should have been called after startup"); |
| 356 | + |
| 357 | + TestEvent.TEST_GROUP.dispose(); |
| 358 | + } |
319 | 359 | } |
0 commit comments