Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 0 additions & 26 deletions GFramework.Core.Abstractions/state/IStateMachine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,39 +17,19 @@ public interface IStateMachine
/// <param name="state">要注册的状态实例</param>
IStateMachine Register(IState state);

/// <summary>
/// 从状态机中注销指定类型的状态
/// </summary>
/// <typeparam name="T">要注销的状态类型,必须实现IState接口</typeparam>
IStateMachine Unregister<T>() where T : IState;

/// <summary>
/// 异步从状态机中注销指定类型的状态
/// </summary>
/// <typeparam name="T">要注销的状态类型,必须实现IState接口</typeparam>
Task<IStateMachine> UnregisterAsync<T>() where T : IState;

/// <summary>
/// 检查是否可以切换到指定类型的状态
/// </summary>
/// <typeparam name="T">目标状态类型,必须实现IState接口</typeparam>
/// <returns>如果可以切换则返回true,否则返回false</returns>
bool CanChangeTo<T>() where T : IState;

/// <summary>
/// 异步检查是否可以切换到指定类型的状态
/// </summary>
/// <typeparam name="T">目标状态类型,必须实现IState接口</typeparam>
/// <returns>如果可以切换则返回true,否则返回false</returns>
Task<bool> CanChangeToAsync<T>() where T : IState;

/// <summary>
/// 切换到指定类型的状态
/// </summary>
/// <typeparam name="T">要切换到的状态类型,必须实现IState接口</typeparam>
/// <returns>如果成功切换则返回true,否则返回false</returns>
bool ChangeTo<T>() where T : IState;

/// <summary>
/// 异步切换到指定类型的状态
/// </summary>
Expand Down Expand Up @@ -89,12 +69,6 @@ public interface IStateMachine
/// <returns>状态历史记录的只读副本</returns>
IReadOnlyList<IState> GetStateHistory();

/// <summary>
/// 回退到上一个状态
/// </summary>
/// <returns>如果成功回退则返回true,否则返回false</returns>
bool GoBack();

/// <summary>
/// 异步回退到上一个状态
/// </summary>
Expand Down
120 changes: 0 additions & 120 deletions GFramework.Core.Tests/state/StateMachineSystemTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -151,126 +151,6 @@ public void OnArchitecturePhase_Should_Not_Throw_Exception()
Throws.Nothing);
}

/// <summary>
/// 测试ChangeTo发送StateChangedEvent事件
/// 验证当状态机切换到新状态时,会正确触发StateChangedEvent事件,并且事件中的旧状态为null(首次切换)
/// </summary>
[Test]
public void ChangeTo_Should_Send_StateChangedEvent()
{
// 订阅StateChangedEvent事件以验证事件是否被正确发送
var eventReceived = false;
StateChangedEvent? receivedEvent = null;

_eventBus!.Register<StateChangedEvent>(e =>
{
eventReceived = true;
receivedEvent = e;
});

var state1 = new TestStateV5();
var state2 = new TestStateV5();

_stateMachine!.Register(state1);
_stateMachine.Register(state2);

_stateMachine.Init();
_stateMachine.ChangeTo<TestStateV5>();

Assert.That(eventReceived, Is.True);
Assert.That(receivedEvent!.OldState, Is.Null);
Assert.That(receivedEvent.NewState, Is.InstanceOf<TestStateV5>());
}

/// <summary>
/// 测试ChangeTo发送StateChangedEvent事件(包含旧状态)
/// 验证当状态机从一个状态切换到另一个状态时,会正确触发StateChangedEvent事件,
/// 并且事件中包含正确的旧状态和新状态信息
/// </summary>
[Test]
public void ChangeTo_Should_Send_StateChangedEvent_With_OldState()
{
// 订阅StateChangedEvent事件以验证事件是否被正确发送
var eventReceived = false;
StateChangedEvent? receivedEvent = null;

_eventBus!.Register<StateChangedEvent>(e =>
{
eventReceived = true;
receivedEvent = e;
});

var state1 = new TestStateV5();
var state2 = new TestStateV5();

_stateMachine!.Register(state1);
_stateMachine.Register(state2);

_stateMachine.Init();
_stateMachine.ChangeTo<TestStateV5>();
_stateMachine.ChangeTo<TestStateV5>();

Assert.That(eventReceived, Is.True);
Assert.That(receivedEvent!.OldState, Is.InstanceOf<TestStateV5>());
Assert.That(receivedEvent.NewState, Is.InstanceOf<TestStateV5>());
}

/// <summary>
/// 测试CanChangeTo方法对于已注册状态的工作情况
/// 验证当状态已注册到状态机中时,CanChangeTo方法应返回true
/// </summary>
[Test]
public void CanChangeTo_Should_Work_With_Registered_States()
{
var state = new TestStateV5();

_stateMachine!.Register(state);

var canChange = _stateMachine.CanChangeTo<TestStateV5>();
Assert.That(canChange, Is.True);
}

/// <summary>
/// 测试可以注册多个状态
/// 验证状态机能够成功注册多个不同的状态实例,并且能够切换到这些已注册的状态
/// </summary>
[Test]
public void Multiple_States_Should_Be_Registered()
{
var state1 = new TestStateV5 { Id = 1 };
var state2 = new TestStateV5 { Id = 2 };
var state3 = new TestStateV5 { Id = 3 };

_stateMachine!.Register(state1);
_stateMachine.Register(state2);
_stateMachine.Register(state3);

var canChange = _stateMachine.CanChangeTo<TestStateV5>();
Assert.That(canChange, Is.True);
}


/// <summary>
/// 测试状态机生命周期完整
/// </summary>
[Test]
public void StateMachine_Lifecycle_Should_Be_Complete()
{
var state1 = new TestStateV5();
var state2 = new TestStateV5();

_stateMachine!.Register(state1);
_stateMachine.Register(state2);

_stateMachine.Init();
Assert.That(_stateMachine.Current, Is.Null);

_stateMachine.ChangeTo<TestStateV5>();
Assert.That(_stateMachine.Current, Is.InstanceOf<TestStateV5>());

_stateMachine.Destroy();
}

/// <summary>
/// 测试异步ChangeToAsync发送StateChangedEvent事件
/// 验证当状态机使用异步方法切换到新状态时,会正确触发StateChangedEvent事件
Expand Down
Loading
Loading