12345678910111213141516171819202122232425262728293031323334353637 |
- 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
- }
|