mirror of
https://github.com/golang/go
synced 2024-11-15 02:20:32 -07:00
[release-branch.go1.15] testing: treat PAUSE lines as changing the active test name
We could instead fix cmd/test2json to treat PAUSE lines as *not*
changing the active test name, but that seems like it would be more
confusing to humans, and also wouldn't fix tools that parse output
using existing builds of cmd/test2json.
Fixes #40849
Updates #40657
Change-Id: I937611778f5b1e7dd1d6e9f44424d7e725a589ed
Reviewed-on: https://go-review.googlesource.com/c/go/+/248727
Run-TryBot: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Jean de Klerk <deklerk@google.com>
(cherry picked from commit cdc77d34d7
)
Reviewed-on: https://go-review.googlesource.com/c/go/+/249097
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
b990aa0ed7
commit
0ffc5672df
27
src/cmd/go/testdata/script/test_json_interleaved.txt
vendored
Normal file
27
src/cmd/go/testdata/script/test_json_interleaved.txt
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Regression test for https://golang.org/issue/40657: output from the main test
|
||||||
|
# function should be attributed correctly even if interleaved with the PAUSE
|
||||||
|
# line for a new parallel subtest.
|
||||||
|
|
||||||
|
[short] skip
|
||||||
|
|
||||||
|
go test -json
|
||||||
|
stdout '"Test":"TestWeirdTiming","Output":"[^"]* logging to outer again\\n"'
|
||||||
|
|
||||||
|
-- go.mod --
|
||||||
|
module example.com
|
||||||
|
go 1.15
|
||||||
|
-- main_test.go --
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestWeirdTiming(outer *testing.T) {
|
||||||
|
outer.Run("pauser", func(pauser *testing.T) {
|
||||||
|
outer.Logf("logging to outer")
|
||||||
|
pauser.Parallel()
|
||||||
|
})
|
||||||
|
|
||||||
|
outer.Logf("logging to outer again")
|
||||||
|
}
|
@ -357,10 +357,19 @@ func (p *testPrinter) Fprint(w io.Writer, testName, out string) {
|
|||||||
defer p.lastNameMu.Unlock()
|
defer p.lastNameMu.Unlock()
|
||||||
|
|
||||||
if !p.chatty ||
|
if !p.chatty ||
|
||||||
strings.HasPrefix(out, "--- PASS") ||
|
strings.HasPrefix(out, "--- PASS: ") ||
|
||||||
strings.HasPrefix(out, "--- FAIL") ||
|
strings.HasPrefix(out, "--- FAIL: ") ||
|
||||||
strings.HasPrefix(out, "=== CONT") ||
|
strings.HasPrefix(out, "--- SKIP: ") ||
|
||||||
strings.HasPrefix(out, "=== RUN") {
|
strings.HasPrefix(out, "=== RUN ") ||
|
||||||
|
strings.HasPrefix(out, "=== CONT ") ||
|
||||||
|
strings.HasPrefix(out, "=== PAUSE ") {
|
||||||
|
// If we're buffering test output (!p.chatty), we don't really care which
|
||||||
|
// test is emitting which line so long as they are serialized.
|
||||||
|
//
|
||||||
|
// If the message already implies an association with a specific new test,
|
||||||
|
// we don't need to check what the old test name was or log an extra CONT
|
||||||
|
// line for it. (We're updating it anyway, and the current message already
|
||||||
|
// includes the test name.)
|
||||||
p.lastName = testName
|
p.lastName = testName
|
||||||
fmt.Fprint(w, out)
|
fmt.Fprint(w, out)
|
||||||
return
|
return
|
||||||
@ -980,7 +989,13 @@ func (t *T) Parallel() {
|
|||||||
for ; root.parent != nil; root = root.parent {
|
for ; root.parent != nil; root = root.parent {
|
||||||
}
|
}
|
||||||
root.mu.Lock()
|
root.mu.Lock()
|
||||||
fmt.Fprintf(root.w, "=== PAUSE %s\n", t.name)
|
// Unfortunately, even though PAUSE indicates that the named test is *no
|
||||||
|
// longer* running, cmd/test2json interprets it as changing the active test
|
||||||
|
// for the purpose of log parsing. We could fix cmd/test2json, but that
|
||||||
|
// won't fix existing deployments of third-party tools that already shell
|
||||||
|
// out to older builds of cmd/test2json — so merely fixing cmd/test2json
|
||||||
|
// isn't enough for now.
|
||||||
|
printer.Fprint(root.w, t.name, fmt.Sprintf("=== PAUSE %s\n", t.name))
|
||||||
root.mu.Unlock()
|
root.mu.Unlock()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user