DotNetCore.SKIT.FlurlHttpCl.../test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/TestCase_JsonConverterOfYesOrNoBooleanBooleanTest.cs

93 lines
4.8 KiB
C#
Raw Normal View History

2024-01-29 23:12:37 +08:00
using Xunit;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests
{
public class TestCase_JsonConverterOfYesOrNoBooleanBooleanTest
{
private sealed class MockObject
{
[Newtonsoft.Json.JsonProperty(Order = 1)]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
[System.Text.Json.Serialization.JsonPropertyOrder(1)]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
public bool Property { get; set; }
[Newtonsoft.Json.JsonProperty(Order = 2)]
[Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.Internal.YesOrNoBooleanConverter))]
[System.Text.Json.Serialization.JsonPropertyOrder(2)]
[System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Serialization.Internal.YesOrNoBooleanConverter))]
public bool? NullableProperty { get; set; }
}
private static void TestCustomJsonConverter(IJsonSerializer jsonSerializer)
{
Assert.Multiple(() =>
{
var expectObj = new MockObject() { NullableProperty = null };
var actualJson = jsonSerializer.Serialize(expectObj);
var actualObj = jsonSerializer.Deserialize<MockObject>(actualJson);
Assert.Equal("{\"Property\":\"N\"}", actualJson);
Assert.Equal(expectObj.Property, actualObj.Property);
Assert.Equal(expectObj.Property, jsonSerializer.Deserialize<MockObject>("{\"Property\":\"N\"}").Property);
Assert.Equal(expectObj.Property, jsonSerializer.Deserialize<MockObject>("{}").Property);
Assert.Equal(expectObj.NullableProperty, actualObj.NullableProperty);
Assert.Equal(expectObj.NullableProperty, jsonSerializer.Deserialize<MockObject>("{\"NullableProperty\":null}").NullableProperty);
Assert.Equal(expectObj.NullableProperty, jsonSerializer.Deserialize<MockObject>("{}").NullableProperty);
});
Assert.Multiple(() =>
{
var expectObj = new MockObject() { Property = false, NullableProperty = false };
var actualJson = jsonSerializer.Serialize(expectObj);
var actualObj = jsonSerializer.Deserialize<MockObject>(actualJson);
Assert.Equal("{\"Property\":\"N\",\"NullableProperty\":\"N\"}", actualJson);
Assert.Equal(expectObj.Property, actualObj.Property);
Assert.Equal(expectObj.Property, jsonSerializer.Deserialize<MockObject>("{\"Property\":false}").Property);
Assert.Equal(expectObj.NullableProperty, actualObj.NullableProperty);
Assert.Equal(expectObj.NullableProperty, jsonSerializer.Deserialize<MockObject>("{\"NullableProperty\":false}").NullableProperty);
});
Assert.Multiple(() =>
{
var expectObj = new MockObject() { Property = true, NullableProperty = true };
var actualJson = jsonSerializer.Serialize(expectObj);
var actualObj = jsonSerializer.Deserialize<MockObject>(actualJson);
Assert.Equal("{\"Property\":\"Y\",\"NullableProperty\":\"Y\"}", actualJson);
Assert.Equal(expectObj.Property, actualObj.Property);
Assert.Equal(expectObj.Property, jsonSerializer.Deserialize<MockObject>("{\"Property\":true}").Property);
Assert.Equal(expectObj.NullableProperty, actualObj.NullableProperty);
Assert.Equal(expectObj.NullableProperty, jsonSerializer.Deserialize<MockObject>("{\"NullableProperty\":true}").NullableProperty);
});
}
[Fact(DisplayName = "测试用例:自定义 Newtosoft.Json.JsonConverter 之 YesOrNoBooleanConverter")]
public void TestNewtosoftJsonConverter()
{
var jsonSettings = NewtonsoftJsonSerializer.GetDefaultSerializerSettings();
jsonSettings.Formatting = Newtonsoft.Json.Formatting.None;
jsonSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
TestCustomJsonConverter(new NewtonsoftJsonSerializer(jsonSettings));
}
[Fact(DisplayName = "测试用例:自定义 System.Text.Json.Serialization.JsonConverter 之 YesOrNoBooleanConverter")]
public void TestSystemTextJsonConverter()
{
var jsonOptions = SystemTextJsonSerializer.GetDefaultSerializerOptions();
jsonOptions.WriteIndented = false;
jsonOptions.DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull;
TestCustomJsonConverter(new SystemTextJsonSerializer(jsonOptions));
}
}
}