using GFramework.SourceGenerators.rule; using GFramework.SourceGenerators.Tests.core; using NUnit.Framework; namespace GFramework.SourceGenerators.Tests.rule; /// /// 测试ContextAwareGenerator源代码生成器的功能 /// [TestFixture] public class ContextAwareGeneratorTests { /// /// 测试ContextAware代码生成功能 /// 验证当使用[ContextAware]特性标记的类能够正确生成上下文感知的相关代码 /// /// 异步任务 [Test] public async Task Generates_ContextAware_Code() { // 定义输入源代码,包含使用[ContextAware]特性的部分类 const string source = """ using System; namespace GFramework.SourceGenerators.Attributes.rule { [AttributeUsage(AttributeTargets.Class)] public sealed class ContextAwareAttribute : Attribute { } } namespace TestApp; using GFramework.SourceGenerators.Attributes.rule; [ContextAware] public partial class MyRule { } """; // 定义期望的生成结果代码 const string expected = """ // #nullable enable namespace TestApp; partial class MyRule : GFramework.Core.rule.IContextAware { protected GFramework.Core.architecture.IArchitectureContext Context { get; private set; } = null!; void GFramework.Core.rule.IContextAware.SetContext( GFramework.Core.architecture.IArchitectureContext context) { Context = context; } } """; // 执行源代码生成器测试 await GeneratorTest.RunAsync( source, ("MyRule.ContextAware.g.cs", expected) ); } }