public static AndConstraint <JTokenAssertions> EqualWithJsonDiffOutput(this JTokenAssertions instance, TestContext testContext, JToken expected, string expectedLocation, string actualLocation, string because = "", params object[] becauseArgs) { var jsonDiff = GetJsonDiff(instance.Subject, expected); var testPassed = jsonDiff is null; var isBaselineUpdate = !testPassed && BaselineHelper.ShouldSetBaseline(testContext); if (isBaselineUpdate) { BaselineHelper.SetBaseline(actualLocation, expectedLocation); } Execute.Assertion .BecauseOf(because, becauseArgs) .ForCondition(testPassed) .FailWith( BaselineHelper.GetAssertionFormatString(isBaselineUpdate), jsonDiff, BaselineHelper.GetAbsolutePathRelativeToRepoRoot(actualLocation), BaselineHelper.GetAbsolutePathRelativeToRepoRoot(expectedLocation)); return(new AndConstraint <JTokenAssertions>(instance)); }
public static AndConstraint <JTokenAssertions> EqualWithJsonDiffOutput(this JTokenAssertions instance, TestContext testContext, JToken expected, string expectedLocation, string actualLocation, string because = "", params object[] becauseArgs) { const int truncate = 100; var diff = new JsonDiffPatch(new Options { TextDiff = TextDiffMode.Simple }).Diff(instance.Subject, expected); // JsonDiffPatch.Diff returns null if there are no diffs var lineLogs = (diff?.ToString() ?? string.Empty) .Split('\n') .Take(truncate); if (lineLogs.Count() > truncate) { lineLogs = lineLogs.Concat(new[] { "...truncated..." }); } var testPassed = diff is null; var isBaselineUpdate = !testPassed && BaselineHelper.ShouldSetBaseline(testContext); if (isBaselineUpdate) { BaselineHelper.SetBaseline(actualLocation, expectedLocation); } Execute.Assertion .BecauseOf(because, becauseArgs) .ForCondition(testPassed) .FailWith( BaselineHelper.GetAssertionFormatString(isBaselineUpdate), string.Join('\n', lineLogs), BaselineHelper.GetAbsolutePathRelativeToRepoRoot(actualLocation), BaselineHelper.GetAbsolutePathRelativeToRepoRoot(expectedLocation)); return(new AndConstraint <JTokenAssertions>(instance)); }