Skip to content
This repository has been archived by the owner on Jan 23, 2023. It is now read-only.
/ corefx Public archive

Commit

Permalink
Followup to add more extension data tests. (#41877)
Browse files Browse the repository at this point in the history
  • Loading branch information
ahsonkhan committed Oct 18, 2019
1 parent 6eb32bf commit 5f5c965
Showing 1 changed file with 73 additions and 0 deletions.
73 changes: 73 additions & 0 deletions src/System.Text.Json/tests/Serialization/ExtensionDataTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,42 @@ public static void ExtensionPropertyIgnoredWhenNull()
Assert.Equal(expected, actual);
}

[Fact]
public static void MultipleExtensionPropertyIgnoredWhenNull()
{
var obj = new ClassWithMultipleDictionaries();
string actual = JsonSerializer.Serialize(obj);
Assert.Equal("{\"ActualDictionary\":null}", actual);

obj = new ClassWithMultipleDictionaries
{
ActualDictionary = new Dictionary<string, object>()
};
actual = JsonSerializer.Serialize(obj);
Assert.Equal("{\"ActualDictionary\":{}}", actual);

obj = new ClassWithMultipleDictionaries
{
MyOverflow = new Dictionary<string, object>
{
{ "test", "value" }
}
};
actual = JsonSerializer.Serialize(obj);
Assert.Equal("{\"ActualDictionary\":null,\"test\":\"value\"}", actual);

obj = new ClassWithMultipleDictionaries
{
ActualDictionary = new Dictionary<string, object>(),
MyOverflow = new Dictionary<string, object>
{
{ "test", "value" }
}
};
actual = JsonSerializer.Serialize(obj);
Assert.Equal("{\"ActualDictionary\":{},\"test\":\"value\"}", actual);
}

[Fact]
public static void ExtensionPropertyAlreadyInstantiated()
{
Expand Down Expand Up @@ -510,6 +546,35 @@ public static void DeserializeIntoObjectProperty()
Assert.Equal(JsonValueKind.Object, ((JsonElement)obj.MyOverflow["MyOverflow"]).ValueKind);
}

[Fact]
public static void DeserializeIntoMultipleDictionaries()
{
ClassWithMultipleDictionaries obj;
string json;

// Baseline dictionary.
json = @"{""ActualDictionary"":{""Key"": {""Property0"":-1}},""MyDict"":{""Property1"":1}}";
obj = JsonSerializer.Deserialize<ClassWithMultipleDictionaries>(json);
Assert.Equal(1, obj.MyOverflow.Count);
Assert.Equal(1, ((JsonElement)obj.MyOverflow["MyDict"]).EnumerateObject().First().Value.GetInt32());
Assert.Equal(1, obj.ActualDictionary.Count);
Assert.Equal(-1, ((JsonElement)obj.ActualDictionary["Key"]).EnumerateObject().First().Value.GetInt32());

// Attempt to deserialize null into the dictionary and overflow property. This is also treated as a missing property.
json = @"{""ActualDictionary"":null,""MyOverflow"":null}";
obj = JsonSerializer.Deserialize<ClassWithMultipleDictionaries>(json);
Assert.Equal(1, obj.MyOverflow.Count);
Assert.Null(obj.MyOverflow["MyOverflow"]);
Assert.Null(obj.ActualDictionary);

// Attempt to deserialize object into the dictionary and overflow property. This is also treated as a missing property.
json = @"{""ActualDictionary"":{},""MyOverflow"":{}}";
obj = JsonSerializer.Deserialize<ClassWithMultipleDictionaries>(json);
Assert.Equal(1, obj.MyOverflow.Count);
Assert.Equal(JsonValueKind.Object, ((JsonElement)obj.MyOverflow["MyOverflow"]).ValueKind);
Assert.Equal(0, obj.ActualDictionary.Count);
}

[Fact]
public static void DeserializeIntoJsonElementProperty()
{
Expand Down Expand Up @@ -614,5 +679,13 @@ private class ClassWithExtensionPropertyAsJsonElement
[JsonExtensionData]
public Dictionary<string, JsonElement> MyOverflow { get; set; }
}

private class ClassWithMultipleDictionaries
{
[JsonExtensionData]
public Dictionary<string, object> MyOverflow { get; set; }

public Dictionary<string, object> ActualDictionary { get; set; }
}
}
}

0 comments on commit 5f5c965

Please sign in to comment.