@@ -121,7 +121,7 @@ func TestOnErrorfvRetainsKnownCause(t *testing.T) {
121
121
t .Fatalf ("r not marked as caused by panik" )
122
122
}
123
123
}()
124
- panik .OnErrorfv (catchPanic (), "onerror" )
124
+ panik .OnErrorfv (catchPanic (t ), "onerror" )
125
125
}
126
126
127
127
func TestWrap (t * testing.T ) {
@@ -161,10 +161,7 @@ func TestWrapf(t *testing.T) {
161
161
}
162
162
163
163
func TestToErrorCatchesKnownError (t * testing.T ) {
164
- err := catchPanic ()
165
- if err == nil {
166
- t .Fatalf ("err was nil" )
167
- }
164
+ err := catchPanic (t )
168
165
message := err .Error ()
169
166
expectedMessage := "a: 42: oof"
170
167
if message != expectedMessage {
@@ -180,17 +177,42 @@ func TestToErrorDoesNotCatchUnknownError(t *testing.T) {
180
177
r := recover ()
181
178
expectUnknownCause (t , r )
182
179
}()
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 ))
184
196
}
185
197
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
+ }()
187
204
defer panik .ToError (& retErr )
188
205
defer panik .Wrapf ("a: %d" , 42 )
189
206
panik .Panicf ("oof" )
190
207
return retErr
191
208
}
192
209
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
+ }()
194
216
defer panik .ToError (& retErr )
195
217
defer panik .Wrapf ("a: %d" , 42 )
196
218
panic ("oof" )
@@ -212,7 +234,7 @@ func TestHasKnownCause(t *testing.T) {
212
234
if panik .Caused (nil ) {
213
235
t .Fatal ("nil was a known cause" )
214
236
}
215
- err := catchPanic ()
237
+ err := catchPanic (t )
216
238
if panik .Caused (err ) {
217
239
t .Fatal ("err is still wrapped after deescalation with ToError()" )
218
240
}
0 commit comments