Skip to content

Commit

Permalink
feat(csharp): Add EnumSerializerTests
Browse files Browse the repository at this point in the history
  • Loading branch information
Swimburger committed Oct 2, 2024
1 parent 71b7576 commit a86ce0b
Show file tree
Hide file tree
Showing 143 changed files with 8,370 additions and 6 deletions.
1 change: 1 addition & 0 deletions generators/csharp/codegen/src/AsIs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export enum AsIsFiles {
RawGrpcClient = "RawGrpcClient.Template.cs",
StringEnum = "StringEnum.Template.cs",
EnumSerializer = "EnumSerializer.cs",
EnumSerializerTests = "EnumSerializerTests.Template.cs",
StringEnumSerializer = "StringEnumSerializer.cs",
StringEnumSerializerTests = "StringEnumSerializerTests.Template.cs",
TemplateCsProj = "Template.csproj",
Expand Down
63 changes: 63 additions & 0 deletions generators/csharp/codegen/src/asIs/EnumSerializerTests.Template.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
using System;
using System.Runtime.Serialization;
using System.Text.Json;
using System.Text.Json.Serialization;
using NUnit.Framework;
using <%= namespace%>.Core;

namespace <%= namespace%>.Test.Core
{
[TestFixture]
public class StringEnumSerializerTests
{
private static readonly JsonSerializerOptions JsonOptions = new()
{
WriteIndented = true,
};

private const DummyEnum KnownEnumValue2 = DummyEnum.KnownValue2;
private const string KnownEnumValue2String = "known_value2";

private static readonly string JsonWithKnownEnum2 =
$$"""
{
"enum_property": "{{KnownEnumValue2String}}"
}
""";

[Test]
public void ShouldParseKnownEnumValue2()
{
var obj = JsonSerializer.Deserialize<DummyObject>(JsonWithKnownEnum2, JsonOptions);
Assert.That(obj, Is.Not.Null);
Assert.That(obj.EnumProperty, Is.EqualTo(KnownEnumValue2));
}

[Test]
public void ShouldSerializeKnownEnumValue2()
{
var json = JsonSerializer.SerializeToElement(new DummyObject { EnumProperty = KnownEnumValue2 },
JsonOptions);
TestContext.WriteLine("Serialized JSON: \n" + json);
var enumString = json.GetProperty("enum_property").GetString();
Assert.That(enumString, Is.Not.Null);
Assert.That(enumString, Is.EqualTo(KnownEnumValue2String));
}
}

public class DummyObject
{
[JsonPropertyName("enum_property")]
public DummyEnum EnumProperty { get; set; }
}

[JsonConverter(typeof(EnumSerializer<DummyEnum>))]
public enum DummyEnum
{

[EnumMember(Value = "known_value1")]
KnownValue1,
[EnumMember(Value = "known_value2")]
KnownValue2,
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ public void ShouldParseKnownEnumValue2()


[Test]
public void ShouldParseNewEnum()
public void ShouldParseUnknownEnum()
{
var obj = JsonSerializer.Deserialize<DummyObject>(JsonWithUnknownEnum, JsonOptions);
Assert.That(obj, Is.Not.Null);
Assert.That(obj.EnumProperty, Is.EqualTo(UnknownEnumValue));
}

[Test]
public void ShouldSerializeExistingEnum()
public void ShouldSerializeKnownEnumValue2()
{
var json = JsonSerializer.SerializeToElement(new DummyObject { EnumProperty = KnownEnumValue2 },
JsonOptions);
Expand Down
2 changes: 2 additions & 0 deletions generators/csharp/model/src/ModelGeneratorContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ export class ModelGeneratorContext extends AbstractCsharpGeneratorContext<ModelC
const files = [];
if (this.customConfig["enable-forward-compatible-enums"] ?? false) {
files.push(AsIsFiles.StringEnumSerializerTests);
} else {
files.push(AsIsFiles.EnumSerializerTests);
}
return files;
}
Expand Down
2 changes: 2 additions & 0 deletions generators/csharp/sdk/src/SdkGeneratorContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,8 @@ export class SdkGeneratorContext extends AbstractCsharpGeneratorContext<SdkCusto
const files = [AsIsFiles.RawClientTests];
if (this.customConfig["enable-forward-compatible-enums"] ?? false) {
files.push(AsIsFiles.StringEnumSerializerTests);
} else {
files.push(AsIsFiles.EnumSerializerTests);
}
return files;
}
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit a86ce0b

Please sign in to comment.