using System.Reflection;
using GFramework.Core.Abstractions.enums;
using GFramework.Core.architecture;
using GFramework.Core.Tests.architecture;
using GFramework.Core.Tests.model;
using GFramework.Core.Tests.system;
using NUnit.Framework;
namespace GFramework.Core.Tests.tests;
///
/// 同步架构测试类,用于测试同步架构的功能和行为
///
///
/// 该测试类使用非并行执行模式,确保测试的隔离性和可靠性
///
[TestFixture]
[NonParallelizable]
public class SyncArchitectureTests : ArchitectureTestsBase
{
///
/// 创建同步测试架构实例
///
/// SyncTestArchitecture实例
protected override SyncTestArchitecture CreateArchitecture() => new SyncTestArchitecture();
///
/// 初始化架构异步方法
///
/// 表示异步操作的Task
protected override Task InitializeArchitecture()
{
Architecture!.Initialize();
return Task.CompletedTask;
}
///
/// 测试架构是否正确初始化所有组件
/// 验证初始化调用、运行时状态、架构阶段和模型系统注册
///
[Test]
public void Architecture_Should_Initialize_All_Components_Correctly()
{
// Act
Architecture!.Initialize();
// Assert
Assert.That(Architecture.InitCalled, Is.True);
Assert.That(Architecture.Runtime, Is.Not.Null);
// 通过反射获取当前架构阶段
var phaseProperty = typeof(Architecture)
.GetProperty("CurrentPhase", BindingFlags.Instance | BindingFlags.NonPublic);
var phase = (ArchitecturePhase)phaseProperty!.GetValue(Architecture)!;
Assert.That(phase, Is.EqualTo(ArchitecturePhase.Ready));
var context = Architecture.Context;
var model = context.GetModel();
Assert.That(model, Is.Not.Null);
Assert.That(model!.Initialized, Is.True);
var system = context.GetSystem();
Assert.That(system, Is.Not.Null);
Assert.That(system!.Initialized, Is.True);
}
///
/// 测试架构是否按类型正确注册上下文
///
[Test]
public void Architecture_Should_Register_Context_By_Type()
{
// Act
Architecture!.Initialize();
var ctx = GameContext.GetByType(Architecture!.GetType());
Assert.That(ctx, Is.Not.Null);
}
///
/// 测试当模型初始化失败时架构是否停止初始化
///
[Test]
public void Architecture_Should_Stop_Initialization_When_Model_Init_Fails()
{
Architecture!.RegisterModel(new FailingModel());
Assert.Throws(() => { Architecture!.Initialize(); });
}
}