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); } } }
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); } } }