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