Commit 3def99a8 authored by Luka Zitnik's avatar Luka Zitnik Committed by Bryan C. Mills

cmd/go: print finally FAIL if a test has failed in package list mode

Fixes #30507

Change-Id: Ic598e4d5f71c624fcde051982bf85533e2f18e8d
Reviewed-on: https://go-review.googlesource.com/c/go/+/170948Reviewed-by: default avatarBryan C. Mills <bcmills@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 23f3ea82
......@@ -1285,7 +1285,10 @@
// line. If a package test fails, go test prints the full test output.
// If invoked with the -bench or -v flag, go test prints the full
// output even for passing package tests, in order to display the
// requested benchmark results or verbose logging.
// requested benchmark results or verbose logging. After the package
// tests for all of the listed packages finish, and their output is
// printed, go test prints a final 'FAIL' status if any package test
// has failed.
//
// In package list mode only, go test caches successful package test
// results to avoid unnecessary repeated running of tests. When the
......
......@@ -132,6 +132,10 @@ func SetExitStatus(n int) {
exitMu.Unlock()
}
func GetExitStatus() int {
return exitStatus
}
// Run runs the command, with stdout and stderr
// connected to the go command's own stdout and stderr.
// If the command fails, Run reports the error using Errorf.
......
......@@ -102,7 +102,10 @@ package test passes, go test prints only the final 'ok' summary
line. If a package test fails, go test prints the full test output.
If invoked with the -bench or -v flag, go test prints the full
output even for passing package tests, in order to display the
requested benchmark results or verbose logging.
requested benchmark results or verbose logging. After the package
tests for all of the listed packages finish, and their output is
printed, go test prints a final 'FAIL' status if any package test
has failed.
In package list mode only, go test caches successful package test
results to avoid unnecessary repeated running of tests. When the
......@@ -735,7 +738,7 @@ func runTest(cmd *base.Command, args []string) {
}
// Ultimately the goal is to print the output.
root := &work.Action{Mode: "go test", Deps: prints}
root := &work.Action{Mode: "go test", Func: printExitStatus, Deps: prints}
// Force the printing of results to happen in order,
// one at a time.
......@@ -1632,3 +1635,14 @@ func builderNoTest(b *work.Builder, a *work.Action) error {
fmt.Fprintf(stdout, "? \t%s\t[no test files]\n", a.Package.ImportPath)
return nil
}
// printExitStatus is the action for printing the exit status
func printExitStatus(b *work.Builder, a *work.Action) error {
if !testJSON && len(pkgArgs) != 0 {
if base.GetExitStatus() != 0 {
fmt.Println("FAIL")
return nil
}
}
return nil
}
env GO111MODULE=off
! go test x y
stdout ^FAIL\s+x
stdout ^ok\s+y
stdout (?-m)FAIL\n$
-- x/x_test.go --
package x
import "testing"
func TestNothingJustFail(t *testing.T) {
t.Fail()
}
-- y/y_test.go --
package y
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment