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

View file

@ -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++

View file

@ -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")
}