From c1ad61b3674b9b258deb4fab2d2dc3820f5ffde5 Mon Sep 17 00:00:00 2001 From: technofab Date: Sat, 31 May 2025 18:10:11 +0200 Subject: [PATCH] chore: display "script" output on failure without diffing --- cmd/nixtest/display.go | 7 +++---- cmd/nixtest/junit.go | 20 ++++++++++++-------- cmd/nixtest/main.go | 8 ++++++-- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/cmd/nixtest/display.go b/cmd/nixtest/display.go index ac542a3..10532d7 100644 --- a/cmd/nixtest/display.go +++ b/cmd/nixtest/display.go @@ -19,13 +19,12 @@ func printErrors(results Results) { continue } fmt.Println(text.FgRed.Sprintf("⚠ Test \"%s\" failed:", result.Spec.Name)) - var message string - if result.Status == StatusFailure { + var message string = result.ErrorMessage + // if ErrorMessage is set, prefer that + if result.Status == StatusFailure && message == "" { dmp := diffmatchpatch.New() diffs := dmp.DiffMain(result.Expected, result.Actual, false) message = fmt.Sprintf("Diff:\n%s", dmp.DiffPrettyText(diffs)) - } else { - message = result.ErrorMessage } // handle multi-line colored changes diff --git a/cmd/nixtest/junit.go b/cmd/nixtest/junit.go index dc6b6e5..4a4a1ca 100644 --- a/cmd/nixtest/junit.go +++ b/cmd/nixtest/junit.go @@ -88,15 +88,19 @@ func GenerateJUnitReport(name string, results Results) (string, error) { if result.Status == StatusFailure { suite.Failures++ report.Failures++ - // FIXME: ComputeEdits deprecated - edits := myers.ComputeEdits(result.Expected, result.Actual) - diff, err := textdiff.ToUnified("expected", "actual", result.Expected, edits, 3) - if err != nil { - return "", err + if result.ErrorMessage != "" { + testCase.Failure = &result.ErrorMessage + } else { + // FIXME: ComputeEdits deprecated + edits := myers.ComputeEdits(result.Expected, result.Actual) + diff, err := textdiff.ToUnified("expected", "actual", result.Expected, edits, 3) + if err != nil { + return "", err + } + // remove newline hint + diff = strings.ReplaceAll(diff, "\\ No newline at end of file\n", "") + testCase.Failure = &diff } - // remove newline hint - diff = strings.ReplaceAll(diff, "\\ No newline at end of file\n", "") - testCase.Failure = &diff } else if result.Status == StatusError { suite.Errors++ report.Errors++ diff --git a/cmd/nixtest/main.go b/cmd/nixtest/main.go index 8ec3390..4e11cac 100644 --- a/cmd/nixtest/main.go +++ b/cmd/nixtest/main.go @@ -212,8 +212,12 @@ func runTest(spec TestSpec) TestResult { result.Status = StatusError result.ErrorMessage = fmt.Sprintf("[system] failed to run script: %v", err.Error()) } - expected = "" - actual = fmt.Sprintf("[exit code %d]\n[Stdout]\n%s\n[Stderr]\n%s", exitCode, stdout.String(), stderr.String()) + if exitCode != 0 { + result.Status = StatusFailure + result.ErrorMessage = fmt.Sprintf("[exit code %d]\n[stdout]\n%s\n[stderr]\n%s", exitCode, stdout.String(), stderr.String()) + } + // no need for equality checking with "script" + goto end } else { log.Panic().Str("type", spec.Type).Msg("Invalid test type") }