using GFramework.Core.events;
using NUnit.Framework;
namespace GFramework.Core.Tests.events;
///
/// ArchitectureEvents类的单元测试
/// 测试内容包括:
/// - ArchitectureLifecycleReadyEvent事件触发
/// - ArchitectureDestroyingEvent事件触发
/// - ArchitectureDestroyedEvent事件触发
/// - ArchitectureFailedInitializationEvent事件触发
/// - 事件的参数传递
/// - 事件的订阅和取消订阅
/// - 事件顺序验证(LifecycleReady -> Destroying -> Destroyed)
///
[TestFixture]
public class ArchitectureEventsTests
{
[SetUp]
public void SetUp()
{
_eventBus = new EventBus();
}
private EventBus? _eventBus;
///
/// 测试ArchitectureLifecycleReadyEvent事件可以创建并发送
///
[Test]
public void ArchitectureLifecycleReadyEvent_Should_Be_Created_And_Sent()
{
bool eventReceived = false;
_eventBus!.Register(_ => eventReceived = true);
_eventBus.Send();
Assert.That(eventReceived, Is.True);
}
///
/// 测试ArchitectureDestroyingEvent事件可以创建并发送
///
[Test]
public void ArchitectureDestroyingEvent_Should_Be_Created_And_Sent()
{
bool eventReceived = false;
_eventBus!.Register(_ => eventReceived = true);
_eventBus.Send();
Assert.That(eventReceived, Is.True);
}
///
/// 测试ArchitectureDestroyedEvent事件可以创建并发送
///
[Test]
public void ArchitectureDestroyedEvent_Should_Be_Created_And_Sent()
{
bool eventReceived = false;
_eventBus!.Register(_ => eventReceived = true);
_eventBus.Send();
Assert.That(eventReceived, Is.True);
}
///
/// 测试ArchitectureFailedInitializationEvent事件可以创建并发送
///
[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);
}
}