2023-10-07 10:36:28 +00:00
|
|
|
using System.Collections.Generic;
|
|
|
|
using System.IO;
|
|
|
|
using System.Linq;
|
|
|
|
using System.Text;
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
using Microsoft.CodeAnalysis;
|
|
|
|
using Microsoft.CodeAnalysis.CSharp.Testing;
|
|
|
|
using Microsoft.CodeAnalysis.Testing;
|
|
|
|
using Microsoft.CodeAnalysis.Testing.Verifiers;
|
|
|
|
using Microsoft.CodeAnalysis.Text;
|
|
|
|
|
|
|
|
namespace Godot.SourceGenerators.Tests;
|
|
|
|
|
|
|
|
public static class CSharpSourceGeneratorVerifier<TSourceGenerator>
|
|
|
|
where TSourceGenerator : ISourceGenerator, new()
|
|
|
|
{
|
|
|
|
public class Test : CSharpSourceGeneratorTest<TSourceGenerator, XUnitVerifier>
|
|
|
|
{
|
|
|
|
public Test()
|
|
|
|
{
|
|
|
|
ReferenceAssemblies = ReferenceAssemblies.Net.Net60;
|
|
|
|
|
|
|
|
SolutionTransforms.Add((Solution solution, ProjectId projectId) =>
|
|
|
|
{
|
|
|
|
Project project = solution.GetProject(projectId)!
|
|
|
|
.AddMetadataReference(Constants.GodotSharpAssembly.CreateMetadataReference());
|
|
|
|
|
|
|
|
return project.Solution;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Task Verify(string source, params string[] generatedSources)
|
|
|
|
{
|
|
|
|
return Verify(new string[] { source }, generatedSources);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Task VerifyNoCompilerDiagnostics(string source, params string[] generatedSources)
|
|
|
|
{
|
|
|
|
return VerifyNoCompilerDiagnostics(new string[] { source }, generatedSources);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Task Verify(ICollection<string> sources, params string[] generatedSources)
|
|
|
|
{
|
|
|
|
return MakeVerifier(sources, generatedSources).RunAsync();
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Task VerifyNoCompilerDiagnostics(ICollection<string> sources, params string[] generatedSources)
|
|
|
|
{
|
|
|
|
var verifier = MakeVerifier(sources, generatedSources);
|
|
|
|
verifier.CompilerDiagnostics = CompilerDiagnostics.None;
|
|
|
|
return verifier.RunAsync();
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Test MakeVerifier(ICollection<string> sources, ICollection<string> generatedSources)
|
|
|
|
{
|
|
|
|
var verifier = new Test();
|
|
|
|
|
|
|
|
verifier.TestState.AnalyzerConfigFiles.Add(("/.globalconfig", $"""
|
|
|
|
is_global = true
|
|
|
|
build_property.GodotProjectDir = {Constants.ExecutingAssemblyPath}
|
|
|
|
"""));
|
|
|
|
|
Clean diagnostic rules
Move the following diagnostics into static readonly fields: GD0101, GD0102, GD0103, GD0104, GD0105, GD0106, GD0107, GD0201, GD0202, GD0203, GD0301, GD0302, GD0303, GD0401, GD0402.
To be more consistent, the titles for the following diagnostics were modified: GD0101, GD0105, GD0106, GD0302, GD0303, GD0401, GD0402. A subsequent update of the documentation repo is needed.
Tests for the following diagnostics were created: GD0201, GD0202, GD0203.
2024-02-17 20:12:06 +00:00
|
|
|
verifier.TestState.Sources.AddRange(sources.Select(source => (
|
|
|
|
source,
|
|
|
|
SourceText.From(File.ReadAllText(Path.Combine(Constants.SourceFolderPath, source)))
|
|
|
|
)));
|
2023-10-07 10:36:28 +00:00
|
|
|
|
Clean diagnostic rules
Move the following diagnostics into static readonly fields: GD0101, GD0102, GD0103, GD0104, GD0105, GD0106, GD0107, GD0201, GD0202, GD0203, GD0301, GD0302, GD0303, GD0401, GD0402.
To be more consistent, the titles for the following diagnostics were modified: GD0101, GD0105, GD0106, GD0302, GD0303, GD0401, GD0402. A subsequent update of the documentation repo is needed.
Tests for the following diagnostics were created: GD0201, GD0202, GD0203.
2024-02-17 20:12:06 +00:00
|
|
|
verifier.TestState.GeneratedSources.AddRange(generatedSources.Select(generatedSource => (
|
|
|
|
FullGeneratedSourceName(generatedSource),
|
|
|
|
SourceText.From(File.ReadAllText(Path.Combine(Constants.GeneratedSourceFolderPath, generatedSource)), Encoding.UTF8)
|
|
|
|
)));
|
2023-10-07 10:36:28 +00:00
|
|
|
|
|
|
|
return verifier;
|
|
|
|
}
|
|
|
|
|
|
|
|
private static string FullGeneratedSourceName(string name)
|
|
|
|
{
|
|
|
|
var generatorType = typeof(TSourceGenerator);
|
|
|
|
return Path.Combine(generatorType.Namespace!, generatorType.FullName!, name);
|
|
|
|
}
|
|
|
|
}
|