mirror of
https://github.com/golang/go.git
synced 2025-05-29 11:25:43 +00:00
testing: diagnose buggy tests that panic(nil)
Fixes #6546. LGTM=dave, bradfitz, r R=r, dave, bradfitz CC=golang-codereviews https://golang.org/cl/55780043
This commit is contained in:
parent
1351638314
commit
ae56210708
@ -3,3 +3,4 @@ liblink: pull linker i/o into separate liblink C library (CL 35790044)
|
|||||||
misc/dist: renamed misc/makerelease (CL 39920043)
|
misc/dist: renamed misc/makerelease (CL 39920043)
|
||||||
runtime: output how long goroutines are blocked (CL 50420043)
|
runtime: output how long goroutines are blocked (CL 50420043)
|
||||||
syscall: add NewCallbackCDecl to use for windows callbacks (CL 36180044)
|
syscall: add NewCallbackCDecl to use for windows callbacks (CL 36180044)
|
||||||
|
testing: diagnose buggy tests that panic(nil) (CL 55780043)
|
||||||
|
@ -376,10 +376,15 @@ func tRunner(t *T, test *InternalTest) {
|
|||||||
// returned normally or because a test failure triggered
|
// returned normally or because a test failure triggered
|
||||||
// a call to runtime.Goexit, record the duration and send
|
// a call to runtime.Goexit, record the duration and send
|
||||||
// a signal saying that the test is done.
|
// a signal saying that the test is done.
|
||||||
|
var finished bool
|
||||||
defer func() {
|
defer func() {
|
||||||
t.duration = time.Now().Sub(t.start)
|
t.duration = time.Now().Sub(t.start)
|
||||||
// If the test panicked, print any test output before dying.
|
// If the test panicked, print any test output before dying.
|
||||||
if err := recover(); err != nil {
|
err := recover()
|
||||||
|
if !finished && err == nil {
|
||||||
|
err = fmt.Errorf("test executed panic(nil)")
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
t.Fail()
|
t.Fail()
|
||||||
t.report()
|
t.report()
|
||||||
panic(err)
|
panic(err)
|
||||||
@ -389,6 +394,7 @@ func tRunner(t *T, test *InternalTest) {
|
|||||||
|
|
||||||
t.start = time.Now()
|
t.start = time.Now()
|
||||||
test.F(t)
|
test.F(t)
|
||||||
|
finished = true
|
||||||
}
|
}
|
||||||
|
|
||||||
// An internal function but exported because it is cross-package; part of the implementation
|
// An internal function but exported because it is cross-package; part of the implementation
|
||||||
|
Loading…
x
Reference in New Issue
Block a user