Skip to content

Commit

Permalink
.
Browse files Browse the repository at this point in the history
  • Loading branch information
seungyongshim committed Apr 9, 2024
1 parent 7ee4fb3 commit dbac95f
Showing 1 changed file with 96 additions and 69 deletions.
165 changes: 96 additions & 69 deletions src/SystemTextJsonNullTests/UnitTest1.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Text.Json.Serialization.Metadata;
using Newtonsoft.Json.Linq;

namespace SystemTextJsonNullTests;

Expand Down Expand Up @@ -62,209 +61,237 @@ public static void InterceptNullSetter(JsonTypeInfo typeInfo)
}

[Fact]
public void RequireValueNull()
public void RequireValueNullShouldBeException()
{
var json = """
{
"RequireValue": null
}
""";

var exception = Assert.Throws<JsonException>(() => JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions));
var bcl = JsonSerializer.Deserialize<Dto>(json);
Assert.Null(bcl.RequireValue);

Assert.Equal("Null value not allowed for 'requireValue'", exception.Message);
Assert.Throws<JsonException>(() => JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions));
}

[Fact]
public void RequireValueNull2()
public void RequireValueNullShouldBeException2()
{
var json = "{}";

var exception = Assert.Throws<JsonException>(() => JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions));
Assert.Throws<JsonException>(() => JsonSerializer.Deserialize<Dto>(json));

Assert.Equal("JSON deserialization for type 'SystemTextJsonNullTests.Dto' was missing required properties, including the following: requireValue", exception.Message);
Assert.Throws<JsonException>(() => JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions));
}

[Fact]
public void NotNullDefaultValueNull()
public void NullableValueShouldBeNull()
{
var json = """
{
"RequireValue": "",
"NotNullDefaultValue": null
"RequireValue": "...",
"NullableValue": null
}
""";

var sut = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
var bcl = JsonSerializer.Deserialize<Dto>(json);
Assert.Null(bcl.NullableValue);

Assert.Equal(sut.RequireValue, "");
Assert.Equal(sut.NotNullDefaultValue, "");
var aums = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
Assert.Null(aums.NullableValue);
}

[Fact]
public void NotNullDefaultValueNull2()
public void NullableValueShouldBeNull2()
{
var json = """
{
"RequireValue": ""
"RequireValue": "..."
}
""";

var sut = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
var bcl = JsonSerializer.Deserialize<Dto>(json);
Assert.Null(bcl.NullableValue);

Assert.Equal(sut.RequireValue, "");
Assert.Equal(sut.NotNullDefaultValue, "");
var aums = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
Assert.Null(aums.NullableValue);
}

[Fact]
public void NullableDefaultValueExpectDefault()
public void NullableValueExpectCCC()
{
var json = """
{
"RequireValue": ""
"RequireValue": "...",
"NullableValue": "CCC"
}
""";

var sut = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
var bcl = JsonSerializer.Deserialize<Dto>(json);
Assert.Equal("CCC", bcl.NullableValue);

Assert.Equal(sut.RequireValue, "");
Assert.Equal("", sut.NullableDefaultValue);
var aums = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
Assert.Equal("CCC", aums.NullableValue);
}

[Fact]
public void NullableDefaultValueExpectNull()
public void NotNullDefaultValueShouldBeDefault()
{
var json = """
{
"RequireValue": "",
"NullableDefaultValue": null
"RequireValue": "...",
"NotNullDefaultValue": null
}
""";

var sut = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
var bcl = JsonSerializer.Deserialize<Dto>(json);
Assert.Null(bcl.NotNullDefaultValue);

Assert.Equal(sut.RequireValue, "");
Assert.Equal(sut.NullableDefaultValue, null);
var aums = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
Assert.Equal("initialized", aums.NotNullDefaultValue);
}

[Fact]
public void NullableDefaultValueExpectAAA()
public void NotNullDefaultValueShouldBeDefault2()
{
var json = """
{
"RequireValue": "",
"NullableDefaultValue": "AAA"
"RequireValue": "..."
}
""";

var sut = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
var bcl = JsonSerializer.Deserialize<Dto>(json);
Assert.Equal("initialized", bcl.NotNullDefaultValue);

Assert.Equal("", sut.RequireValue);
Assert.Equal("AAA", sut.NullableDefaultValue);
var aums = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
Assert.Equal("initialized", aums.NotNullDefaultValue);
}

[Fact]
public void NullableValueExpectDefault()
public void NotNullDefaultValueShouldBeKKK()
{
var json = """
{
"RequireValue": ""
"RequireValue": "...",
"NotNullDefaultValue": "KKK"
}
""";

var sut = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
var bcl = JsonSerializer.Deserialize<Dto>(json);
Assert.Equal("KKK", bcl.NotNullDefaultValue);

Assert.Equal(sut.RequireValue, "");
Assert.Equal(sut.NullableValue, null);
var aums = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
Assert.Equal("KKK", aums.NotNullDefaultValue);
}

[Fact]
public void NullableValueExpectNull()
public void NullableDefaultValueShouldBeNull()
{
var json = """
{
"RequireValue": "",
"NullableValue": null
"RequireValue": "...",
"NullableDefaultValue": null
}
""";

var sut = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
var bcl = JsonSerializer.Deserialize<Dto>(json);
Assert.Equal("initialized", bcl.NotNullDefaultValue);

Assert.Equal(sut.RequireValue, "");
Assert.Equal(sut.NullableValue, null);
var sut = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
Assert.Null(sut.NullableDefaultValue);
}

[Fact]
public void NullableValueExpectCCC()
public void NullableDefaultValueShouldBeDefault()
{
var json = """
{
"RequireValue": "",
"NullableValue": "CCC"
"RequireValue": "..."
}
""";

var sut = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
var bcl = JsonSerializer.Deserialize<Dto>(json);
Assert.Equal("initialized", bcl.NotNullDefaultValue);

Assert.Equal("", sut.RequireValue);
Assert.Equal(sut.NullableValue, "CCC");
var aums = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
Assert.Equal("initialized", aums.NullableDefaultValue);
}

[Fact]
public void NullableDefaultValueShouldBeAAA()
{
var json = """
{
"RequireValue": "...",
"NullableDefaultValue": "AAA"
}
""";

var bcl = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
Assert.Equal("AAA", bcl.NullableDefaultValue);

var aums = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
Assert.Equal("AAA", aums.NullableDefaultValue);
}

[Fact]
public void StringValuesExpectDefault()
public void StringValuesShouldBeEmpty()
{
var json = """
{
"RequireValue": ""
"RequireValue": "..."
}
""";

var sut = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
var bcl = JsonSerializer.Deserialize<Dto>(json);
Assert.Equal([], bcl.StringValues);

Assert.Equal(sut.RequireValue, "");
Assert.Equal(sut.StringValues, []);
var aums = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
Assert.Equal([], aums.StringValues);
}

[Fact]
public void StringValuesExpectNull()
public void StringValuesShouldBeEmpty2()
{
var json = """
{
"RequireValue": "",
"RequireValue": "...",
"StringValues": null
}
""";

var sut = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
var bcl = JsonSerializer.Deserialize<Dto>(json);
Assert.Null(bcl.StringValues);

Assert.Equal(sut.RequireValue, "");
Assert.Equal(sut.StringValues, []);
var aums = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
Assert.Equal([], aums.StringValues);
}

[Fact]
public void StringValuesExpectCCC()
public void StringValuesShouldBeCCC()
{
var json = """
{
"RequireValue": "",
"RequireValue": "...",
"StringValues": ["CCC"]
}
""";

var sut = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
var bcl = JsonSerializer.Deserialize<Dto>(json);
Assert.Equal(["CCC"], bcl.StringValues);

Assert.Equal("", sut.RequireValue);
Assert.Equal(sut.StringValues, ["CCC"]);
var aums = JsonSerializer.Deserialize<Dto>(json, JsonSerializerOptions);
Assert.Equal(["CCC"], aums.StringValues);
}
}


public record Dto
{
public required string RequireValue { get; init; }
public string NotNullDefaultValue { get; init; } = "";
public string? NullableDefaultValue { get; init; } = "";
public string? NullableValue { get; init; }
public string NotNullDefaultValue { get; init; } = "initialized";
public string? NullableDefaultValue { get; init; } = "initialized";
public IEnumerable<string> StringValues { get; init; } = [];
}

0 comments on commit dbac95f

Please sign in to comment.