Skip to content

Commit

Permalink
cmd/go: print finally FAIL if a test has failed in package list mode
Browse files Browse the repository at this point in the history
Fixes golang#30507

Change-Id: Ic598e4d5f71c624fcde051982bf85533e2f18e8d
  • Loading branch information
luka-zitnik committed May 12, 2019
1 parent 1cff98d commit 1f08509
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 3 deletions.
5 changes: 4 additions & 1 deletion src/cmd/go/alldocs.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions src/cmd/go/internal/base/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
18 changes: 16 additions & 2 deletions src/cmd/go/internal/test/test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -726,7 +729,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.
Expand Down Expand Up @@ -1623,3 +1626,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 changes: 18 additions & 0 deletions src/cmd/go/testdata/script/test_status.txt
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 1f08509

Please sign in to comment.