using System.IO; using GFramework.SourceGenerators.Bases; using GFramework.SourceGenerators.Tests.Core; using NUnit.Framework; namespace GFramework.SourceGenerators.Tests.Bases; /// /// Priority 生成器快照测试类 /// [TestFixture] public class PriorityGeneratorSnapshotTests { /// /// 测试基本的 Priority 特性生成 /// [Test] public async Task Snapshot_BasicPriority() { const string source = """ using System; namespace GFramework.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.SourceGenerators.Abstractions.Bases; [Priority(10)] public partial class MySystem { } } """; await GeneratorSnapshotTest.RunAsync( source, Path.Combine( TestContext.CurrentContext.TestDirectory, "bases", "snapshots", "PriorityGenerator", "BasicPriority")); } /// /// 测试负数优先级 /// [Test] public async Task Snapshot_NegativePriority() { const string source = """ using System; namespace GFramework.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.SourceGenerators.Abstractions.Bases; [Priority(-100)] public partial class CriticalSystem { } } """; await GeneratorSnapshotTest.RunAsync( source, Path.Combine( TestContext.CurrentContext.TestDirectory, "bases", "snapshots", "PriorityGenerator", "NegativePriority")); } /// /// 测试使用 PriorityGroup 枚举 /// [Test] public async Task Snapshot_PriorityGroup() { const string source = """ using System; namespace GFramework.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.SourceGenerators.Abstractions.Bases; using GFramework.Core.Abstractions.Bases; [Priority(PriorityGroup.High)] public partial class HighPrioritySystem { } } """; await GeneratorSnapshotTest.RunAsync( source, Path.Combine( TestContext.CurrentContext.TestDirectory, "bases", "snapshots", "PriorityGenerator", "PriorityGroup")); } /// /// 测试泛型类支持 /// [Test] public async Task Snapshot_GenericClass() { const string source = """ using System; namespace GFramework.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.SourceGenerators.Abstractions.Bases; [Priority(20)] public partial class GenericSystem { } } """; await GeneratorSnapshotTest.RunAsync( source, Path.Combine( TestContext.CurrentContext.TestDirectory, "bases", "snapshots", "PriorityGenerator", "GenericClass")); } }