diff --git a/internal/report/console/console.go b/internal/report/console/console.go index f660616..efca37f 100644 --- a/internal/report/console/console.go +++ b/internal/report/console/console.go @@ -10,6 +10,7 @@ import ( "github.com/jedib0t/go-pretty/v6/table" "github.com/jedib0t/go-pretty/v6/text" "github.com/rs/zerolog/log" + "github.com/sergi/go-diff/diffmatchpatch" "gitlab.com/TECHNOFAB/nixtest/internal/types" "gitlab.com/TECHNOFAB/nixtest/internal/util" ) @@ -24,10 +25,16 @@ func PrintErrors(results types.Results, noColor bool) { fmt.Println(text.FgRed.Sprintf("⚠ Test \"%s/%s\" failed:", result.Spec.Suite, result.Spec.Name)) message := result.ErrorMessage if result.Status == types.StatusFailure && message == "" { - var err error - message, err = util.ComputeDiff(result.Expected, result.Actual) - if err != nil { - log.Panic().Err(err).Msg("failed to compute diff") + if noColor { + var err error + message, err = util.ComputeDiff(result.Expected, result.Actual) + if err != nil { + log.Panic().Err(err).Msg("failed to compute diff") + } + } else { + dmp := diffmatchpatch.New() + diffs := dmp.DiffMain(result.Expected, result.Actual, true) + message = fmt.Sprintf("Diff:\n%s", dmp.DiffPrettyText(diffs)) } } diff --git a/lib/scriptHelpers.sh b/lib/scriptHelpers.sh index ba08e47..b1e3514 100644 --- a/lib/scriptHelpers.sh +++ b/lib/scriptHelpers.sh @@ -11,16 +11,16 @@ function assert_not_eq() { assert "$1 -ne $2" "$3" } function assert_contains() { - echo -n "$1" | grep -q -- "$2" || { - echo "Assertion failed: $3. The following does not contain $2: $1" >&2; + echo "$1" | grep -q -- "$2" || { + echo "Assertion failed: $3. $1 does not contain $2" >&2; exit 1; } } function assert_not_contains() { - echo -n "$1" | grep -q -- "$2" && { - echo "Assertion failed: $3. The following does contain $2: $1" >&2; + echo "$1" | grep -q -- "$2" && { + echo "Assertion failed: $3. $1 does contain $2" >&2; exit 1; - } || true + } } function assert_file_contains() { grep -q -- "$2" $1 || {