public static AndConstraint EqualWithLineByLineDiffOutput()

in src/TestHelpers/Assertions/StringAssertionsExtensions.cs [36:72]


    public static AndConstraint<StringAssertions> EqualWithLineByLineDiffOutput(this StringAssertions instance, Assembly sourceAssembly, TestContext testContext, string expected, string expectedLocation, string actualLocation, string because = "", params object[] becauseArgs)
    {
        const int truncate = 100;
        var diff = InlineDiffBuilder.Diff(expected, instance.Subject, ignoreWhiteSpace: false, ignoreCase: false);

        var lineLogs = diff.Lines
            .Where(line => line.Type != ChangeType.Unchanged)
            .Select(line => $"[{line.Position}] {GetDiffMarker(line.Type)} {EscapeWhitespace(line.Text)}")
            .Take(truncate);

        if (lineLogs.Count() >= truncate)
        {
            lineLogs = lineLogs.Concat(new[] { "...truncated..." });
        }

        var testPassed = !diff.HasDifferences;
        var isBaselineUpdate = !testPassed && BaselineHelper.ShouldSetBaseline(testContext);
        if (isBaselineUpdate)
        {
            BaselineHelper.SetBaseline(actualLocation, expectedLocation);
        }

        var fullActualLocation = BaselineHelper.TryGetAbsolutePathRelativeToRepoRoot(actualLocation);
        var fullExpectedLocation = BaselineHelper.TryGetAbsolutePathRelativeToRepoRoot(expectedLocation);

        Execute.Assertion
            .BecauseOf(because, becauseArgs)
            .ForCondition(testPassed)
            .FailWith(
                BaselineHelper.GetAssertionFormatString(isBaselineUpdate, canUpdateBaselines: fullActualLocation is not null && fullExpectedLocation is not null),
                string.Join("\n", lineLogs),
                fullActualLocation,
                fullExpectedLocation,
                sourceAssembly.Location);

        return new AndConstraint<StringAssertions>(instance);
    }