Skip to content

Commit

Permalink
Add panic stack to output from NotPanics assertion failures
Browse files Browse the repository at this point in the history
  • Loading branch information
dcormier authored and georgelesica-wf committed Sep 4, 2019
1 parent 221dbe5 commit 85f2b59
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 11 deletions.
17 changes: 10 additions & 7 deletions assert/assertions.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"reflect"
"regexp"
"runtime"
"runtime/debug"
"strings"
"time"
"unicode"
Expand Down Expand Up @@ -901,15 +902,17 @@ func Condition(t TestingT, comp Comparison, msgAndArgs ...interface{}) bool {
type PanicTestFunc func()

// didPanic returns true if the function passed to it panics. Otherwise, it returns false.
func didPanic(f PanicTestFunc) (bool, interface{}) {
func didPanic(f PanicTestFunc) (bool, interface{}, string) {

didPanic := false
var message interface{}
var stack string
func() {

defer func() {
if message = recover(); message != nil {
didPanic = true
stack = string(debug.Stack())
}
}()

Expand All @@ -918,7 +921,7 @@ func didPanic(f PanicTestFunc) (bool, interface{}) {

}()

return didPanic, message
return didPanic, message, stack

}

Expand All @@ -930,7 +933,7 @@ func Panics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool {
h.Helper()
}

if funcDidPanic, panicValue := didPanic(f); !funcDidPanic {
if funcDidPanic, panicValue, _ := didPanic(f); !funcDidPanic {
return Fail(t, fmt.Sprintf("func %#v should panic\n\tPanic value:\t%#v", f, panicValue), msgAndArgs...)
}

Expand All @@ -946,12 +949,12 @@ func PanicsWithValue(t TestingT, expected interface{}, f PanicTestFunc, msgAndAr
h.Helper()
}

funcDidPanic, panicValue := didPanic(f)
funcDidPanic, panicValue, panickedStack := didPanic(f)
if !funcDidPanic {
return Fail(t, fmt.Sprintf("func %#v should panic\n\tPanic value:\t%#v", f, panicValue), msgAndArgs...)
}
if panicValue != expected {
return Fail(t, fmt.Sprintf("func %#v should panic with value:\t%#v\n\tPanic value:\t%#v", f, expected, panicValue), msgAndArgs...)
return Fail(t, fmt.Sprintf("func %#v should panic with value:\t%#v\n\tPanic value:\t%#v\n\tPanic stack:\t%s", f, expected, panicValue, panickedStack), msgAndArgs...)
}

return true
Expand All @@ -965,8 +968,8 @@ func NotPanics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool {
h.Helper()
}

if funcDidPanic, panicValue := didPanic(f); funcDidPanic {
return Fail(t, fmt.Sprintf("func %#v should not panic\n\tPanic value:\t%v", f, panicValue), msgAndArgs...)
if funcDidPanic, panicValue, panickedStack := didPanic(f); funcDidPanic {
return Fail(t, fmt.Sprintf("func %#v should not panic\n\tPanic value:\t%v\n\tPanic stack:\t%s", f, panicValue, panickedStack), msgAndArgs...)
}

return true
Expand Down
4 changes: 2 additions & 2 deletions assert/assertions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -730,13 +730,13 @@ func TestCondition(t *testing.T) {

func TestDidPanic(t *testing.T) {

if funcDidPanic, _ := didPanic(func() {
if funcDidPanic, _, _ := didPanic(func() {
panic("Panic!")
}); !funcDidPanic {
t.Error("didPanic should return true")
}

if funcDidPanic, _ := didPanic(func() {
if funcDidPanic, _, _ := didPanic(func() {
}); funcDidPanic {
t.Error("didPanic should return false")
}
Expand Down
4 changes: 2 additions & 2 deletions assert/forward_assertions_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -212,13 +212,13 @@ func TestConditionWrapper(t *testing.T) {

func TestDidPanicWrapper(t *testing.T) {

if funcDidPanic, _ := didPanic(func() {
if funcDidPanic, _, _ := didPanic(func() {
panic("Panic!")
}); !funcDidPanic {
t.Error("didPanic should return true")
}

if funcDidPanic, _ := didPanic(func() {
if funcDidPanic, _, _ := didPanic(func() {
}); funcDidPanic {
t.Error("didPanic should return false")
}
Expand Down

0 comments on commit 85f2b59

Please sign in to comment.