public void Read_unknown_fieldtype() { // Arrange var json = @"[ { ""id"":0, ""name"":""field0"", ""type"":""__bogus__"" } ]" ; var jsonUtf8 = (ReadOnlySpan <byte>)Encoding.UTF8.GetBytes(json); var jsonReader = new Utf8JsonReader(jsonUtf8); var objectType = (Type)null; var options = new JsonSerializerOptions(); var converter = new LegacyCustomFieldsConverter(); // Act jsonReader.Read(); // This try...catch is a workaround for the fact that we can't use the following code: // Should.Throw<Exception>(() => converter.Read(ref jsonReader, objectType, options)).Message.ShouldBe("__bogus__ is an unknown field type"); // due to the following compile time error: // Cannot use ref local 'jsonReader' inside an anonymous method, lambda expression, or query expression try { var fields = converter.Read(ref jsonReader, objectType, options); } catch (Exception e) when(e.Message == "__bogus__ is an unknown field type") { // This is the expected exception } }
public void Read_invalid() { // Arrange var json = "{ \"name\": \"this JSON is invalid for this converter\" }"; var jsonUtf8 = (ReadOnlySpan <byte>)Encoding.UTF8.GetBytes(json); var jsonReader = new Utf8JsonReader(jsonUtf8); var objectType = (Type)null; var options = new JsonSerializerOptions(); var converter = new LegacyCustomFieldsConverter(); // Act jsonReader.Read(); var result = converter.Read(ref jsonReader, objectType, options); // Assert result.ShouldNotBeNull(); result.Length.ShouldBe(0); }
public void Read_multiple() { // Arrange var json = @"[ { ""id"":0, ""name"":""field0"", ""type"":""date"", ""value"":1490709300 }, { ""id"":1, ""name"":""field1"", ""type"":""date"" }, { ""id"":2, ""name"":""field2"", ""type"":""text"", ""value"":""abc123"" }, { ""id"":3, ""name"":""field3"", ""type"":""text"" }, { ""id"":4, ""name"":""field4"", ""type"":""number"", ""value"":123 }, { ""id"":5, ""name"":""field5"", ""type"":""number"" } ]" ; var jsonUtf8 = (ReadOnlySpan <byte>)Encoding.UTF8.GetBytes(json); var jsonReader = new Utf8JsonReader(jsonUtf8); var objectType = (Type)null; var options = new JsonSerializerOptions(); var converter = new LegacyCustomFieldsConverter(); // Act jsonReader.Read(); var result = converter.Read(ref jsonReader, objectType, options); // Assert result.ShouldNotBeNull(); result.ShouldBeOfType <StrongGrid.Models.Legacy.Field[]>(); var resultAsArray = (StrongGrid.Models.Legacy.Field[])result; resultAsArray.Length.ShouldBe(6); resultAsArray[0].Id.ShouldBe(0); resultAsArray[0].Name.ShouldBe("field0"); resultAsArray[0].ShouldBeOfType <StrongGrid.Models.Legacy.Field <DateTime> >(); ((StrongGrid.Models.Legacy.Field <DateTime>)resultAsArray[0]).Value.ShouldBe(new DateTime(2017, 3, 28, 13, 55, 0, DateTimeKind.Utc)); resultAsArray[1].Id.ShouldBe(1); resultAsArray[1].Name.ShouldBe("field1"); resultAsArray[1].ShouldBeOfType <StrongGrid.Models.Legacy.Field <DateTime?> >(); ((StrongGrid.Models.Legacy.Field <DateTime?>)resultAsArray[1]).Value.ShouldBeNull(); resultAsArray[2].Id.ShouldBe(2); resultAsArray[2].Name.ShouldBe("field2"); resultAsArray[2].ShouldBeOfType <StrongGrid.Models.Legacy.Field <string> >(); ((StrongGrid.Models.Legacy.Field <string>)resultAsArray[2]).Value.ShouldBe("abc123"); resultAsArray[3].Id.ShouldBe(3); resultAsArray[3].Name.ShouldBe("field3"); resultAsArray[3].ShouldBeOfType <StrongGrid.Models.Legacy.Field <string> >(); ((StrongGrid.Models.Legacy.Field <string>)resultAsArray[3]).Value.ShouldBeNull(); resultAsArray[4].Id.ShouldBe(4); resultAsArray[4].Name.ShouldBe("field4"); resultAsArray[4].ShouldBeOfType <StrongGrid.Models.Legacy.Field <long> >(); ((StrongGrid.Models.Legacy.Field <long>)resultAsArray[4]).Value.ShouldBe(123); resultAsArray[5].Id.ShouldBe(5); resultAsArray[5].Name.ShouldBe("field5"); resultAsArray[5].ShouldBeOfType <StrongGrid.Models.Legacy.Field <long?> >(); ((StrongGrid.Models.Legacy.Field <long?>)resultAsArray[5]).Value.ShouldBeNull(); }