mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-06 16:16:44 +08:00
- 新增配置系统概述和核心能力介绍 - 添加Schema和YAML配置文件格式示例 - 提供推荐目录结构和接入模板 - 详细说明Generator集成和运行时加载流程 - 介绍VS Code工具和热重载功能 - 添加Godot引擎桥接适配器文档 - 说明运行时校验行为和错误处理机制 - 提供Architecture模块集成模板 - 记录当前限制和未来规划评估
72 lines
2.7 KiB
C#
72 lines
2.7 KiB
C#
using System;
|
|
using GFramework.Godot.Config;
|
|
using NUnit.Framework;
|
|
|
|
namespace GFramework.Godot.Tests.Config;
|
|
|
|
/// <summary>
|
|
/// 验证 Godot YAML 配置表来源描述会拒绝可能逃逸缓存根目录的不安全相对路径。
|
|
/// </summary>
|
|
[TestFixture]
|
|
public sealed class GodotYamlConfigTableSourceTests
|
|
{
|
|
/// <summary>
|
|
/// 验证配置目录路径必须保持为无根、无遍历段的安全相对路径。
|
|
/// </summary>
|
|
/// <param name="configRelativePath">待验证的配置目录路径。</param>
|
|
[TestCase("../outside")]
|
|
[TestCase("./monster")]
|
|
[TestCase("monster/../outside")]
|
|
[TestCase("monster/./child")]
|
|
[TestCase("/monster")]
|
|
[TestCase("C:/monster")]
|
|
[TestCase("res://monster")]
|
|
[TestCase("user://monster")]
|
|
public void Constructor_Should_Throw_When_Config_Relative_Path_Is_Not_Safe(string configRelativePath)
|
|
{
|
|
var exception = Assert.Throws<ArgumentException>(() =>
|
|
_ = new GodotYamlConfigTableSource("monster", configRelativePath));
|
|
|
|
Assert.That(exception!.ParamName, Is.EqualTo("configRelativePath"));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 验证 schema 路径在提供时也必须满足同样的安全相对路径约束。
|
|
/// </summary>
|
|
/// <param name="schemaRelativePath">待验证的 schema 路径。</param>
|
|
[TestCase("../schemas/monster.schema.json")]
|
|
[TestCase("./schemas/monster.schema.json")]
|
|
[TestCase("schemas/../monster.schema.json")]
|
|
[TestCase("schemas/./monster.schema.json")]
|
|
[TestCase("/schemas/monster.schema.json")]
|
|
[TestCase("C:/schemas/monster.schema.json")]
|
|
[TestCase("res://schemas/monster.schema.json")]
|
|
[TestCase("user://schemas/monster.schema.json")]
|
|
public void Constructor_Should_Throw_When_Schema_Relative_Path_Is_Not_Safe(string schemaRelativePath)
|
|
{
|
|
var exception = Assert.Throws<ArgumentException>(() =>
|
|
_ = new GodotYamlConfigTableSource("monster", "monster", schemaRelativePath));
|
|
|
|
Assert.That(exception!.ParamName, Is.EqualTo("schemaRelativePath"));
|
|
}
|
|
|
|
/// <summary>
|
|
/// 验证合法的相对目录和 schema 路径仍可正常构造元数据对象。
|
|
/// </summary>
|
|
[Test]
|
|
public void Constructor_Should_Accept_Safe_Relative_Paths()
|
|
{
|
|
var source = new GodotYamlConfigTableSource(
|
|
"monster",
|
|
"monster/configs",
|
|
"schemas/monster.schema.json");
|
|
|
|
Assert.Multiple(() =>
|
|
{
|
|
Assert.That(source.TableName, Is.EqualTo("monster"));
|
|
Assert.That(source.ConfigRelativePath, Is.EqualTo("monster/configs"));
|
|
Assert.That(source.SchemaRelativePath, Is.EqualTo("schemas/monster.schema.json"));
|
|
});
|
|
}
|
|
}
|