From 083ff1c0449867d0d8d456483ee5fab8e0c0e1e6 Mon Sep 17 00:00:00 2001 From: RmbRT Date: Fri, 26 Jul 2019 14:21:04 +0200 Subject: [PATCH] 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. --- assert/assertions.go | 28 +++++++++++----------------- assert/assertions_test.go | 22 ++++++++++++++++++---- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/assert/assertions.go b/assert/assertions.go index 230118b3b..0357b2231 100644 --- a/assert/assertions.go +++ b/assert/assertions.go @@ -1004,27 +1004,21 @@ 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{}, string) { - - 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() +func didPanic(f PanicTestFunc) (didPanic bool, message interface{}, stack string) { + didPanic = true + 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. diff --git a/assert/assertions_test.go b/assert/assertions_test.go index 0b5b2c187..0f5de92ff 100644 --- a/assert/assertions_test.go +++ b/assert/assertions_test.go @@ -923,10 +923,18 @@ func TestCondition(t *testing.T) { func TestDidPanic(t *testing.T) { - if funcDidPanic, _, _ := didPanic(func() { - panic("Panic!") - }); !funcDidPanic { - t.Error("didPanic should return true") + const panicMsg = "Panic!" + + if funcDidPanic, msg, _ := didPanic(func() { + 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() { @@ -963,6 +971,12 @@ func TestPanicsWithValue(t *testing.T) { t.Error("PanicsWithValue should return true") } + if !PanicsWithValue(mockT, nil, func() { + panic(nil) + }) { + t.Error("PanicsWithValue should return true") + } + if PanicsWithValue(mockT, "Panic!", func() { }) { t.Error("PanicsWithValue should return false")