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

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

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

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

112 lines
3.1 KiB
C#

// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Core.Abstractions.Coroutine;
using GFramework.Core.Coroutine.Instructions;
using NUnit.Framework;
namespace GFramework.Core.Tests.Coroutine;
/// <summary>
/// WaitUntilOrTimeout的单元测试类
/// </summary>
[TestFixture]
public class WaitUntilOrTimeoutTests
{
/// <summary>
/// 验证WaitUntilOrTimeout初始状态为未完成
/// </summary>
[Test]
public void WaitUntilOrTimeout_Should_Not_Be_Done_Initially()
{
var condition = false;
var wait = new WaitUntilOrTimeout(() => condition, 5.0);
Assert.That(wait.IsDone, Is.False);
Assert.That(wait.ConditionMet, Is.False);
Assert.That(wait.IsTimedOut, Is.False);
}
/// <summary>
/// 验证WaitUntilOrTimeout应该在条件满足时完成
/// </summary>
[Test]
public void WaitUntilOrTimeout_Should_Be_Done_When_Condition_Met()
{
var condition = false;
var wait = new WaitUntilOrTimeout(() => condition, 5.0);
condition = true;
wait.Update(0.1);
Assert.That(wait.IsDone, Is.True);
Assert.That(wait.ConditionMet, Is.True);
Assert.That(wait.IsTimedOut, Is.False);
}
/// <summary>
/// 验证WaitUntilOrTimeout应该在超时时完成
/// </summary>
[Test]
public void WaitUntilOrTimeout_Should_Be_Done_When_Timed_Out()
{
var condition = false;
var wait = new WaitUntilOrTimeout(() => condition, 1.0);
wait.Update(1.5);
Assert.That(wait.IsDone, Is.True);
Assert.That(wait.ConditionMet, Is.False);
Assert.That(wait.IsTimedOut, Is.True);
}
/// <summary>
/// 验证WaitUntilOrTimeout可以处理零超时时间
/// </summary>
[Test]
public void WaitUntilOrTimeout_Should_Handle_Zero_Timeout()
{
var condition = false;
var wait = new WaitUntilOrTimeout(() => condition, 0);
wait.Update(0.1);
Assert.That(wait.IsDone, Is.True);
Assert.That(wait.IsTimedOut, Is.True);
}
/// <summary>
/// 验证WaitUntilOrTimeout可以处理负数超时时间
/// </summary>
[Test]
public void WaitUntilOrTimeout_Should_Handle_Negative_Timeout()
{
var condition = false;
var wait = new WaitUntilOrTimeout(() => condition, -1.0);
wait.Update(0.1);
Assert.That(wait.IsDone, Is.True);
Assert.That(wait.IsTimedOut, Is.True);
}
/// <summary>
/// 验证WaitUntilOrTimeout抛出ArgumentNullException当predicate为null
/// </summary>
[Test]
public void WaitUntilOrTimeout_Should_Throw_ArgumentNullException_When_Predicate_Is_Null()
{
Assert.Throws<ArgumentNullException>(() => new WaitUntilOrTimeout(null!, 1.0));
}
/// <summary>
/// 验证WaitUntilOrTimeout实现IYieldInstruction接口
/// </summary>
[Test]
public void WaitUntilOrTimeout_Should_Implement_IYieldInstruction()
{
var wait = new WaitUntilOrTimeout(() => false, 1.0);
Assert.That(wait, Is.InstanceOf<IYieldInstruction>());
}
}