CSharpAnalyzerVerifier.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System.Collections.Generic;
  2. using System.IO;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.CodeAnalysis;
  6. using Microsoft.CodeAnalysis.CSharp.Testing;
  7. using Microsoft.CodeAnalysis.Diagnostics;
  8. using Microsoft.CodeAnalysis.Testing;
  9. using Microsoft.CodeAnalysis.Testing.Verifiers;
  10. using Microsoft.CodeAnalysis.Text;
  11. namespace Godot.SourceGenerators.Tests;
  12. public static class CSharpAnalyzerVerifier<TAnalyzer>
  13. where TAnalyzer : DiagnosticAnalyzer, new()
  14. {
  15. public class Test : CSharpAnalyzerTest<TAnalyzer, XUnitVerifier>
  16. {
  17. public Test()
  18. {
  19. ReferenceAssemblies = ReferenceAssemblies.Net.Net60;
  20. SolutionTransforms.Add((Solution solution, ProjectId projectId) =>
  21. {
  22. Project project =
  23. solution.GetProject(projectId)!.AddMetadataReference(Constants.GodotSharpAssembly
  24. .CreateMetadataReference());
  25. return project.Solution;
  26. });
  27. }
  28. }
  29. public static Task Verify(string sources, params DiagnosticResult[] expected)
  30. {
  31. return MakeVerifier(new string[] { sources }, expected).RunAsync();
  32. }
  33. public static Test MakeVerifier(ICollection<string> sources, params DiagnosticResult[] expected)
  34. {
  35. var verifier = new Test();
  36. verifier.TestState.AnalyzerConfigFiles.Add(("/.globalconfig", $"""
  37. is_global = true
  38. build_property.GodotProjectDir = {Constants.ExecutingAssemblyPath}
  39. """));
  40. verifier.TestState.Sources.AddRange(sources.Select(source =>
  41. {
  42. return (source, SourceText.From(File.ReadAllText(Path.Combine(Constants.SourceFolderPath, source))));
  43. }));
  44. verifier.ExpectedDiagnostics.AddRange(expected);
  45. return verifier;
  46. }
  47. }