diff options
| author | Russ Cox <rsc@golang.org> | 2014-01-22 16:34:02 -0500 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2014-01-22 16:34:02 -0500 |
| commit | 91fbf6f159a099a273e6880a5fe40351d61270b6 (patch) | |
| tree | 8247175bd3e051e075eb393fc213096c5e592b60 /src/pkg | |
| parent | 52125738f3ca6f30364eebf0f4d673f73a71c248 (diff) | |
| download | go-91fbf6f159a099a273e6880a5fe40351d61270b6.tar.xz | |
testing: fix SkipNow and FailNow to avoid panic(nil) check
Sorry, too many windows in which to run all.bash.
Fixes build.
TBR=r
CC=golang-codereviews
https://golang.org/cl/55790043
Diffstat (limited to 'src/pkg')
| -rw-r--r-- | src/pkg/testing/testing.go | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/pkg/testing/testing.go b/src/pkg/testing/testing.go index a0b55f4a57..826d8e0120 100644 --- a/src/pkg/testing/testing.go +++ b/src/pkg/testing/testing.go @@ -143,10 +143,11 @@ var ( // common holds the elements common between T and B and // captures common methods such as Errorf. type common struct { - mu sync.RWMutex // guards output and failed - output []byte // Output generated by test or benchmark. - failed bool // Test or benchmark has failed. - skipped bool // Test of benchmark has been skipped. + mu sync.RWMutex // guards output and failed + output []byte // Output generated by test or benchmark. + failed bool // Test or benchmark has failed. + skipped bool // Test of benchmark has been skipped. + finished bool start time.Time // Time test or benchmark started duration time.Duration @@ -275,6 +276,7 @@ func (c *common) FailNow() { // it would run on a test failure. Because we send on c.signal during // a top-of-stack deferred function now, we know that the send // only happens after any other stacked defers have completed. + c.finished = true runtime.Goexit() } @@ -338,6 +340,7 @@ func (c *common) Skipf(format string, args ...interface{}) { // those other goroutines. func (c *common) SkipNow() { c.skip() + c.finished = true runtime.Goexit() } @@ -376,13 +379,12 @@ func tRunner(t *T, test *InternalTest) { // returned normally or because a test failure triggered // a call to runtime.Goexit, record the duration and send // a signal saying that the test is done. - var finished bool defer func() { t.duration = time.Now().Sub(t.start) // If the test panicked, print any test output before dying. err := recover() - if !finished && err == nil { - err = fmt.Errorf("test executed panic(nil)") + if !t.finished && err == nil { + err = fmt.Errorf("test executed panic(nil) or runtime.Goexit") } if err != nil { t.Fail() @@ -394,7 +396,7 @@ func tRunner(t *T, test *InternalTest) { t.start = time.Now() test.F(t) - finished = true + t.finished = true } // An internal function but exported because it is cross-package; part of the implementation |
