@@ -264,16 +264,16 @@ defmodule ExceptionTest do
264
264
end
265
265
266
266
test "format_exit with call with exception" do
267
+ Process . flag ( :trap_exit , true )
267
268
# Fake reason to prevent error_logger printing to stdout
268
- fsm_reason = { % ArgumentError { } , [ { :not_a_real_module , :function , 0 , [ ] } ] }
269
- reason = try do
270
- :gen_fsm . sync_send_event ( spawn ( fn ( ) ->
271
- Process . sleep ( 200 )
272
- exit ( fsm_reason )
273
- end ) , :hello )
274
- catch
275
- :exit , reason -> reason
276
- end
269
+ exit_reason = { % ArgumentError { } , [ { :not_a_real_module , :function , 0 , [ ] } ] }
270
+ exit_fun = fn ( ) -> receive do: ( _ -> exit ( exit_reason ) ) end
271
+ reason =
272
+ try do
273
+ :gen_fsm . sync_send_event ( spawn_link ( exit_fun ) , :hello )
274
+ catch
275
+ :exit , reason -> reason
276
+ end
277
277
278
278
formatted = Exception . format_exit ( reason )
279
279
assert formatted =~ ~r" exited in: :gen_fsm\. sync_send_event\( #PID<\d +\. \d +\. \d +>, :hello\) "
@@ -283,14 +283,16 @@ defmodule ExceptionTest do
283
283
end
284
284
285
285
test "format_exit with nested calls" do
286
+ Process . flag ( :trap_exit , true )
286
287
# Fake reason to prevent error_logger printing to stdout
287
- event_fun = fn ( ) ->
288
- Process . sleep ( 200 )
289
- exit ( :normal )
290
- end
291
- server_pid = spawn ( fn ( ) -> :gen_event . call ( spawn ( event_fun ) , :handler , :hello ) end )
288
+ exit_fun = fn ( ) -> receive do: ( _ -> exit ( :normal ) ) end
289
+ outer_pid =
290
+ spawn_link ( fn ( ) ->
291
+ Process . flag ( :trap_exit , true )
292
+ :gen_event . call ( spawn_link ( exit_fun ) , :handler , :hello )
293
+ end )
292
294
reason = try do
293
- :gen_server . call ( server_pid , :hi )
295
+ :gen_server . call ( outer_pid , :hi )
294
296
catch
295
297
:exit , reason -> reason
296
298
end
@@ -302,15 +304,17 @@ defmodule ExceptionTest do
302
304
end
303
305
304
306
test "format_exit with nested calls and exception" do
307
+ Process . flag ( :trap_exit , true )
305
308
# Fake reason to prevent error_logger printing to stdout
306
- event_reason = { % ArgumentError { } , [ { :not_a_real_module , :function , 0 , [ ] } ] }
307
- event_fun = fn ( ) ->
308
- Process . sleep ( 200 )
309
- exit ( event_reason )
310
- end
311
- server_pid = spawn ( fn ( ) -> :gen_event . call ( spawn ( event_fun ) , :handler , :hello ) end )
309
+ exit_reason = { % ArgumentError { } , [ { :not_a_real_module , :function , 0 , [ ] } ] }
310
+ exit_fun = fn ( ) -> receive do: ( _ -> exit ( exit_reason ) ) end
311
+ outer_pid =
312
+ spawn_link ( fn ( ) ->
313
+ Process . flag ( :trap_exit , true )
314
+ :gen_event . call ( spawn_link ( exit_fun ) , :handler , :hello )
315
+ end )
312
316
reason = try do
313
- :gen_server . call ( server_pid , :hi )
317
+ :gen_server . call ( outer_pid , :hi )
314
318
catch
315
319
:exit , reason -> reason
316
320
end
0 commit comments