using System; using GFramework.Core.events; using NUnit.Framework; namespace GFramework.Core.Tests.events; [TestFixture] public class ArchitectureEventsTests { private EventBus? _eventBus; [SetUp] public void SetUp() { _eventBus = new EventBus(); } [Test] public void ArchitectureLifecycleReadyEvent_Should_Be_Created_And_Sent() { bool eventReceived = false; _eventBus!.Register(_ => eventReceived = true); _eventBus.Send(); Assert.That(eventReceived, Is.True); } [Test] public void ArchitectureDestroyingEvent_Should_Be_Created_And_Sent() { bool eventReceived = false; _eventBus!.Register(_ => eventReceived = true); _eventBus.Send(); Assert.That(eventReceived, Is.True); } [Test] public void ArchitectureDestroyedEvent_Should_Be_Created_And_Sent() { bool eventReceived = false; _eventBus!.Register(_ => eventReceived = true); _eventBus.Send(); Assert.That(eventReceived, Is.True); } [Test] public void ArchitectureFailedInitializationEvent_Should_Be_Created_And_Sent() { bool eventReceived = false; _eventBus!.Register(_ => eventReceived = true); _eventBus.Send(); Assert.That(eventReceived, Is.True); } [Test] public void Events_Should_Be_Sent_In_Correct_Order() { var events = new List(); _eventBus!.Register(_ => events.Add("Ready")); _eventBus!.Register(_ => events.Add("Destroying")); _eventBus!.Register(_ => events.Add("Destroyed")); _eventBus.Send(); _eventBus.Send(); _eventBus.Send(); Assert.That(events.Count, Is.EqualTo(3)); Assert.That(events[0], Is.EqualTo("Ready")); Assert.That(events[1], Is.EqualTo("Destroying")); Assert.That(events[2], Is.EqualTo("Destroyed")); } [Test] public void Multiple_Subscribers_Should_All_Receive_Events() { var count1 = 0; var count2 = 0; _eventBus!.Register(_ => count1++); _eventBus!.Register(_ => count2++); _eventBus.Send(); Assert.That(count1, Is.EqualTo(1)); Assert.That(count2, Is.EqualTo(1)); } [Test] public void Event_UnRegister_Should_Prevent_Future_Events() { var count = 0; var unregister = _eventBus!.Register(_ => count++); _eventBus.Send(); Assert.That(count, Is.EqualTo(1)); unregister.UnRegister(); _eventBus.Send(); Assert.That(count, Is.EqualTo(1)); } [Test] public void Different_Events_Should_Not_Interfere() { bool readyReceived = false; bool destroyingReceived = false; _eventBus!.Register(_ => readyReceived = true); _eventBus!.Register(_ => destroyingReceived = true); _eventBus.Send(); Assert.That(readyReceived, Is.True); Assert.That(destroyingReceived, Is.False); _eventBus.Send(); Assert.That(destroyingReceived, Is.True); } [Test] public void Event_Can_Be_Sent_Without_Subscribers() { Assert.That(() => _eventBus!.Send(), Throws.Nothing); } }