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)));
示例#2
0
 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));
示例#7
0
        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));
        }
示例#8
0
 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));