Skip to content

Commit

Permalink
Add regression tests for all serializer libraries
Browse files Browse the repository at this point in the history
  • Loading branch information
glopesdev committed Jan 16, 2024
1 parent 4dda635 commit 486d0d1
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 7 deletions.
40 changes: 34 additions & 6 deletions Bonsai.Sgen.Tests/DiscriminatorGenerationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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(@"
{
Expand Down Expand Up @@ -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(@"
{
Expand Down Expand Up @@ -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<Animal> 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);
}
}
Expand Down
2 changes: 1 addition & 1 deletion Bonsai.Sgen/SerializerLibraries.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
namespace Bonsai.Sgen
{
[Flags]
internal enum SerializerLibraries
public enum SerializerLibraries
{
None = 0x0,
NewtonsoftJson = 0x1,
Expand Down

0 comments on commit 486d0d1

Please sign in to comment.