コード例 #1
0
        public void Patch_OnArrayObject_Fails()
        {
            // Arrange
            var targetObject = new[] { 20, 30 };
            var listAdapter  = new ListAdapter();
            var options      = new JsonSerializerOptions();

            // Act
            var addStatus = listAdapter.TryAdd(targetObject, typeof(int[]), "0", options, "40", out var message);

            // Assert
            Assert.False(addStatus);
            Assert.Equal($"The type '{targetObject.GetType().FullName}' which is an array is not supported for json patch operations as it has a fixed size.", message);
        }
コード例 #2
0
    public void Patch_OnArrayObject_Fails()
    {
        // Arrange
        var resolver     = new DefaultContractResolver();
        var targetObject = new[] { 20, 30 };
        var listAdapter  = new ListAdapter();

        // Act
        var addStatus = listAdapter.TryAdd(targetObject, "0", resolver, "40", out var message);

        // Assert
        Assert.False(addStatus);
        Assert.Equal($"The type '{targetObject.GetType().FullName}' which is an array is not supported for json patch operations as it has a fixed size.", message);
    }
コード例 #3
0
        public void Add_Appends_AtTheEnd(List <int> targetObject, List <int> expected)
        {
            // Arrange
            var listAdapter = new ListAdapter();
            var options     = new JsonSerializerOptions();

            // Act
            var addStatus = listAdapter.TryAdd(targetObject, typeof(List <int>), "-", options, "20", out var message);

            // Assert
            Assert.True(addStatus);
            Assert.True(string.IsNullOrEmpty(message), "Expected no error message");
            Assert.Equal(expected.Count, targetObject.Count);
            Assert.Equal(expected, targetObject);
        }
コード例 #4
0
    public void Add_KeepsObjectReference(IList targetObject, object value, string position, IList expected)
    {
        // Arrange
        var resolver    = new DefaultContractResolver();
        var listAdapter = new ListAdapter();

        // Act
        var addStatus = listAdapter.TryAdd(targetObject, position, resolver, value, out var message);

        // Assert
        Assert.True(addStatus);
        Assert.True(string.IsNullOrEmpty(message), "Expected no error message");
        Assert.Equal(expected.Count, targetObject.Count);
        Assert.Equal(expected, targetObject);
    }
コード例 #5
0
    public void Add_Appends_AtTheEnd(List <int> targetObject, List <int> expected)
    {
        // Arrange
        var resolver    = new DefaultContractResolver();
        var listAdapter = new ListAdapter();

        // Act
        var addStatus = listAdapter.TryAdd(targetObject, "-", resolver, "20", out var message);

        // Assert
        Assert.True(addStatus);
        Assert.True(string.IsNullOrEmpty(message), "Expected no error message");
        Assert.Equal(expected.Count, targetObject.Count);
        Assert.Equal(expected, targetObject);
    }
コード例 #6
0
        public void Add_KeepsObjectReference(IList targetObject, object value, string position, IList expected)
        {
            // Arrange
            var listAdapter = new ListAdapter();
            var options     = new JsonSerializerOptions();

            // Act
            var addStatus = listAdapter.TryAdd(targetObject, typeof(IList), position, options, value, out var message);

            // Assert
            Assert.True(addStatus);
            Assert.True(string.IsNullOrEmpty(message), "Expected no error message");
            Assert.Equal(expected.Count, targetObject.Count);
            Assert.Equal(expected, targetObject);
        }
コード例 #7
0
        public void Patch_WithInvalidPositionFormat_Fails(string position)
        {
            // Arrange
            var targetObject = new List <string> {
                "James", "Mike"
            };
            var listAdapter = new ListAdapter();
            var options     = new JsonSerializerOptions();

            // Act
            var addStatus = listAdapter.TryAdd(targetObject, typeof(List <string>), position, options, "40", out var message);

            // Assert
            Assert.False(addStatus);
            Assert.Equal($"The path segment '{position}' is invalid for an array index.", message);
        }
コード例 #8
0
        public void Add_NonCompatibleType_Fails()
        {
            // Arrange
            var targetObject = new List <int> {
                10, 20
            };
            var listAdapter = new ListAdapter();
            var options     = new JsonSerializerOptions();

            // Act
            var addStatus = listAdapter.TryAdd(targetObject, typeof(List <int>), "-", options, "James", out var message);

            // Assert
            Assert.False(addStatus);
            Assert.Equal("The value 'James' is invalid for target location.", message);
        }
コード例 #9
0
        public void Add_WithOutOfBoundsIndex_Fails(string position)
        {
            // Arrange
            var targetObject = new List <string> {
                "James", "Mike"
            };
            var listAdapter = new ListAdapter();
            var options     = new JsonSerializerOptions();

            // Act
            var addStatus = listAdapter.TryAdd(targetObject, typeof(List <string>), position, options, "40", out var message);

            // Assert
            Assert.False(addStatus);
            Assert.Equal($"The index value provided by path segment '{position}' is out of bounds of the array size.", message);
        }
コード例 #10
0
    public void Patch_WithInvalidPositionFormat_Fails(string position)
    {
        // Arrange
        var resolver     = new DefaultContractResolver();
        var targetObject = new List <string>()
        {
            "James", "Mike"
        };
        var listAdapter = new ListAdapter();

        // Act
        var addStatus = listAdapter.TryAdd(targetObject, position, resolver, "40", out var message);

        // Assert
        Assert.False(addStatus);
        Assert.Equal($"The path segment '{position}' is invalid for an array index.", message);
    }
コード例 #11
0
    public void Add_WithOutOfBoundsIndex_Fails(string position)
    {
        // Arrange
        var resolver     = new DefaultContractResolver();
        var targetObject = new List <string>()
        {
            "James", "Mike"
        };
        var listAdapter = new ListAdapter();

        // Act
        var addStatus = listAdapter.TryAdd(targetObject, position, resolver, "40", out var message);

        // Assert
        Assert.False(addStatus);
        Assert.Equal($"The index value provided by path segment '{position}' is out of bounds of the array size.", message);
    }
コード例 #12
0
    public void Patch_OnNonGenericListObject_Fails()
    {
        // Arrange
        var resolver     = new DefaultContractResolver();
        var targetObject = new ArrayList();

        targetObject.Add(20);
        targetObject.Add(30);
        var listAdapter = new ListAdapter();

        // Act
        var addStatus = listAdapter.TryAdd(targetObject, "-", resolver, "40", out var message);

        // Assert
        Assert.False(addStatus);
        Assert.Equal($"The type '{targetObject.GetType().FullName}' which is a non generic list is not supported for json patch operations. Only generic list types are supported.", message);
    }
コード例 #13
0
    public void Add_NonCompatibleType_Fails()
    {
        // Arrange
        var resolver     = new DefaultContractResolver();
        var targetObject = new List <int>()
        {
            10, 20
        };
        var listAdapter = new ListAdapter();

        // Act
        var addStatus = listAdapter.TryAdd(targetObject, "-", resolver, "James", out var message);

        // Assert
        Assert.False(addStatus);
        Assert.Equal("The value 'James' is invalid for target location.", message);
    }
コード例 #14
0
        public void Patch_OnNonGenericListObject_Fails()
        {
            // Arrange
            var targetObject = new ArrayList
            {
                20, 30
            };
            var listAdapter = new ListAdapter();
            var options     = new JsonSerializerOptions();

            // Act
            var addStatus = listAdapter.TryAdd(targetObject, typeof(ArrayList), "-", options, "40", out var message);

            // Assert
            Assert.False(addStatus);
            Assert.Equal($"The type '{targetObject.GetType().FullName}' which is a non generic list is not supported for json patch operations. Only generic list types are supported.", message);
        }
コード例 #15
0
        public void Add_NullObject_ToReferenceTypeListWorks()
        {
            // Arrange
            var listAdapter  = new ListAdapter();
            var targetObject = new List <string> {
                "James", "Mike"
            };
            var options = new JsonSerializerOptions();

            // Act
            var addStatus = listAdapter.TryAdd(targetObject, typeof(List <string>), "-", options, null, out var message);

            // Assert
            Assert.True(addStatus);
            Assert.True(string.IsNullOrEmpty(message), "Expected no error message");
            Assert.Equal(3, targetObject.Count);
            Assert.Equal(new List <string> {
                "James", "Mike", null
            }, targetObject);
        }
コード例 #16
0
        public void Add_WithIndexSameAsNumberOfElements_Works()
        {
            // Arrange
            var targetObject = new List <string> {
                "James", "Mike"
            };
            var listAdapter = new ListAdapter();
            var position    = targetObject.Count.ToString();
            var options     = new JsonSerializerOptions();

            // Act
            var addStatus = listAdapter.TryAdd(targetObject, typeof(List <string>), position, options, "Rob", out var message);

            // Assert
            Assert.Null(message);
            Assert.True(addStatus);
            Assert.Equal(3, targetObject.Count);
            Assert.Equal(new List <string> {
                "James", "Mike", "Rob"
            }, targetObject);
        }
コード例 #17
0
    public void Add_NullObject_ToReferenceTypeListWorks()
    {
        // Arrange
        var resolver     = new DefaultContractResolver();
        var listAdapter  = new ListAdapter();
        var targetObject = new List <string>()
        {
            "James", "Mike"
        };

        // Act
        var addStatus = listAdapter.TryAdd(targetObject, "-", resolver, value: null, errorMessage: out var message);

        // Assert
        Assert.True(addStatus);
        Assert.True(string.IsNullOrEmpty(message), "Expected no error message");
        Assert.Equal(3, targetObject.Count);
        Assert.Equal(new List <string>()
        {
            "James", "Mike", null
        }, targetObject);
    }
コード例 #18
0
        public void Add_CompatibleTypeWorks()
        {
            // Arrange
            var sDto         = new SimpleObject();
            var iDto         = new InheritedObject();
            var targetObject = new List <SimpleObject> {
                sDto
            };
            var listAdapter = new ListAdapter();
            var options     = new JsonSerializerOptions();

            // Act
            var addStatus = listAdapter.TryAdd(targetObject, typeof(List <SimpleObject>), "-", options, iDto, out var message);

            // Assert
            Assert.True(addStatus);
            Assert.True(string.IsNullOrEmpty(message), "Expected no error message");
            Assert.Equal(2, targetObject.Count);
            Assert.Equal(new List <SimpleObject> {
                sDto, iDto
            }, targetObject);
        }
コード例 #19
0
    public void Add_WithIndexSameAsNumberOfElements_Works()
    {
        // Arrange
        var resolver     = new DefaultContractResolver();
        var targetObject = new List <string>()
        {
            "James", "Mike"
        };
        var listAdapter = new ListAdapter();
        var position    = targetObject.Count.ToString(CultureInfo.InvariantCulture);

        // Act
        var addStatus = listAdapter.TryAdd(targetObject, position, resolver, "Rob", out var message);

        // Assert
        Assert.Null(message);
        Assert.True(addStatus);
        Assert.Equal(3, targetObject.Count);
        Assert.Equal(new List <string>()
        {
            "James", "Mike", "Rob"
        }, targetObject);
    }
コード例 #20
0
    public void Add_CompatibleTypeWorks()
    {
        // Arrange
        var sDto         = new SimpleObject();
        var iDto         = new InheritedObject();
        var resolver     = new DefaultContractResolver();
        var targetObject = new List <SimpleObject>()
        {
            sDto
        };
        var listAdapter = new ListAdapter();

        // Act
        var addStatus = listAdapter.TryAdd(targetObject, "-", resolver, iDto, out var message);

        // Assert
        Assert.True(addStatus);
        Assert.True(string.IsNullOrEmpty(message), "Expected no error message");
        Assert.Equal(2, targetObject.Count);
        Assert.Equal(new List <SimpleObject>()
        {
            sDto, iDto
        }, targetObject);
    }