Skip to content

Commit dca8556

Browse files
committed
test that deescalated error won't be recognized as panik-error when passed to panic()
1 parent a4ef4cf commit dca8556

File tree

1 file changed

+31
-9
lines changed

1 file changed

+31
-9
lines changed

panik_test.go

+31-9
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ func TestOnErrorfvRetainsKnownCause(t *testing.T) {
121121
t.Fatalf("r not marked as caused by panik")
122122
}
123123
}()
124-
panik.OnErrorfv(catchPanic(), "onerror")
124+
panik.OnErrorfv(catchPanic(t), "onerror")
125125
}
126126

127127
func TestWrap(t *testing.T) {
@@ -161,10 +161,7 @@ func TestWrapf(t *testing.T) {
161161
}
162162

163163
func TestToErrorCatchesKnownError(t *testing.T) {
164-
err := catchPanic()
165-
if err == nil {
166-
t.Fatalf("err was nil")
167-
}
164+
err := catchPanic(t)
168165
message := err.Error()
169166
expectedMessage := "a: 42: oof"
170167
if message != expectedMessage {
@@ -180,17 +177,42 @@ func TestToErrorDoesNotCatchUnknownError(t *testing.T) {
180177
r := recover()
181178
expectUnknownCause(t, r)
182179
}()
183-
dontCatchPanic()
180+
dontCatchPanic(t)
181+
}
182+
183+
func TestDeescalatedErrorIsNotCaughtTwice(t *testing.T) {
184+
var retErr error
185+
defer func() {
186+
r := recover()
187+
if retErr != nil {
188+
t.Fatalf("err was caught a second time")
189+
}
190+
if r == nil {
191+
t.Fatalf("err passed us by despite not being caught a second time")
192+
}
193+
}()
194+
defer panik.ToError(&retErr)
195+
panic(catchPanic(t))
184196
}
185197

186-
func catchPanic() (retErr error) {
198+
func catchPanic(t *testing.T) (retErr error) {
199+
defer func() {
200+
if retErr == nil {
201+
t.Fatalf("did not catch the error")
202+
}
203+
}()
187204
defer panik.ToError(&retErr)
188205
defer panik.Wrapf("a: %d", 42)
189206
panik.Panicf("oof")
190207
return retErr
191208
}
192209

193-
func dontCatchPanic() (retErr error) {
210+
func dontCatchPanic(t *testing.T) (retErr error) {
211+
defer func() {
212+
if retErr != nil {
213+
t.Fatalf("caught the error")
214+
}
215+
}()
194216
defer panik.ToError(&retErr)
195217
defer panik.Wrapf("a: %d", 42)
196218
panic("oof")
@@ -212,7 +234,7 @@ func TestHasKnownCause(t *testing.T) {
212234
if panik.Caused(nil) {
213235
t.Fatal("nil was a known cause")
214236
}
215-
err := catchPanic()
237+
err := catchPanic(t)
216238
if panik.Caused(err) {
217239
t.Fatal("err is still wrapped after deescalation with ToError()")
218240
}

0 commit comments

Comments
 (0)