diff --git a/Directory.Packages.props b/Directory.Packages.props index cf96f81..375dc3e 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -30,10 +30,12 @@ + + all analyzers @@ -55,4 +57,4 @@ - \ No newline at end of file + diff --git a/tests/Visus.AddressValidation.Integration.FedEx.Tests/ModuleInitializer.cs b/tests/Visus.AddressValidation.Integration.FedEx.Tests/ModuleInitializer.cs new file mode 100644 index 0000000..3f36c37 --- /dev/null +++ b/tests/Visus.AddressValidation.Integration.FedEx.Tests/ModuleInitializer.cs @@ -0,0 +1,15 @@ +namespace Visus.AddressValidation.Integration.FedEx.Tests; + +using System.Runtime.CompilerServices; +using JetBrains.Annotations; +using VerifyTests.DiffPlex; + +[UsedImplicitly] +internal static class ModuleInitializer +{ + [ModuleInitializer] + public static void Initialize() + { + VerifyDiffPlex.Initialize(OutputType.Compact); + } +} diff --git a/tests/Visus.AddressValidation.Integration.Google.Tests/ModuleInitializer.cs b/tests/Visus.AddressValidation.Integration.Google.Tests/ModuleInitializer.cs new file mode 100644 index 0000000..62834f8 --- /dev/null +++ b/tests/Visus.AddressValidation.Integration.Google.Tests/ModuleInitializer.cs @@ -0,0 +1,15 @@ +namespace Visus.AddressValidation.Integration.Google.Tests; + +using System.Runtime.CompilerServices; +using JetBrains.Annotations; +using VerifyTests.DiffPlex; + +[UsedImplicitly] +internal static class ModuleInitializer +{ + [ModuleInitializer] + public static void Initialize() + { + VerifyDiffPlex.Initialize(OutputType.Compact); + } +} diff --git a/tests/Visus.AddressValidation.Integration.PitneyBowes.Tests/ModuleInitializer.cs b/tests/Visus.AddressValidation.Integration.PitneyBowes.Tests/ModuleInitializer.cs new file mode 100644 index 0000000..5c653a8 --- /dev/null +++ b/tests/Visus.AddressValidation.Integration.PitneyBowes.Tests/ModuleInitializer.cs @@ -0,0 +1,15 @@ +namespace Visus.AddressValidation.Integration.PitneyBowes.Tests; + +using System.Runtime.CompilerServices; +using JetBrains.Annotations; +using VerifyTests.DiffPlex; + +[UsedImplicitly] +internal static class ModuleInitializer +{ + [ModuleInitializer] + public static void Initialize() + { + VerifyDiffPlex.Initialize(OutputType.Compact); + } +} diff --git a/tests/Visus.AddressValidation.Integration.Ups.Tests/ModuleInitializer.cs b/tests/Visus.AddressValidation.Integration.Ups.Tests/ModuleInitializer.cs new file mode 100644 index 0000000..6712fdb --- /dev/null +++ b/tests/Visus.AddressValidation.Integration.Ups.Tests/ModuleInitializer.cs @@ -0,0 +1,15 @@ +namespace Visus.AddressValidation.Integration.Ups.Tests; + +using System.Runtime.CompilerServices; +using JetBrains.Annotations; +using VerifyTests.DiffPlex; + +[UsedImplicitly] +internal static class ModuleInitializer +{ + [ModuleInitializer] + public static void Initialize() + { + VerifyDiffPlex.Initialize(OutputType.Compact); + } +} diff --git a/tests/Visus.AddressValidation.SourceGeneration.Tests/CustomResponseDataGeneratorTests.Should_Generate_GetCustomResponseData_For_Nested_Class#Visus_AddressValidation_SourceGeneration_Tests_Response_ApiData_GetCustomResponseData.g.verified.cs b/tests/Visus.AddressValidation.SourceGeneration.Tests/CustomResponseDataGeneratorTests.Should_Generate_GetCustomResponseData_For_Nested_Class#Visus_AddressValidation_SourceGeneration_Tests_Response_ApiData_GetCustomResponseData.g.verified.cs new file mode 100644 index 0000000..ea10667 --- /dev/null +++ b/tests/Visus.AddressValidation.SourceGeneration.Tests/CustomResponseDataGeneratorTests.Should_Generate_GetCustomResponseData_For_Nested_Class#Visus_AddressValidation_SourceGeneration_Tests_Response_ApiData_GetCustomResponseData.g.verified.cs @@ -0,0 +1,25 @@ +//HintName: Visus_AddressValidation_SourceGeneration_Tests_Response_ApiData_GetCustomResponseData.g.cs +// + +#nullable enable annotations +#nullable disable warnings + +using System.Collections.Generic; + +namespace Visus.AddressValidation.SourceGeneration.Tests +{ + internal partial class Response + { + private partial class ApiData + { + public IReadOnlyDictionary GetCustomResponseData() + { + return new Dictionary(StringComparer.OrdinalIgnoreCase) + { + ["responseId"] = ResponseId, + ["response"] = ResponseText + }; + } + } + } +} \ No newline at end of file diff --git a/tests/Visus.AddressValidation.SourceGeneration.Tests/CustomResponseDataGeneratorTests.Should_Generate_GetCustomResponseData_For_Root_Class#Visus_AddressValidation_SourceGeneration_Tests_ApiResponse_GetCustomResponseData.g.verified.cs b/tests/Visus.AddressValidation.SourceGeneration.Tests/CustomResponseDataGeneratorTests.Should_Generate_GetCustomResponseData_For_Root_Class#Visus_AddressValidation_SourceGeneration_Tests_ApiResponse_GetCustomResponseData.g.verified.cs new file mode 100644 index 0000000..3a5cb5e --- /dev/null +++ b/tests/Visus.AddressValidation.SourceGeneration.Tests/CustomResponseDataGeneratorTests.Should_Generate_GetCustomResponseData_For_Root_Class#Visus_AddressValidation_SourceGeneration_Tests_ApiResponse_GetCustomResponseData.g.verified.cs @@ -0,0 +1,22 @@ +//HintName: Visus_AddressValidation_SourceGeneration_Tests_ApiResponse_GetCustomResponseData.g.cs +// + +#nullable enable annotations +#nullable disable warnings + +using System.Collections.Generic; + +namespace Visus.AddressValidation.SourceGeneration.Tests +{ + internal partial class ApiResponse + { + public IReadOnlyDictionary GetCustomResponseData() + { + return new Dictionary(StringComparer.OrdinalIgnoreCase) + { + ["responseId"] = ResponseId, + ["response"] = ResponseText + }; + } + } +} \ No newline at end of file diff --git a/tests/Visus.AddressValidation.SourceGeneration.Tests/CustomResponseDataGeneratorTests.cs b/tests/Visus.AddressValidation.SourceGeneration.Tests/CustomResponseDataGeneratorTests.cs new file mode 100644 index 0000000..5a2e250 --- /dev/null +++ b/tests/Visus.AddressValidation.SourceGeneration.Tests/CustomResponseDataGeneratorTests.cs @@ -0,0 +1,63 @@ +extern alias sourcegen; + +namespace Visus.AddressValidation.SourceGeneration.Tests; + +using CustomResponseDataGenerator = sourcegen::Visus.AddressValidation.SourceGeneration.CustomResponseDataGenerator; + +internal sealed class CustomResponseDataGeneratorTests : SourceGeneratorTestBase +{ + protected override IEnumerable RequiredAssemblies => + [ + typeof(CustomResponseDataGenerator), + typeof(CustomResponseDataPropertyAttribute), + ]; + + [Test] + public Task Should_Generate_GetCustomResponseData_For_Nested_Class() + { + const string source = """ + using Visus.AddressValidation; + + namespace Visus.AddressValidation.SourceGeneration.Tests; + + partial class Response + { + public string FirstName { get; set; } + + public string LastName { get; set; } + + partial class ApiData + { + [CustomResponseDataProperty] + public string ResponseId { get; set; } + + [CustomResponseDataProperty("response")] + public string ResponseText { get; set; } + } + } + """; + + return VerifyGenerateSourcesAsync(source, new CustomResponseDataGenerator()); + } + + [Test] + public Task Should_Generate_GetCustomResponseData_For_Root_Class() + { + const string source = """ + using Visus.AddressValidation; + + namespace Visus.AddressValidation.SourceGeneration.Tests; + + partial class ApiResponse + { + [CustomResponseDataProperty] + public string ResponseId { get; set; } + + [CustomResponseDataProperty("response")] + public string ResponseText { get; set; } + } + """; + + return VerifyGenerateSourcesAsync(source, new CustomResponseDataGenerator()); + } +} diff --git a/tests/Visus.AddressValidation.SourceGeneration.Tests/ModuleInitializer.cs b/tests/Visus.AddressValidation.SourceGeneration.Tests/ModuleInitializer.cs new file mode 100644 index 0000000..a421616 --- /dev/null +++ b/tests/Visus.AddressValidation.SourceGeneration.Tests/ModuleInitializer.cs @@ -0,0 +1,16 @@ +namespace Visus.AddressValidation.SourceGeneration.Tests; + +using System.Runtime.CompilerServices; +using JetBrains.Annotations; +using VerifyTests.DiffPlex; + +[UsedImplicitly] +internal static class ModuleInitializer +{ + [ModuleInitializer] + public static void Initialize() + { + VerifySourceGenerators.Initialize(); + VerifyDiffPlex.Initialize(OutputType.Compact); + } +} diff --git a/tests/Visus.AddressValidation.SourceGeneration.Tests/SourceGeneratorTestBase.cs b/tests/Visus.AddressValidation.SourceGeneration.Tests/SourceGeneratorTestBase.cs new file mode 100644 index 0000000..e404c0e --- /dev/null +++ b/tests/Visus.AddressValidation.SourceGeneration.Tests/SourceGeneratorTestBase.cs @@ -0,0 +1,38 @@ +namespace Visus.AddressValidation.SourceGeneration.Tests; + +using System.Reflection; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; + +internal abstract class SourceGeneratorTestBase +{ + protected abstract IEnumerable RequiredAssemblies { get; } + + private IEnumerable AssemblyReferencesForCodeGen => + AppDomain.CurrentDomain + .GetAssemblies() + .Concat(new[] + { + typeof(Binder), + }.Concat(RequiredAssemblies).Select(s => s.Assembly)) + .Distinct() + .Where(w => !w.IsDynamic) + .Select(s => MetadataReference.CreateFromFile(s.Location)); + + protected Task VerifyGenerateSourcesAsync(string source, params IIncrementalGenerator[] generators) + { + SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(source, CSharpParseOptions.Default); + + CSharpCompilation compilation = CSharpCompilation.Create( + "compilation", + [syntaxTree,], + AssemblyReferencesForCodeGen, + new CSharpCompilationOptions(OutputKind.ConsoleApplication)); + + CSharpGeneratorDriver driver = CSharpGeneratorDriver.Create(generators); + GeneratorDriver runner = driver.RunGenerators(compilation); + SettingsTask verify = Verify(runner); + + return verify; + } +} diff --git a/tests/Visus.AddressValidation.SourceGeneration.Tests/Visus.AddressValidation.SourceGeneration.Tests.csproj b/tests/Visus.AddressValidation.SourceGeneration.Tests/Visus.AddressValidation.SourceGeneration.Tests.csproj index dfc7a44..4599428 100644 --- a/tests/Visus.AddressValidation.SourceGeneration.Tests/Visus.AddressValidation.SourceGeneration.Tests.csproj +++ b/tests/Visus.AddressValidation.SourceGeneration.Tests/Visus.AddressValidation.SourceGeneration.Tests.csproj @@ -7,6 +7,7 @@ +