package assertions import ( "fmt" "github.com/smartystreets/assertions/internal/go-diff/diffmatchpatch" ) func composePrettyDiff(expected, actual string) string { diff := diffmatchpatch.New() diffs := diff.DiffMain(expected, actual, false) if prettyDiffIsLikelyToBeHelpful(diffs) { return fmt.Sprintf("\nDiff: '%s'", diff.DiffPrettyText(diffs)) } return "" } // prettyDiffIsLikelyToBeHelpful returns true if the diff listing contains // more 'equal' segments than 'deleted'/'inserted' segments. func prettyDiffIsLikelyToBeHelpful(diffs []diffmatchpatch.Diff) bool { equal, deleted, inserted := measureDiffTypeLengths(diffs) return equal > deleted && equal > inserted } func measureDiffTypeLengths(diffs []diffmatchpatch.Diff) (equal, deleted, inserted int) { for _, segment := range diffs { switch segment.Type { case diffmatchpatch.DiffEqual: equal += len(segment.Text) case diffmatchpatch.DiffDelete: deleted += len(segment.Text) case diffmatchpatch.DiffInsert: inserted += len(segment.Text) } } return equal, deleted, inserted }