GFramework/GFramework.SourceGenerators.Tests/Bases/PriorityGeneratorSnapshotTests.cs
GeWuYou 534818f5f6 docs(source-generators): 添加源代码生成器文档和相关常量定义
- 新增完整的 GFramework.SourceGenerators 文档,涵盖所有核心特性
- 添加 Log 属性生成器、Config Schema 生成器等详细使用说明
- 添加 ContextAware、GenerateEnumExtensions 等属性生成器文档
- 添加 Godot 专用生成器如 GetNode、BindNodeSignal 等使用指南
- 添加 AutoRegisterModule、AutoUiPage、AutoScene 等自动化工具文档
- 添加诊断信息、性能优势、使用示例和最佳实践章节
- 新增 PathContests 常量类定义 GFramework 项目路径常量
- 添加 ContextRegistrationAnalyzerTests 测试类验证上下文注册分析器
2026-04-16 21:40:47 +08:00

215 lines
8.2 KiB
C#

using System.IO;
using GFramework.Core.SourceGenerators.Bases;
using GFramework.SourceGenerators.Tests.Core;
namespace GFramework.SourceGenerators.Tests.Bases;
/// <summary>
/// Priority 生成器快照测试类
/// </summary>
[TestFixture]
public class PriorityGeneratorSnapshotTests
{
/// <summary>
/// 测试基本的 Priority 特性生成
/// </summary>
[Test]
public async Task Snapshot_BasicPriority()
{
const string source = """
using System;
namespace GFramework.Core.SourceGenerators.Abstractions.Bases
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
public sealed class PriorityAttribute : Attribute
{
public int Value { get; }
public PriorityAttribute(int value) { Value = value; }
}
}
namespace GFramework.Core.Abstractions.Bases
{
public interface IPrioritized
{
int Priority { get; }
}
}
namespace TestApp
{
using GFramework.Core.SourceGenerators.Abstractions.Bases;
[Priority(10)]
public partial class MySystem
{
}
}
""";
await GeneratorSnapshotTest<PriorityGenerator>.RunAsync(
source,
Path.Combine(
TestContext.CurrentContext.TestDirectory,
"bases",
"snapshots",
"PriorityGenerator",
"BasicPriority"));
}
/// <summary>
/// 测试负数优先级
/// </summary>
[Test]
public async Task Snapshot_NegativePriority()
{
const string source = """
using System;
namespace GFramework.Core.SourceGenerators.Abstractions.Bases
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
public sealed class PriorityAttribute : Attribute
{
public int Value { get; }
public PriorityAttribute(int value) { Value = value; }
}
}
namespace GFramework.Core.Abstractions.Bases
{
public interface IPrioritized
{
int Priority { get; }
}
}
namespace TestApp
{
using GFramework.Core.SourceGenerators.Abstractions.Bases;
[Priority(-100)]
public partial class CriticalSystem
{
}
}
""";
await GeneratorSnapshotTest<PriorityGenerator>.RunAsync(
source,
Path.Combine(
TestContext.CurrentContext.TestDirectory,
"bases",
"snapshots",
"PriorityGenerator",
"NegativePriority"));
}
/// <summary>
/// 测试使用 PriorityGroup 枚举
/// </summary>
[Test]
public async Task Snapshot_PriorityGroup()
{
const string source = """
using System;
namespace GFramework.Core.SourceGenerators.Abstractions.Bases
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
public sealed class PriorityAttribute : Attribute
{
public int Value { get; }
public PriorityAttribute(int value) { Value = value; }
}
}
namespace GFramework.Core.Abstractions.Bases
{
public interface IPrioritized
{
int Priority { get; }
}
public static class PriorityGroup
{
public const int Critical = -100;
public const int High = -50;
public const int Normal = 0;
public const int Low = 50;
public const int Deferred = 100;
}
}
namespace TestApp
{
using GFramework.Core.SourceGenerators.Abstractions.Bases;
using GFramework.Core.Abstractions.Bases;
[Priority(PriorityGroup.High)]
public partial class HighPrioritySystem
{
}
}
""";
await GeneratorSnapshotTest<PriorityGenerator>.RunAsync(
source,
Path.Combine(
TestContext.CurrentContext.TestDirectory,
"bases",
"snapshots",
"PriorityGenerator",
"PriorityGroup"));
}
/// <summary>
/// 测试泛型类支持
/// </summary>
[Test]
public async Task Snapshot_GenericClass()
{
const string source = """
using System;
namespace GFramework.Core.SourceGenerators.Abstractions.Bases
{
[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
public sealed class PriorityAttribute : Attribute
{
public int Value { get; }
public PriorityAttribute(int value) { Value = value; }
}
}
namespace GFramework.Core.Abstractions.Bases
{
public interface IPrioritized
{
int Priority { get; }
}
}
namespace TestApp
{
using GFramework.Core.SourceGenerators.Abstractions.Bases;
[Priority(20)]
public partial class GenericSystem<T>
{
}
}
""";
await GeneratorSnapshotTest<PriorityGenerator>.RunAsync(
source,
Path.Combine(
TestContext.CurrentContext.TestDirectory,
"bases",
"snapshots",
"PriorityGenerator",
"GenericClass"));
}
}