mirror of
https://github.com/golang/go
synced 2024-11-17 11:24:51 -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:
parent
23f3ea82b9
commit
3def99a8a8
@ -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
|
||||
}
|
||||
|
18
src/cmd/go/testdata/script/test_status.txt
vendored
Normal file
18
src/cmd/go/testdata/script/test_status.txt
vendored
Normal 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
|
Loading…
Reference in New Issue
Block a user