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

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

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

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

64 lines
1.9 KiB
C#

// Copyright (c) 2025-2026 GeWuYou
// SPDX-License-Identifier: Apache-2.0
using GFramework.Game.Config;
namespace GFramework.Game.Tests.Config;
/// <summary>
/// 验证公开 YAML 文本序列化入口的换行与参数契约。
/// </summary>
[TestFixture]
public sealed class YamlConfigTextSerializerTests
{
/// <summary>
/// 验证序列化结果会稳定地以 LF 作为尾随换行,
/// 避免不同宿主平台的行尾约定影响生成内容。
/// </summary>
[Test]
public void Serialize_Should_Use_Trailing_Lf_Newline()
{
var yaml = YamlConfigTextSerializer.Serialize(new MonsterYamlStub
{
Id = 1,
Name = "Slime"
});
Assert.Multiple(() =>
{
Assert.That(yaml, Does.Contain("id: 1"));
Assert.That(yaml, Does.Contain("name: Slime"));
Assert.That(yaml.EndsWith("\n", StringComparison.Ordinal), Is.True);
Assert.That(yaml.EndsWith("\r\n", StringComparison.Ordinal), Is.False);
});
}
/// <summary>
/// 验证空对象引用会继续通过参数异常暴露给调用方。
/// </summary>
[Test]
public void Serialize_Should_Throw_When_Value_Is_Null()
{
var exception = Assert.Throws<ArgumentNullException>(() =>
YamlConfigTextSerializer.Serialize<MonsterYamlStub>(null!));
Assert.That(exception!.ParamName, Is.EqualTo("value"));
}
/// <summary>
/// 用于 YAML 序列化测试的最小配置对象。
/// </summary>
private sealed class MonsterYamlStub
{
/// <summary>
/// 获取或设置配置标识。
/// </summary>
public int Id { get; init; }
/// <summary>
/// 获取或设置配置名称。
/// </summary>
public string Name { get; init; } = string.Empty;
}
}