# Run parallel chatty tests. Assert on CONT or NAME lines. This test makes sure that
# multiple parallel outputs have the appropriate CONT lines between them.
go test -parallel 3 chatty_parallel -v

stdout '=== RUN   TestInterruptor/interruption\n=== (CONT|NAME)  TestLog\n    chatty_parallel_test.go:28: this is the second TestLog log\n--- PASS: Test(Log|Interruptor) \([0-9.]{4}s\)'

-- go.mod --
module chatty_parallel

go 1.18
-- chatty_parallel_test.go --
package chatty_parallel_test

import (
	"testing"
)

var (
	afterFirstLog = make(chan struct{})
	afterSubTest  = make(chan struct{})
	afterSecondLog = make(chan struct{})
)

func TestInterruptor(t *testing.T) {
	t.Parallel()

	<-afterFirstLog
	t.Run("interruption", func (t *testing.T) {})
	close(afterSubTest)
	<-afterSecondLog // Delay the "PASS: TestInterruptor" line until after "CONT  TestLog".
}

func TestLog(t *testing.T) {
	t.Parallel()

	t.Logf("this is the first TestLog log")
	close(afterFirstLog)
	<-afterSubTest
	t.Logf("this is the second TestLog log")
	close(afterSecondLog)
}
