1
0
mirror of https://github.com/golang/go synced 2024-11-17 13:44:43 -07:00

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/+/170948
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Luka Zitnik 2019-04-07 16:41:11 +02:00 committed by Bryan C. Mills
parent 23f3ea82b9
commit 3def99a8a8
4 changed files with 42 additions and 3 deletions

View File

@ -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

View File

@ -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.

View File

@ -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
}

View File

@ -0,0 +1,18 @@
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