diff --git a/GFramework.SourceGenerators.Tests/Core/GeneratorSnapshotTest.cs b/GFramework.SourceGenerators.Tests/Core/GeneratorSnapshotTest.cs index 129007fe..fcc0df3e 100644 --- a/GFramework.SourceGenerators.Tests/Core/GeneratorSnapshotTest.cs +++ b/GFramework.SourceGenerators.Tests/Core/GeneratorSnapshotTest.cs @@ -1,7 +1,4 @@ using System.IO; -using Microsoft.CodeAnalysis.CSharp.Testing; -using Microsoft.CodeAnalysis.Testing; -using NUnit.Framework; namespace GFramework.SourceGenerators.Tests.Core; @@ -17,10 +14,12 @@ public static class GeneratorSnapshotTest /// /// 输入的源代码字符串 /// 快照文件存储的文件夹路径 + /// 将生成文件名映射为快照文件名的规则;为空时使用原始生成文件名。 /// 异步任务 public static async Task RunAsync( string source, - string snapshotFolder) + string snapshotFolder, + Func? snapshotFileNameSelector = null) { var test = new CSharpSourceGeneratorTest { @@ -38,9 +37,11 @@ public static class GeneratorSnapshotTest foreach (var (filename, content) in generated) { + // 不同测试套件可能需要将生成文件映射到非 .cs 快照,以避免测试资产被当作可编译源码参与构建。 + var snapshotFileName = snapshotFileNameSelector?.Invoke(filename) ?? filename; var path = Path.Combine( snapshotFolder, - filename); + snapshotFileName); if (!File.Exists(path)) { @@ -57,7 +58,7 @@ public static class GeneratorSnapshotTest Assert.That( Normalize(expected), Is.EqualTo(Normalize(content.ToString())), - $"Snapshot mismatch: {filename}"); + $"Snapshot mismatch: {snapshotFileName}"); } } @@ -70,4 +71,4 @@ public static class GeneratorSnapshotTest { return text.Replace("\r\n", "\n").Trim(); } -} \ No newline at end of file +} diff --git a/GFramework.SourceGenerators.Tests/Enums/EnumExtensionsGeneratorSnapshotTests.cs b/GFramework.SourceGenerators.Tests/Enums/EnumExtensionsGeneratorSnapshotTests.cs index ce109a36..459f4640 100644 --- a/GFramework.SourceGenerators.Tests/Enums/EnumExtensionsGeneratorSnapshotTests.cs +++ b/GFramework.SourceGenerators.Tests/Enums/EnumExtensionsGeneratorSnapshotTests.cs @@ -30,7 +30,8 @@ public class EnumExtensionsGeneratorSnapshotTests await GeneratorSnapshotTest.RunAsync( source, - GetSnapshotFolder("BasicEnum_IsMethods")); + GetSnapshotFolder("BasicEnum_IsMethods"), + GetSnapshotFileName); } /// @@ -50,7 +51,8 @@ public class EnumExtensionsGeneratorSnapshotTests await GeneratorSnapshotTest.RunAsync( source, - GetSnapshotFolder("BasicEnum_IsInMethod")); + GetSnapshotFolder("BasicEnum_IsInMethod"), + GetSnapshotFileName); } /// @@ -73,7 +75,8 @@ public class EnumExtensionsGeneratorSnapshotTests await GeneratorSnapshotTest.RunAsync( source, - GetSnapshotFolder("EnumWithFlagValues")); + GetSnapshotFolder("EnumWithFlagValues"), + GetSnapshotFileName); } /// @@ -94,7 +97,8 @@ public class EnumExtensionsGeneratorSnapshotTests await GeneratorSnapshotTest.RunAsync( source, - GetSnapshotFolder("DisableIsMethods")); + GetSnapshotFolder("DisableIsMethods"), + GetSnapshotFileName); } /// @@ -115,7 +119,8 @@ public class EnumExtensionsGeneratorSnapshotTests await GeneratorSnapshotTest.RunAsync( source, - GetSnapshotFolder("DisableIsInMethod")); + GetSnapshotFolder("DisableIsInMethod"), + GetSnapshotFileName); } /// @@ -136,7 +141,8 @@ public class EnumExtensionsGeneratorSnapshotTests await GeneratorSnapshotTest.RunAsync( source, - GetSnapshotFolder("DisableAllGeneratedMethods")); + GetSnapshotFolder("DisableAllGeneratedMethods"), + GetSnapshotFileName); } /// @@ -158,6 +164,16 @@ public class EnumExtensionsGeneratorSnapshotTests scenarioName)); } + /// + /// 将生成器输出文件名映射为非 C# 快照文件名,避免快照资产被命名校验和项目编译误判为源码。 + /// + /// 生成器输出的提示文件名。 + /// 对应的快照文件名。 + private static string GetSnapshotFileName(string generatedFileName) + { + return Path.ChangeExtension(generatedFileName, ".txt"); + } + /// /// 构造最小自洽的测试输入源码,以稳定驱动枚举扩展生成器的快照测试。 /// diff --git a/GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/BasicEnum_IsInMethod/Status.EnumExtensions.g.cs b/GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/BasicEnum_IsInMethod/Status.EnumExtensions.g.txt similarity index 100% rename from GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/BasicEnum_IsInMethod/Status.EnumExtensions.g.cs rename to GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/BasicEnum_IsInMethod/Status.EnumExtensions.g.txt diff --git a/GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/BasicEnum_IsMethods/Status.EnumExtensions.g.cs b/GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/BasicEnum_IsMethods/Status.EnumExtensions.g.txt similarity index 100% rename from GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/BasicEnum_IsMethods/Status.EnumExtensions.g.cs rename to GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/BasicEnum_IsMethods/Status.EnumExtensions.g.txt diff --git a/GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/DisableAllGeneratedMethods/Status.EnumExtensions.g.cs b/GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/DisableAllGeneratedMethods/Status.EnumExtensions.g.txt similarity index 100% rename from GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/DisableAllGeneratedMethods/Status.EnumExtensions.g.cs rename to GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/DisableAllGeneratedMethods/Status.EnumExtensions.g.txt diff --git a/GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/DisableIsInMethod/Status.EnumExtensions.g.cs b/GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/DisableIsInMethod/Status.EnumExtensions.g.txt similarity index 100% rename from GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/DisableIsInMethod/Status.EnumExtensions.g.cs rename to GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/DisableIsInMethod/Status.EnumExtensions.g.txt diff --git a/GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/DisableIsMethods/Status.EnumExtensions.g.cs b/GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/DisableIsMethods/Status.EnumExtensions.g.txt similarity index 100% rename from GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/DisableIsMethods/Status.EnumExtensions.g.cs rename to GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/DisableIsMethods/Status.EnumExtensions.g.txt diff --git a/GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/EnumWithFlagValues/Permissions.EnumExtensions.g.cs b/GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/EnumWithFlagValues/Permissions.EnumExtensions.g.txt similarity index 100% rename from GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/EnumWithFlagValues/Permissions.EnumExtensions.g.cs rename to GFramework.SourceGenerators.Tests/Enums/snapshots/EnumExtensionsGenerator/EnumWithFlagValues/Permissions.EnumExtensions.g.txt diff --git a/GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj b/GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj index 5bd55cf2..e01f8c96 100644 --- a/GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj +++ b/GFramework.SourceGenerators.Tests/GFramework.SourceGenerators.Tests.csproj @@ -30,7 +30,9 @@ + +