\n\nCommit migrated from 0cf3c01afc
This commit is contained in:
Pranav K 2019-07-23 19:36:16 -07:00
parent 950b3873b1
commit 39c052b8bc
2 changed files with 41 additions and 12 deletions

View File

@ -19,7 +19,7 @@ namespace Microsoft.JSInterop
{
if (reader.TokenType == JsonTokenType.PropertyName)
{
if (reader.ValueTextEquals(DotNetObjectRefKey.EncodedUtf8Bytes))
if (dotNetObjectId == 0 && reader.ValueTextEquals(DotNetObjectRefKey.EncodedUtf8Bytes))
{
reader.Read();
dotNetObjectId = reader.GetInt64();

View File

@ -36,6 +36,36 @@ namespace Microsoft.JSInterop.Tests
Assert.Equal("Unexcepted JSON property foo.", ex.Message);
});
[Fact]
public Task Read_Throws_IfJsonIsIncomplete() => WithJSRuntime(_ =>
{
// Arrange
var input = new TestModel();
var dotNetObjectRef = DotNetObjectRef.Create(input);
var objectId = dotNetObjectRef.ObjectId;
var json = $"{{\"__dotNetObject\":{objectId}";
// Act & Assert
var ex = Record.Exception(() => JsonSerializer.Deserialize<DotNetObjectRef<TestModel>>(json));
Assert.IsAssignableFrom<JsonException>(ex);
});
[Fact]
public Task Read_Throws_IfDotNetObjectIdAppearsMultipleTimes() => WithJSRuntime(_ =>
{
// Arrange
var input = new TestModel();
var dotNetObjectRef = DotNetObjectRef.Create(input);
var objectId = dotNetObjectRef.ObjectId;
var json = $"{{\"__dotNetObject\":{objectId},\"__dotNetObject\":{objectId}}}";
// Act & Assert
var ex = Record.Exception(() => JsonSerializer.Deserialize<DotNetObjectRef<TestModel>>(json));
Assert.IsAssignableFrom<JsonException>(ex);
});
[Fact]
public Task Read_ReadsJson() => WithJSRuntime(_ =>
{
@ -54,26 +84,25 @@ namespace Microsoft.JSInterop.Tests
Assert.Equal(objectId, deserialized.ObjectId);
});
[Fact]
public Task Read_ReturnsTheCorrectInstance() => WithJSRuntime(_ =>
{
// Arrange
// Track a few instances and verify that the deserialized value returns the corect value.
DotNetObjectRef.Create(new TestModel());
DotNetObjectRef.Create(new TestModel());
// Track a few instances and verify that the deserialized value returns the correct value.
var instance1 = new TestModel();
var instance2 = new TestModel();
var ref1 = DotNetObjectRef.Create(instance1);
var ref2 = DotNetObjectRef.Create(instance2);
var input = new TestModel();
var dotNetObjectRef = DotNetObjectRef.Create(input);
var objectId = dotNetObjectRef.ObjectId;
var json = $"{{\"__dotNetObject\":{objectId}}}";
var json = $"[{{\"__dotNetObject\":{ref2.ObjectId}}},{{\"__dotNetObject\":{ref1.ObjectId}}}]";
// Act
var deserialized = JsonSerializer.Deserialize<DotNetObjectRef<TestModel>>(json);
var deserialized = JsonSerializer.Deserialize<DotNetObjectRef<TestModel>[]>(json);
// Assert
Assert.Same(input, deserialized.Value);
Assert.Equal(objectId, deserialized.ObjectId);
Assert.Same(instance2, deserialized[0].Value);
Assert.Same(instance1, deserialized[1].Value);
});
[Fact]