Skip to content

Commit 57ffa1d

Browse files
Merge pull request #9 from asherf/extract-err
collect failed test error message
2 parents e3cde50 + 65b5d57 commit 57ffa1d

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

reporter/reporter.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"io"
77
"os"
8+
"strings"
89
"time"
910

1011
"github.com/ctrf-io/go-ctrf-json-reporter/ctrf"
@@ -35,7 +36,7 @@ func ParseTestResults(r io.Reader, verbose bool, env *ctrf.Environment) (*ctrf.R
3536

3637
report := ctrf.NewReport("gotest", env)
3738
report.Results.Summary.Start = time.Now().UnixNano() / int64(time.Millisecond)
38-
for _, event := range testEvents {
39+
for i, event := range testEvents {
3940
if verbose {
4041
jsonEvent, err := json.Marshal(event)
4142
if err != nil {
@@ -76,6 +77,7 @@ func ParseTestResults(r io.Reader, verbose bool, env *ctrf.Environment) (*ctrf.R
7677
Name: event.Test,
7778
Status: ctrf.TestFailed,
7879
Duration: duration,
80+
Message: getMessagesForTest(testEvents, i, event.Package, event.Test),
7981
})
8082
} else if event.Action == "skip" {
8183
report.Results.Summary.Tests++
@@ -91,6 +93,20 @@ func ParseTestResults(r io.Reader, verbose bool, env *ctrf.Environment) (*ctrf.R
9193
}
9294
return report, nil
9395
}
96+
func getMessagesForTest(testEvents []TestEvent, index int, packageName, testName string) string {
97+
var messages []string
98+
for i := index; i >= 0; i-- {
99+
if testEvents[i].Package == packageName && testEvents[i].Test == testName {
100+
if testEvents[i].Action == "output" {
101+
messages = append(messages, testEvents[i].Output)
102+
}
103+
} else {
104+
break
105+
}
106+
}
107+
reverse(messages)
108+
return strings.Join(messages, "")
109+
}
94110

95111
func WriteReportToFile(filename string, report *ctrf.Report) error {
96112
err := report.WriteFile(filename)
@@ -105,10 +121,16 @@ func secondsToMillis(seconds float64) int64 {
105121
return int64(seconds * 1000)
106122
}
107123

108-
func parseTimeString(timeString string) (int64, error) {
124+
func parseTimeString(timeString string) (int64, error) {
109125
t, err := time.Parse(time.RFC3339Nano, timeString)
110126
if err != nil {
111127
return 0, err
112128
}
113129
return t.UnixNano() / int64(time.Millisecond), nil
114130
}
131+
132+
func reverse(s []string) {
133+
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
134+
s[i], s[j] = s[j], s[i]
135+
}
136+
}

0 commit comments

Comments
 (0)