public void SetUp()
 {
     _jsonComparer      = Substitute.For <IJsonComparer>();
     _jsonArrayComparer = new JsonArrayComparer();
     _jsonComparer.Compare(Arg.Any <JToken>(), Arg.Any <JToken>(), Arg.Any <string>())
     .Returns(new List <JsonCompareError>());
 }
        public IEnumerable <IJsonCompareError <JToken> > Compare(JObject expected, JObject actual, IJsonComparer jsonComparer, string path = "")
        {
            foreach (var actualProperty in actual.Properties())
            {
                var expectedProperty = expected.Property(actualProperty.Name);
                if (expectedProperty == null)
                {
                    yield return(new UnexpectedPropertyJsonComparerError(path, expected, actual, actualProperty));
                }
            }

            foreach (var expectedProperty in expected.Properties())
            {
                var actualProperty = actual.Property(expectedProperty.Name);
                var expectedJToken = expectedProperty.Value;
                if (actualProperty == null)
                {
                    yield return(new MissingPropertyJsonComparerError(path, expected, actual, expectedProperty));

                    continue;
                }

                var elementPath = JsonPathUtils.Combine(path, actualProperty.Name);
                var errors      = jsonComparer.Compare(expectedJToken, actualProperty.Value, elementPath);
                foreach (var jsonCompareError in errors)
                {
                    yield return(jsonCompareError);
                }
            }
        }
Esempio n. 3
0
        public void WhenComparingObjects_CallJsonCompareOnEachProperty()
        {
            var expectedJObject = JObject.FromObject(new { someProperty = 42 });
            var actualJObject   = JObject.FromObject(new { someProperty = 42 });

            _jsonComparer.Compare(expectedJObject["someProperty"], actualJObject["someProperty"], "someProperty")
            .Returns(new List <JsonCompareError> {
                new TestJsonCompareError()
            });

            var errors = _jsonObjectComparer.Compare(expectedJObject, actualJObject, _jsonComparer);

            using (new AssertionScope())
            {
                var firstError = errors.FirstOrDefault();
                firstError.Should().NotBeNull();
                firstError.Should().BeOfType <TestJsonCompareError>();
            }
        }
        public void WhenComparingArray_CallJsonComparerOnEachValues()
        {
            var expectedJArray = JArray.Parse("[1,2,3]");
            var actualJArray   = JArray.Parse("[1,2,3]");

            _jsonComparer.Compare(expectedJArray[0], actualJArray[0], "[0]")
            .Returns(new List <JsonCompareError> {
                new TestJsonCompareError()
            });
            _jsonComparer.Compare(expectedJArray[2], actualJArray[2], "[2]")
            .Returns(new List <JsonCompareError> {
                new TestJsonCompareError()
            });

            var errors = _jsonArrayComparer.Compare(expectedJArray, actualJArray, _jsonComparer).ToList();

            using (new AssertionScope())
            {
                errors.Should().ContainItemsAssignableTo <TestJsonCompareError>();
                errors.Count.Should().Be(2);
            }
        }
        public IEnumerable <IJsonCompareError <JToken> > Compare(JArray expected, JArray actual, IJsonComparer jsonComparer, string path = "")
        {
            if (expected.Count != actual.Count)
            {
                yield return(new InvalidSizeJsonCompareError(path, expected, actual));

                yield break;
            }

            for (var i = 0; i < expected.Count; i++)
            {
                var expectedElement = expected[i];
                var actualElement   = actual[i];

                var errors = jsonComparer.Compare(expectedElement, actualElement, JsonPathUtils.Combine(path, $"[{i}]"));

                foreach (var error in errors)
                {
                    yield return(error);
                }
            }
        }