Skip to content

Commit

Permalink
Followup to add more extension data tests. (dotnet/corefx#41877)
Browse files Browse the repository at this point in the history
Commit migrated from dotnet/corefx@5f5c965
  • Loading branch information
ahsonkhan committed Oct 18, 2019
1 parent 6596cc3 commit 75e4015
Showing 1 changed file with 73 additions and 0 deletions.
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 75e4015

Please sign in to comment.