diff --git a/assert/assertions.go b/assert/assertions.go index 0b7570f21..ccbd525d8 100644 --- a/assert/assertions.go +++ b/assert/assertions.go @@ -45,6 +45,10 @@ type BoolAssertionFunc func(TestingT, bool, ...interface{}) bool // for table driven tests. type ErrorAssertionFunc func(TestingT, error, ...interface{}) bool +// PanicAssertionFunc is a common function prototype when validating a panic value. Can be useful +// for table driven tests. +type PanicAssertionFunc = func(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool + // Comparison is a custom function that returns true on success and false on failure type Comparison func() (success bool) diff --git a/assert/assertions_test.go b/assert/assertions_test.go index 2a6e47234..0ae36cd92 100644 --- a/assert/assertions_test.go +++ b/assert/assertions_test.go @@ -2789,6 +2789,42 @@ func TestErrorAssertionFunc(t *testing.T) { } } +func ExamplePanicAssertionFunc() { + t := &testing.T{} // provided by test + + tests := []struct { + name string + panicFn PanicTestFunc + assertion PanicAssertionFunc + }{ + {"with panic", func() { panic(nil) }, Panics}, + {"without panic", func() {}, NotPanics}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tt.assertion(t, tt.panicFn) + }) + } +} + +func TestPanicAssertionFunc(t *testing.T) { + tests := []struct { + name string + panicFn PanicTestFunc + assertion PanicAssertionFunc + }{ + {"not panic", func() {}, NotPanics}, + {"panic", func() { panic(nil) }, Panics}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + tt.assertion(t, tt.panicFn) + }) + } +} + func TestEventuallyFalse(t *testing.T) { mockT := new(testing.T)