GFramework/GFramework.Core.Tests/Rule/ContextAwareEventExtensionsTests.cs
gewuyou ff553977e3 chore(license): 补齐 Apache-2.0 文件头治理
- 新增许可证文件头检查与修复脚本

- 补充维护者手动修复 PR 工作流和 CI 校验

- 更新贡献指南中的文件头说明

- 补齐仓库维护源码和配置文件的许可证声明
2026-05-03 19:39:49 +08:00

130 lines
3.4 KiB
C#

// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Core.Abstractions.Events;
using GFramework.Core.Abstractions.Rule;
using GFramework.Core.Architectures;
using GFramework.Core.Events;
using GFramework.Core.Extensions;
using GFramework.Core.Ioc;
using GFramework.Core.Rule;
namespace GFramework.Core.Tests.Rule;
/// <summary>
/// 测试 ContextAwareEventExtensions 的单元测试类
/// 验证事件发送、注册和取消注册功能
/// </summary>
[TestFixture]
public class ContextAwareEventExtensionsTests
{
[SetUp]
public void SetUp()
{
_container = new MicrosoftDiContainer();
_eventBus = new EventBus();
_container.Register<IEventBus>(_eventBus);
_context = new ArchitectureContext(_container);
_contextAware = new TestContextAware();
((IContextAware)_contextAware).SetContext(_context);
_container.Freeze();
}
[TearDown]
public void TearDown()
{
_container.Clear();
}
private TestContextAware _contextAware = null!;
private ArchitectureContext _context = null!;
private MicrosoftDiContainer _container = null!;
private EventBus _eventBus = null!;
[Test]
public void SendEvent_Should_Trigger_Registered_Handler()
{
// Arrange
var eventReceived = false;
_contextAware.RegisterEvent<TestEvent>(_ => eventReceived = true);
// Act
_contextAware.SendEvent(new TestEvent());
// Assert
Assert.That(eventReceived, Is.True);
}
[Test]
public void SendEvent_WithNew_Should_Create_And_Send_Event()
{
// Arrange
var eventReceived = false;
_contextAware.RegisterEvent<TestEventWithDefaultConstructor>(_ => eventReceived = true);
// Act
_contextAware.SendEvent<TestEventWithDefaultConstructor>();
// Assert
Assert.That(eventReceived, Is.True);
}
[Test]
public void RegisterEvent_Should_Return_UnRegister_Interface()
{
// Act
var unRegister = _contextAware.RegisterEvent<TestEvent>(_ => { });
// Assert
Assert.That(unRegister, Is.Not.Null);
Assert.That(unRegister, Is.InstanceOf<IUnRegister>());
}
[Test]
public void UnRegisterEvent_Should_Stop_Receiving_Events()
{
// Arrange
var eventCount = 0;
void Handler(TestEvent e) => eventCount++;
_contextAware.RegisterEvent<TestEvent>(Handler);
_contextAware.SendEvent(new TestEvent());
// Act
_contextAware.UnRegisterEvent<TestEvent>(Handler);
_contextAware.SendEvent(new TestEvent());
// Assert
Assert.That(eventCount, Is.EqualTo(1));
}
[Test]
public void SendEvent_Should_Pass_Event_Data()
{
// Arrange
TestEvent? receivedEvent = null;
_contextAware.RegisterEvent<TestEvent>(e => receivedEvent = e);
var sentEvent = new TestEvent { Data = "TestData" };
// Act
_contextAware.SendEvent(sentEvent);
// Assert
Assert.That(receivedEvent, Is.Not.Null);
Assert.That(receivedEvent!.Data, Is.EqualTo("TestData"));
}
private class TestEvent
{
public string Data { get; set; } = string.Empty;
}
private class TestEventWithDefaultConstructor
{
}
private class TestContextAware : ContextAwareBase
{
}
}