GFramework/GFramework.SourceGenerators.Tests/Enums/EnumExtensionsGeneratorSnapshotTests.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

209 lines
8.1 KiB
C#

using System.IO;
using GFramework.Core.SourceGenerators.Enums;
using GFramework.SourceGenerators.Tests.Core;
namespace GFramework.SourceGenerators.Tests.Enums;
[TestFixture]
public class EnumExtensionsGeneratorSnapshotTests
{
[Test]
public async Task Snapshot_BasicEnum_IsMethods()
{
const string source = """
using System;
namespace GFramework.Core.SourceGenerators.Abstractions.Enums
{
[AttributeUsage(AttributeTargets.Enum)]
public sealed class GenerateEnumExtensionsAttribute : Attribute
{
public bool GenerateIsMethods { get; set; } = true;
public bool GenerateIsInMethod { get; set; } = true;
}
}
namespace TestApp
{
using GFramework.Core.SourceGenerators.Abstractions.Enums;
[GenerateEnumExtensions]
public enum Status
{
Active,
Inactive,
Pending
}
}
""";
await GeneratorSnapshotTest<EnumExtensionsGenerator>.RunAsync(
source,
Path.Combine(
TestContext.CurrentContext.TestDirectory,
"enums",
"snapshots",
"EnumExtensionsGenerator",
"BasicEnum_IsMethods"));
}
[Test]
public async Task Snapshot_BasicEnum_IsInMethod()
{
const string source = """
using System;
namespace GFramework.Core.SourceGenerators.Abstractions.Enums
{
[AttributeUsage(AttributeTargets.Enum)]
public sealed class GenerateEnumExtensionsAttribute : Attribute
{
public bool GenerateIsMethods { get; set; } = true;
public bool GenerateIsInMethod { get; set; } = true;
}
}
namespace TestApp
{
using GFramework.Core.SourceGenerators.Abstractions.Enums;
[GenerateEnumExtensions]
public enum Status
{
Active,
Inactive
}
}
""";
await GeneratorSnapshotTest<EnumExtensionsGenerator>.RunAsync(
source,
Path.Combine(
TestContext.CurrentContext.TestDirectory,
"enums",
"snapshots",
"EnumExtensionsGenerator",
"BasicEnum_IsInMethod"));
}
[Test]
public async Task Snapshot_EnumWithFlagValues()
{
const string source = """
using System;
namespace GFramework.Core.SourceGenerators.Abstractions.Enums
{
[AttributeUsage(AttributeTargets.Enum)]
public sealed class GenerateEnumExtensionsAttribute : Attribute
{
public bool GenerateIsMethods { get; set; } = true;
public bool GenerateIsInMethod { get; set; } = true;
}
}
namespace TestApp
{
using GFramework.Core.SourceGenerators.Abstractions.Enums;
[GenerateEnumExtensions]
[Flags]
public enum Permissions
{
None = 0,
Read = 1,
Write = 2,
Execute = 4
}
}
""";
await GeneratorSnapshotTest<EnumExtensionsGenerator>.RunAsync(
source,
Path.Combine(
TestContext.CurrentContext.TestDirectory,
"enums",
"snapshots",
"EnumExtensionsGenerator",
"EnumWithFlagValues"));
}
[Test]
public async Task Snapshot_DisableIsMethods()
{
const string source = """
using System;
namespace GFramework.Core.SourceGenerators.Abstractions.Enums
{
[AttributeUsage(AttributeTargets.Enum)]
public sealed class GenerateEnumExtensionsAttribute : Attribute
{
public bool GenerateIsMethods { get; set; } = true;
public bool GenerateIsInMethod { get; set; } = true;
}
}
namespace TestApp
{
using GFramework.Core.SourceGenerators.Abstractions.Enums;
[GenerateEnumExtensions(GenerateIsMethods = false)]
public enum Status
{
Active,
Inactive
}
}
""";
await GeneratorSnapshotTest<EnumExtensionsGenerator>.RunAsync(
source,
Path.Combine(
TestContext.CurrentContext.TestDirectory,
"enums",
"snapshots",
"EnumExtensionsGenerator",
"DisableIsMethods"));
}
[Test]
public async Task Snapshot_DisableIsInMethod()
{
const string source = """
using System;
namespace GFramework.Core.SourceGenerators.Abstractions.Enums
{
[AttributeUsage(AttributeTargets.Enum)]
public sealed class GenerateEnumExtensionsAttribute : Attribute
{
public bool GenerateIsMethods { get; set; } = true;
public bool GenerateIsInMethod { get; set; } = true;
}
}
namespace TestApp
{
using GFramework.Core.SourceGenerators.Abstractions.Enums;
[GenerateEnumExtensions(GenerateIsInMethod = false)]
public enum Status
{
Active,
Inactive
}
}
""";
await GeneratorSnapshotTest<EnumExtensionsGenerator>.RunAsync(
source,
Path.Combine(
TestContext.CurrentContext.TestDirectory,
"enums",
"snapshots",
"EnumExtensionsGenerator",
"DisableIsInMethod"));
}
}