public void CanGetMemberNames(JsonObject input) => A3 <DynamicJsonObject> .Arrange(setup => { var json = JsonSerializer.Serialize(input); setup.Sut((DynamicJsonObject)DynamicJsonElement.From(JsonSerializer.Deserialize <JsonElement>(json))); }) .Act(sut => sut.GetDynamicMemberNames()) .Assert(result => result.Should().Contain(nameof(JsonObject.Value)));
public void IListOfTypeIsSupported(IList <T> input) => A3 <dynamic> .Arrange(setup => setup.Sut(DynamicJsonElement.From(JsonSerializer.Deserialize <JsonElement>(JsonSerializer.Serialize(input, JsonSerializerOptions), JsonSerializerOptions)))) .Act(sut => { IEnumerable <T> result = sut; return(result); }) .Assert(result => result.Should().BeEquivalentTo(input));
public void CanAccessPropertyByIndexer(JsonObject input) => A3 <dynamic> .Arrange(setup => { var json = JsonSerializer.Serialize(input); setup.Sut(DynamicJsonElement.From(JsonSerializer.Deserialize <JsonElement>(json))); }) .Act(sut => (string?)sut[nameof(JsonObject.Value)]) .Assert(result => result.Should().Be(input.Value));
public void DynamicArrayIsSupported(int[] input) => A3 <dynamic> .Arrange(setup => setup.Sut(DynamicJsonElement.From(JsonSerializer.Deserialize <JsonElement>(JsonSerializer.Serialize(input))))) .Act(sut => { dynamic[] result = sut; return(result); }) .Assert(result => result.Length.Should().Be(input.Length));
public void DictionaryIsSupported(IDictionary <string, string> input) => A3 <dynamic> .Arrange(setup => { var json = JsonSerializer.Serialize(input); setup.Sut(DynamicJsonElement.From(JsonSerializer.Deserialize <JsonElement>(json))); }) .Act(sut => { IDictionary <string, string> result = sut; return(result); }) .Assert(result => result.Should().BeEquivalentTo(input));
public void JsonCanBeDeserializedToDynamicType(JsonObject input) => A3 <dynamic> .Arrange(setup => { var json = JsonSerializer.Serialize(input); setup.Sut(DynamicJsonElement.From(JsonSerializer.Deserialize <JsonElement>(json))); }) .Act(sut => { JsonObject result = sut; return(result); }) .Assert(result => result.Should().BeEquivalentTo(input));
protected virtual DynamicMetaObject GetMetaObject(Expression parameter) { // https://github.com/dotnet/runtime/issues/29690 // https://stackoverflow.com/questions/17600466/using-dynamicobject-idynamicmetaobjectprovider-as-a-component-of-a-static-type // https://stackoverflow.com/questions/20745780/idynamicmetaobjectprovider-getmetaobject-is-not-always-called if (_dynamicMetaObject == null) { _dynamicMetaObject = DynamicJsonElement.From(JsonObject, JsonSerialization.Options); } var restrictions = BindingRestrictions.GetTypeRestriction(parameter, GetType()); var fieldInfo = typeof(GitLabObject).GetField(nameof(_dynamicMetaObject), BindingFlags.NonPublic | BindingFlags.Instance); Debug.Assert(fieldInfo != null); return(new DelegatingDynamicMetaObject(parameter, restrictions, this, fieldInfo)); }
public void TypeIsSupported(T input) => A3 <dynamic> .Arrange(setup => setup.Sut(DynamicJsonElement.From(JsonSerializer.Deserialize <JsonElement>(JsonSerializer.Serialize(input, JsonSerializerOptions), JsonSerializerOptions)))) .Act(sut => (T)sut) .Assert(result => result.Should().BeEquivalentTo(input));
public void NullIsSupported() => A3 <dynamic> .Arrange(setup => setup.Sut(DynamicJsonElement.From(JsonSerializer.Deserialize <JsonElement>(JsonSerializer.Serialize <T?>(null, JsonSerializerOptions), JsonSerializerOptions)))) .Act(sut => (T?)sut) .Assert(result => result.Should().BeNull());
public void CanInvokeCountMethod(int[] input) => A3 <dynamic> .Arrange(setup => setup.Sut(DynamicJsonElement.From(JsonSerializer.Deserialize <JsonElement>(JsonSerializer.Serialize(input))))) .Act(sut => (int)sut.Count()) .Assert(result => result.Should().Be(input.Length));
public void CanReadLengthProperty(int[] input) => A3 <dynamic> .Arrange(setup => setup.Sut(DynamicJsonElement.From(JsonSerializer.Deserialize <JsonElement>(JsonSerializer.Serialize(input))))) .Act(sut => (int)sut.Length) .Assert(result => result.Should().Be(input.Length));
public void Int32ArrayIsSupported(int[] input) => A3 <dynamic> .Arrange(setup => setup.Sut(DynamicJsonElement.From(JsonSerializer.Deserialize <JsonElement>(JsonSerializer.Serialize(input))))) .Act(sut => (int[])sut) .Assert(result => result.Should().BeEquivalentTo(input));
public void ValueAsNumericIsSupported(T input) => A3 <dynamic> .Arrange(setup => setup.Sut(DynamicJsonElement.From(JsonSerializer.Deserialize <JsonElement>(JsonSerializer.Serialize(Convert.ChangeType(input, typeof(ulong))))))) .Act(sut => (T)sut) .Assert(result => result.Should().Be(input));