@@ -100,6 +100,28 @@ defmodule Logger.TranslatorTest do
100
100
end
101
101
end
102
102
103
+ defmodule MyGenStatemHandleEvent do
104
+ @ behaviour :gen_statem
105
+
106
+ @ impl true
107
+ def callback_mode , do: :handle_event_function
108
+
109
+ @ impl true
110
+ def init ( state ) do
111
+ { :ok , :no_state , state }
112
+ end
113
+
114
+ @ impl true
115
+ def handle_event ( { :call , _ } , :error , :no_state , _data ) do
116
+ raise "oops"
117
+ end
118
+
119
+ @ impl :gen_statem
120
+ def format_status ( _opts , [ _pdict , _ , state ] ) do
121
+ state
122
+ end
123
+ end
124
+
103
125
defmodule MyBridge do
104
126
@ behaviour :supervisor_bridge
105
127
@@ -393,7 +415,7 @@ defmodule Logger.TranslatorTest do
393
415
assert { % RuntimeError { message: "oops" } , [ _ | _ ] } = process_metadata [ :crash_reason ]
394
416
395
417
refute Map . has_key? ( gen_statem_metadata , :initial_call )
396
- assert process_metadata [ :initial_call ] == { Logger.TranslatorTest. MyGenStatem, :init , 1 }
418
+ assert process_metadata [ :initial_call ] == { MyGenStatem , :init , 1 }
397
419
398
420
refute Map . has_key? ( gen_statem_metadata , :registered_name )
399
421
refute Map . has_key? ( process_metadata , :registered_name )
@@ -445,7 +467,7 @@ defmodule Logger.TranslatorTest do
445
467
assert capture_log ( :debug , fn ->
446
468
catch_exit ( :gen_statem . call ( pid , :error ) )
447
469
end ) =~ """
448
- [:ok, :ok, :ok, ...]
470
+ State: {:started, [ :ok, ...]}
449
471
"""
450
472
after
451
473
Application . put_env ( :logger , :translator_inspect_opts , [ ] )
@@ -462,8 +484,7 @@ defmodule Logger.TranslatorTest do
462
484
.*
463
485
Queue: .*
464
486
Postponed: \[ \]
465
- State: :started
466
- Data: :ok
487
+ State: {:started, :ok}
467
488
Callback mode: :state_functions, state_enter: false
468
489
Client #PID<\d +\. \d +\. \d +> is alive
469
490
.*
@@ -488,8 +509,7 @@ defmodule Logger.TranslatorTest do
488
509
.*
489
510
Queue: .*
490
511
Postponed: \[ \]
491
- State: :started
492
- Data: :ok
512
+ State: {:started, :ok}
493
513
Callback mode: :state_functions, state_enter: false
494
514
Client :named_client is alive
495
515
.*
@@ -513,8 +533,7 @@ defmodule Logger.TranslatorTest do
513
533
.*
514
534
Queue: .*
515
535
Postponed: \[ \]
516
- State: :started
517
- Data: :ok
536
+ State: {:started, :ok}
518
537
Callback mode: :state_functions, state_enter: false
519
538
Client #PID<\d +\. \d +\. \d +> is dead
520
539
""" s
@@ -533,8 +552,7 @@ defmodule Logger.TranslatorTest do
533
552
.*
534
553
Queue: .*
535
554
Postponed: \[ \]
536
- State: :started
537
- Data: :ok
555
+ State: {:started, :ok}
538
556
Callback mode: :state_functions, state_enter: false
539
557
""" s
540
558
end
@@ -552,6 +570,34 @@ defmodule Logger.TranslatorTest do
552
570
assert_receive { :event , { :string , [ "Process " | _ ] } , _process_metadata }
553
571
end
554
572
573
+ test "translates :gen_statem crashes when callback_mode is :handle_event_function" do
574
+ { :ok , pid } = :gen_statem . start ( MyGenStatemHandleEvent , :ok , [ ] )
575
+
576
+ assert capture_log ( :debug , fn ->
577
+ catch_exit ( :gen_statem . call ( pid , :error ) )
578
+ end ) =~ ~r"""
579
+ \[ error\] :gen_statem #PID<\d +\. \d +\. \d +> terminating
580
+ \* \* \( RuntimeError\) oops
581
+ .*
582
+ Queue: .*
583
+ Postponed: \[ \]
584
+ State: :ok
585
+ Callback mode: .*, state_enter: false
586
+ """ s
587
+
588
+ assert_receive { :event , { :string , [ [ ":gen_statem " <> _ | _ ] | _ ] } , gen_statem_metadata }
589
+ assert_receive { :event , { :string , [ "Process " | _ ] } , process_metadata }
590
+
591
+ assert { % RuntimeError { message: "oops" } , [ _ | _ ] } = gen_statem_metadata [ :crash_reason ]
592
+ assert { % RuntimeError { message: "oops" } , [ _ | _ ] } = process_metadata [ :crash_reason ]
593
+
594
+ refute Map . has_key? ( gen_statem_metadata , :initial_call )
595
+ assert process_metadata [ :initial_call ] == { MyGenStatemHandleEvent , :init , 1 }
596
+
597
+ refute Map . has_key? ( gen_statem_metadata , :registered_name )
598
+ refute Map . has_key? ( process_metadata , :registered_name )
599
+ end
600
+
555
601
test "translates Task crashes" do
556
602
{ :ok , pid } = Task . start_link ( __MODULE__ , :task , [ self ( ) ] )
557
603
parent = self ( )
0 commit comments