chore: display "script" output on failure without diffing

This commit is contained in:
technofab 2025-05-31 18:10:11 +02:00
parent 2b7c215ffa
commit c1ad61b367
3 changed files with 21 additions and 14 deletions

View file

@ -19,13 +19,12 @@ func printErrors(results Results) {
continue continue
} }
fmt.Println(text.FgRed.Sprintf("⚠ Test \"%s\" failed:", result.Spec.Name)) fmt.Println(text.FgRed.Sprintf("⚠ Test \"%s\" failed:", result.Spec.Name))
var message string var message string = result.ErrorMessage
if result.Status == StatusFailure { // if ErrorMessage is set, prefer that
if result.Status == StatusFailure && message == "" {
dmp := diffmatchpatch.New() dmp := diffmatchpatch.New()
diffs := dmp.DiffMain(result.Expected, result.Actual, false) diffs := dmp.DiffMain(result.Expected, result.Actual, false)
message = fmt.Sprintf("Diff:\n%s", dmp.DiffPrettyText(diffs)) message = fmt.Sprintf("Diff:\n%s", dmp.DiffPrettyText(diffs))
} else {
message = result.ErrorMessage
} }
// handle multi-line colored changes // handle multi-line colored changes

View file

@ -88,6 +88,9 @@ func GenerateJUnitReport(name string, results Results) (string, error) {
if result.Status == StatusFailure { if result.Status == StatusFailure {
suite.Failures++ suite.Failures++
report.Failures++ report.Failures++
if result.ErrorMessage != "" {
testCase.Failure = &result.ErrorMessage
} else {
// FIXME: ComputeEdits deprecated // FIXME: ComputeEdits deprecated
edits := myers.ComputeEdits(result.Expected, result.Actual) edits := myers.ComputeEdits(result.Expected, result.Actual)
diff, err := textdiff.ToUnified("expected", "actual", result.Expected, edits, 3) diff, err := textdiff.ToUnified("expected", "actual", result.Expected, edits, 3)
@ -97,6 +100,7 @@ func GenerateJUnitReport(name string, results Results) (string, error) {
// remove newline hint // remove newline hint
diff = strings.ReplaceAll(diff, "\\ No newline at end of file\n", "") diff = strings.ReplaceAll(diff, "\\ No newline at end of file\n", "")
testCase.Failure = &diff testCase.Failure = &diff
}
} else if result.Status == StatusError { } else if result.Status == StatusError {
suite.Errors++ suite.Errors++
report.Errors++ report.Errors++

View file

@ -212,8 +212,12 @@ func runTest(spec TestSpec) TestResult {
result.Status = StatusError result.Status = StatusError
result.ErrorMessage = fmt.Sprintf("[system] failed to run script: %v", err.Error()) result.ErrorMessage = fmt.Sprintf("[system] failed to run script: %v", err.Error())
} }
expected = "" if exitCode != 0 {
actual = fmt.Sprintf("[exit code %d]\n[Stdout]\n%s\n[Stderr]\n%s", exitCode, stdout.String(), stderr.String()) 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 { } else {
log.Panic().Str("type", spec.Type).Msg("Invalid test type") log.Panic().Str("type", spec.Type).Msg("Invalid test type")
} }