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