oss.indeed.com/go/go-opine@v1.3.0/internal/gotest/output.go (about) 1 package gotest 2 3 import ( 4 "io" 5 "regexp" 6 ) 7 8 var ( 9 removeCoverageOutputRegexp = regexp.MustCompile(`(?m)(?:^|\n|\t)coverage:[^\t\n]*`) 10 removePassOutputRegexp = regexp.MustCompile(`(?m)(?:\nPASS$|^PASS\n)`) 11 ) 12 13 const testFailure = "fail" 14 15 // removeCoverageOutput is a resultAccepter that removes coverage-related 16 // output from results before forwarding to the next result accepter. 17 type removeCoverageOutput struct { 18 next resultAccepter 19 } 20 21 var _ resultAccepter = (*removeCoverageOutput)(nil) 22 23 func newRemoveCoverageOutput(next resultAccepter) *removeCoverageOutput { 24 return &removeCoverageOutput{next: next} 25 } 26 27 func (r *removeCoverageOutput) Accept(res result) error { 28 res.Output = removeCoverageOutputRegexp.ReplaceAllString(res.Output, "") 29 return r.next.Accept(res) 30 } 31 32 // verboseOutput is a resultAccepter that writes "go test -v"-like 33 // output to an io.Writer. 34 type verboseOutput struct { 35 to io.Writer 36 } 37 38 var _ resultAccepter = (*verboseOutput)(nil) 39 40 func newVerboseOutput(to io.Writer) *verboseOutput { 41 return &verboseOutput{to: to} 42 } 43 44 func (v *verboseOutput) Accept(res result) error { 45 _, err := v.to.Write([]byte(res.Output)) 46 return err 47 } 48 49 // quietOutput is a resultAccepter that writes "go test"-like (no "-v") 50 // output to an io.Writer. 51 type quietOutput struct { 52 to io.Writer 53 } 54 55 var _ resultAccepter = (*quietOutput)(nil) 56 57 func newQuietOutput(to io.Writer) *quietOutput { 58 return &quietOutput{to: to} 59 } 60 61 func (q quietOutput) Accept(res result) error { 62 // Only print output from failed tests. 63 if res.Key.Test != "" && res.Outcome == testFailure { 64 _, err := q.to.Write([]byte(res.Output)) 65 return err 66 } 67 68 // Remove "PASS" lines from the non-test (i.e. package) output. There 69 // is already a line starting with "?", "ok", or "fail" that indicates the 70 // package result. 71 if res.Key.Test == "" { 72 _, err := q.to.Write([]byte(removePassOutputRegexp.ReplaceAllString(res.Output, ""))) 73 return err 74 } 75 76 return nil 77 }