mirror of
https://github.com/golang/go
synced 2024-11-12 09:50:21 -07:00
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
This commit is contained in:
parent
52125738f3
commit
91fbf6f159
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user