From 486d0d1aa68534bdf815905e1a745982a55cd8df Mon Sep 17 00:00:00 2001 From: glopesdev Date: Tue, 16 Jan 2024 09:18:48 +0000 Subject: [PATCH] Add regression tests for all serializer libraries --- .../DiscriminatorGenerationTests.cs | 40 ++++++++++++++++--- Bonsai.Sgen/SerializerLibraries.cs | 2 +- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/Bonsai.Sgen.Tests/DiscriminatorGenerationTests.cs b/Bonsai.Sgen.Tests/DiscriminatorGenerationTests.cs index 6b0f103..ee30f10 100644 --- a/Bonsai.Sgen.Tests/DiscriminatorGenerationTests.cs +++ b/Bonsai.Sgen.Tests/DiscriminatorGenerationTests.cs @@ -8,7 +8,10 @@ namespace Bonsai.Sgen.Tests public class DiscriminatorGenerationTests { [TestMethod] - public async Task GenerateFromAnyOfDiscriminatorSchema_SerializerAnnotationsDeclareKnownTypes() + [DataRow(SerializerLibraries.YamlDotNet)] + [DataRow(SerializerLibraries.NewtonsoftJson)] + [DataRow(SerializerLibraries.NewtonsoftJson | SerializerLibraries.YamlDotNet)] + public async Task GenerateFromAnyOfDiscriminatorSchema_SerializerAnnotationsDeclareKnownTypes(SerializerLibraries serializerLibraries) { var schema = await JsonSchema.FromJsonAsync(@" { @@ -74,15 +77,29 @@ public async Task GenerateFromAnyOfDiscriminatorSchema_SerializerAnnotationsDecl } } "); - var generator = TestHelper.CreateGenerator(schema); + var generator = TestHelper.CreateGenerator(schema, serializerLibraries); var code = generator.GenerateFile(); Assert.IsTrue(code.Contains("[JsonInheritanceAttribute(\"DogType\", typeof(Dog))]")); - Assert.IsTrue(code.Contains("[YamlDiscriminator(\"discriminator\")]")); + if (serializerLibraries.HasFlag(SerializerLibraries.NewtonsoftJson)) + { + Assert.IsTrue( + code.Contains("[Newtonsoft.Json.JsonConverter(typeof(JsonInheritanceConverter), \"discriminator\")]"), + message: "Missing JSON discriminator attribute."); + } + if (serializerLibraries.HasFlag(SerializerLibraries.YamlDotNet)) + { + Assert.IsTrue( + code.Contains("[YamlDiscriminator(\"discriminator\")]"), + message: "Missing YAML discriminator attribute."); + } CompilerTestHelper.CompileFromSource(code); } [TestMethod] - public async Task GenerateFromOneOfDiscriminatorSchema_SerializerAnnotationsDeclareKnownTypes() + [DataRow(SerializerLibraries.YamlDotNet)] + [DataRow(SerializerLibraries.NewtonsoftJson)] + [DataRow(SerializerLibraries.NewtonsoftJson | SerializerLibraries.YamlDotNet)] + public async Task GenerateFromOneOfDiscriminatorSchema_SerializerAnnotationsDeclareKnownTypes(SerializerLibraries serializerLibraries) { var schema = await JsonSchema.FromJsonAsync(@" { @@ -171,13 +188,24 @@ public async Task GenerateFromOneOfDiscriminatorSchema_SerializerAnnotationsDecl } } "); - var generator = TestHelper.CreateGenerator(schema); + var generator = TestHelper.CreateGenerator(schema, serializerLibraries); var code = generator.GenerateFile(); Assert.IsTrue(code.Contains("class Dog : Animal"), "Derived types do not inherit from base type."); Assert.IsTrue(!code.Contains("public enum DogKind"), "Discriminator property is repeated in derived types."); Assert.IsTrue(code.Contains("List Animals"), "Container array element type does not match base type."); Assert.IsTrue(code.Contains("[JsonInheritanceAttribute(\"Dog\", typeof(Dog))]")); - Assert.IsTrue(code.Contains("[YamlDiscriminator(\"kind\")]")); + if (serializerLibraries.HasFlag(SerializerLibraries.NewtonsoftJson)) + { + Assert.IsTrue( + code.Contains("[Newtonsoft.Json.JsonConverter(typeof(JsonInheritanceConverter), \"kind\")]"), + message: "Missing JSON discriminator attribute."); + } + if (serializerLibraries.HasFlag(SerializerLibraries.YamlDotNet)) + { + Assert.IsTrue( + code.Contains("[YamlDiscriminator(\"kind\")]"), + message: "Missing YAML discriminator attribute."); + } CompilerTestHelper.CompileFromSource(code); } } diff --git a/Bonsai.Sgen/SerializerLibraries.cs b/Bonsai.Sgen/SerializerLibraries.cs index 0e78d02..13cfbbc 100644 --- a/Bonsai.Sgen/SerializerLibraries.cs +++ b/Bonsai.Sgen/SerializerLibraries.cs @@ -1,7 +1,7 @@ namespace Bonsai.Sgen { [Flags] - internal enum SerializerLibraries + public enum SerializerLibraries { None = 0x0, NewtonsoftJson = 0x1,