Fixed didPanic to now detect panic(nil).

Previously, the function would not detect panic(nil) calls.
In didPanic, removed the anonymous function call, instead,
added named return values. Added extra test cases for the
panic(nil) call.
pull/1145/merge v1.7.1
RmbRT 2019-07-26 14:21:04 +02:00 committed by Boyan Soubachov
parent 1e36bfe104
commit 083ff1c044
2 changed files with 29 additions and 21 deletions

View File

@ -1004,27 +1004,21 @@ func Condition(t TestingT, comp Comparison, msgAndArgs ...interface{}) bool {
type PanicTestFunc func() type PanicTestFunc func()
// didPanic returns true if the function passed to it panics. Otherwise, it returns false. // didPanic returns true if the function passed to it panics. Otherwise, it returns false.
func didPanic(f PanicTestFunc) (bool, interface{}, string) { func didPanic(f PanicTestFunc) (didPanic bool, message interface{}, stack string) {
didPanic = true
didPanic := false
var message interface{}
var stack string
func() {
defer func() {
if message = recover(); message != nil {
didPanic = true
stack = string(debug.Stack())
}
}()
// call the target function
f()
defer func() {
message = recover()
if didPanic {
stack = string(debug.Stack())
}
}() }()
return didPanic, message, stack // call the target function
f()
didPanic = false
return
} }
// Panics asserts that the code inside the specified PanicTestFunc panics. // Panics asserts that the code inside the specified PanicTestFunc panics.

View File

@ -923,10 +923,18 @@ func TestCondition(t *testing.T) {
func TestDidPanic(t *testing.T) { func TestDidPanic(t *testing.T) {
if funcDidPanic, _, _ := didPanic(func() { const panicMsg = "Panic!"
panic("Panic!")
}); !funcDidPanic { if funcDidPanic, msg, _ := didPanic(func() {
t.Error("didPanic should return true") panic(panicMsg)
}); !funcDidPanic || msg != panicMsg {
t.Error("didPanic should return true, panicMsg")
}
if funcDidPanic, msg, _ := didPanic(func() {
panic(nil)
}); !funcDidPanic || msg != nil {
t.Error("didPanic should return true, nil")
} }
if funcDidPanic, _, _ := didPanic(func() { if funcDidPanic, _, _ := didPanic(func() {
@ -963,6 +971,12 @@ func TestPanicsWithValue(t *testing.T) {
t.Error("PanicsWithValue should return true") t.Error("PanicsWithValue should return true")
} }
if !PanicsWithValue(mockT, nil, func() {
panic(nil)
}) {
t.Error("PanicsWithValue should return true")
}
if PanicsWithValue(mockT, "Panic!", func() { if PanicsWithValue(mockT, "Panic!", func() {
}) { }) {
t.Error("PanicsWithValue should return false") t.Error("PanicsWithValue should return false")