testing: capture testname on --- PASS and --- FAIL lines

This fixes an issue raised at https://github.com/golang/go/issues/38458#issuecomment-635617670
in which --- PASS and --- FAIL lines would not trigger --- CONT lines
of other tests.

Change-Id: I0d8cc54d682a370d0a6ea6816a11b2e462a92efe
Reviewed-on: https://go-review.googlesource.com/c/go/+/235997
Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
This commit is contained in:
Jean de Klerk 2020-06-01 12:19:05 -06:00
parent a9cc1051c1
commit ba6ccf3b04
2 changed files with 44 additions and 6 deletions

View file

@ -0,0 +1,39 @@
# Run parallel chatty tests. Assert on CONT lines. This test makes sure that
# multiple parallel outputs have the appropriate CONT lines between them.
go test -parallel 3 chatty_parallel_test.go -v
stdout '--- PASS: TestFast \([0-9.]{4}s\)\n=== CONT TestSlow\n chatty_parallel_test.go:31: this is the second TestSlow log\n--- PASS: TestSlow \([0-9.]{4}s\)'
-- chatty_parallel_test.go --
package chatty_paralell_test
import (
"testing"
"time"
)
var (
run = make(chan struct{})
afterFirstLog = make(chan struct{})
afterPass = make(chan struct{})
)
func TestFast(t *testing.T) {
t.Parallel()
<-afterFirstLog
t.Cleanup(func() {
close(afterPass)
})
}
func TestSlow(t *testing.T) {
t.Parallel()
t.Logf("this is the first TestSlow log")
close(afterFirstLog)
<-afterPass
time.Sleep(100 * time.Millisecond)
t.Logf("this is the second TestSlow log")
}

View file

@ -353,15 +353,14 @@ func (p *testPrinter) Print(testName, out string) {
}
func (p *testPrinter) Fprint(w io.Writer, testName, out string) {
if !p.chatty || strings.HasPrefix(out, "--- PASS") || strings.HasPrefix(out, "--- FAIL") {
fmt.Fprint(w, out)
return
}
p.lastNameMu.Lock()
defer p.lastNameMu.Unlock()
if strings.HasPrefix(out, "=== CONT") || strings.HasPrefix(out, "=== RUN") {
if !p.chatty ||
strings.HasPrefix(out, "--- PASS") ||
strings.HasPrefix(out, "--- FAIL") ||
strings.HasPrefix(out, "=== CONT") ||
strings.HasPrefix(out, "=== RUN") {
p.lastName = testName
fmt.Fprint(w, out)
return