@@ -100,6 +100,23 @@ 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 , _state , _data ) do
116
+ raise "oops"
117
+ end
118
+ end
119
+
103
120
defmodule MyBridge do
104
121
@ behaviour :supervisor_bridge
105
122
@@ -393,7 +410,7 @@ defmodule Logger.TranslatorTest do
393
410
assert { % RuntimeError { message: "oops" } , [ _ | _ ] } = process_metadata [ :crash_reason ]
394
411
395
412
refute Map . has_key? ( gen_statem_metadata , :initial_call )
396
- assert process_metadata [ :initial_call ] == { Logger.TranslatorTest. MyGenStatem, :init , 1 }
413
+ assert process_metadata [ :initial_call ] == { MyGenStatem , :init , 1 }
397
414
398
415
refute Map . has_key? ( gen_statem_metadata , :registered_name )
399
416
refute Map . has_key? ( process_metadata , :registered_name )
@@ -552,6 +569,29 @@ defmodule Logger.TranslatorTest do
552
569
assert_receive { :event , { :string , [ "Process " | _ ] } , _process_metadata }
553
570
end
554
571
572
+ test "translates :gen_statem crashes when callback_mode is :handle_event_function" do
573
+ { :ok , pid } = :gen_statem . start ( MyGenStatemHandleEvent , :ok , [ ] )
574
+
575
+ assert capture_log ( :debug , fn ->
576
+ catch_exit ( :gen_statem . call ( pid , :error ) )
577
+ end ) =~ """
578
+ [error] :gen_statem #{ inspect ( pid ) } terminating
579
+ ** (RuntimeError) oops
580
+ """
581
+
582
+ assert_receive { :event , { :string , [ [ ":gen_statem " <> _ | _ ] | _ ] } , gen_statem_metadata }
583
+ assert_receive { :event , { :string , [ "Process " | _ ] } , process_metadata }
584
+
585
+ assert { % RuntimeError { message: "oops" } , [ _ | _ ] } = gen_statem_metadata [ :crash_reason ]
586
+ assert { % RuntimeError { message: "oops" } , [ _ | _ ] } = process_metadata [ :crash_reason ]
587
+
588
+ refute Map . has_key? ( gen_statem_metadata , :initial_call )
589
+ assert process_metadata [ :initial_call ] == { MyGenStatemHandleEvent , :init , 1 }
590
+
591
+ refute Map . has_key? ( gen_statem_metadata , :registered_name )
592
+ refute Map . has_key? ( process_metadata , :registered_name )
593
+ end
594
+
555
595
test "translates Task crashes" do
556
596
{ :ok , pid } = Task . start_link ( __MODULE__ , :task , [ self ( ) ] )
557
597
parent = self ( )
0 commit comments