package gtest import ( "bytes" "encoding/json" "io" "time" ) type gFailure struct { Failure string `json:"failure"` Type string `json:"type"` } type gTestsuite struct { Name string `json:"name"` Status string `json:"status"` Result string `json:"result"` Timestamp time.Time `json:"timestamp"` Time string `json:"time"` Classname string `json:"classname"` Failures []gFailure `json:"failures"` } type gTestsuites struct { Name string `json:"name"` Tests int `json:"tests"` Failures int `json:"failures"` Disabled int `json:"disabled"` Errors int `json:"errors"` Timestamp time.Time `json:"timestamp"` Time string `json:"time"` Testsuite []gTestsuite `json:"testsuite"` } type gResults struct { Tests int `json:"tests"` Failures int `json:"failures"` Disabled int `json:"disabled"` Errors int `json:"errors"` Timestamp time.Time `json:"timestamp"` Time string `json:"time"` Name string `json:"name"` Testsuites []gTestsuites `json:"testsuites"` } type Result struct { id string pass bool failureMsg string testOutput string } func failureMsg(failures []gFailure) string { failure_msg := "" for _, failure := range failures { failure_msg += failure.Failure + "\n" } return failure_msg } func decodeResults(r io.Reader) ([]Result, error) { decoded := make([]Result, 0) var results gResults buf := bytes.Buffer{} if _, err := buf.ReadFrom(r); err != nil { return decoded, err } if err := json.Unmarshal(buf.Bytes(), &results); err != nil { return decoded, err } for _, suite := range results.Testsuites { for _, test := range suite.Testsuite { n := len(test.Failures) res := Result { id: suite.Name + "." + test.Name, pass: n == 0, failureMsg: failureMsg(test.Failures), } decoded = append(decoded, res) } } return decoded, nil }