test(EnumExtensions): 添加枚举扩展生成器快照测试

- 实现基本枚举的 IsMethods 快照测试
- 实现基本枚举的 IsInMethod 快照测试
- 实现带标志值枚举的快照测试
- 实现禁用 IsMethods 选项的快照测试
- 实现禁用 IsInMethod 选项的快照测试
- 创建统一的源代码构建方法用于测试场景
This commit is contained in:
GeWuYou 2026-04-16 21:49:59 +08:00
parent 534818f5f6
commit 08b12ae852

View File

@ -7,35 +7,20 @@ namespace GFramework.SourceGenerators.Tests.Enums;
[TestFixture] [TestFixture]
public class EnumExtensionsGeneratorSnapshotTests public class EnumExtensionsGeneratorSnapshotTests
{ {
private const string EnumAttributeNamespace = "GFramework.Core.SourceGenerators.Abstractions.Enums";
[Test] [Test]
public async Task Snapshot_BasicEnum_IsMethods() public async Task Snapshot_BasicEnum_IsMethods()
{ {
const string source = """ var source = BuildSource(
using System; """
public enum Status
namespace GFramework.Core.SourceGenerators.Abstractions.Enums {
{ Active,
[AttributeUsage(AttributeTargets.Enum)] Inactive,
public sealed class GenerateEnumExtensionsAttribute : Attribute Pending
{ }
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( await GeneratorSnapshotTest<EnumExtensionsGenerator>.RunAsync(
source, source,
@ -50,31 +35,14 @@ public class EnumExtensionsGeneratorSnapshotTests
[Test] [Test]
public async Task Snapshot_BasicEnum_IsInMethod() public async Task Snapshot_BasicEnum_IsInMethod()
{ {
const string source = """ var source = BuildSource(
using System; """
public enum Status
namespace GFramework.Core.SourceGenerators.Abstractions.Enums {
{ Active,
[AttributeUsage(AttributeTargets.Enum)] Inactive
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( await GeneratorSnapshotTest<EnumExtensionsGenerator>.RunAsync(
source, source,
@ -89,34 +57,17 @@ public class EnumExtensionsGeneratorSnapshotTests
[Test] [Test]
public async Task Snapshot_EnumWithFlagValues() public async Task Snapshot_EnumWithFlagValues()
{ {
const string source = """ var source = BuildSource(
using System; """
[Flags]
namespace GFramework.Core.SourceGenerators.Abstractions.Enums public enum Permissions
{ {
[AttributeUsage(AttributeTargets.Enum)] None = 0,
public sealed class GenerateEnumExtensionsAttribute : Attribute Read = 1,
{ Write = 2,
public bool GenerateIsMethods { get; set; } = true; Execute = 4
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( await GeneratorSnapshotTest<EnumExtensionsGenerator>.RunAsync(
source, source,
@ -131,31 +82,15 @@ public class EnumExtensionsGeneratorSnapshotTests
[Test] [Test]
public async Task Snapshot_DisableIsMethods() public async Task Snapshot_DisableIsMethods()
{ {
const string source = """ var source = BuildSource(
using System; """
public enum Status
namespace GFramework.Core.SourceGenerators.Abstractions.Enums {
{ Active,
[AttributeUsage(AttributeTargets.Enum)] Inactive
public sealed class GenerateEnumExtensionsAttribute : Attribute }
{ """,
public bool GenerateIsMethods { get; set; } = true; "[GenerateEnumExtensions(GenerateIsMethods = false)]");
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( await GeneratorSnapshotTest<EnumExtensionsGenerator>.RunAsync(
source, source,
@ -170,31 +105,15 @@ public class EnumExtensionsGeneratorSnapshotTests
[Test] [Test]
public async Task Snapshot_DisableIsInMethod() public async Task Snapshot_DisableIsInMethod()
{ {
const string source = """ var source = BuildSource(
using System; """
public enum Status
namespace GFramework.Core.SourceGenerators.Abstractions.Enums {
{ Active,
[AttributeUsage(AttributeTargets.Enum)] Inactive
public sealed class GenerateEnumExtensionsAttribute : Attribute }
{ """,
public bool GenerateIsMethods { get; set; } = true; "[GenerateEnumExtensions(GenerateIsInMethod = false)]");
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( await GeneratorSnapshotTest<EnumExtensionsGenerator>.RunAsync(
source, source,
@ -205,4 +124,29 @@ public class EnumExtensionsGeneratorSnapshotTests
"EnumExtensionsGenerator", "EnumExtensionsGenerator",
"DisableIsInMethod")); "DisableIsInMethod"));
} }
private static string BuildSource(string enumBody, string attributeUsage = "[GenerateEnumExtensions]")
{
return $$"""
using System;
namespace {{EnumAttributeNamespace}}
{
[AttributeUsage(AttributeTargets.Enum)]
public sealed class GenerateEnumExtensionsAttribute : Attribute
{
public bool GenerateIsMethods { get; set; } = true;
public bool GenerateIsInMethod { get; set; } = true;
}
}
namespace TestApp
{
using {{EnumAttributeNamespace}};
{{attributeUsage}}
{{enumBody}}
}
""";
}
} }