@@ -100,6 +100,28 @@ defmodule Logger.TranslatorTest do
100
100
end
101
101
end
102
102
103
+ defmodule MyGenStatemFormatStatus 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 )
@@ -552,6 +574,34 @@ defmodule Logger.TranslatorTest do
552
574
assert_receive { :event , { :string , [ "Process " | _ ] } , _process_metadata }
553
575
end
554
576
577
+ test "translates :gen_statem crashes when format_status/2 does not return a tuple" do
578
+ { :ok , pid } = :gen_statem . start ( MyGenStatemFormatStatus , :ok , [ ] )
579
+
580
+ assert capture_log ( :debug , fn ->
581
+ catch_exit ( :gen_statem . call ( pid , :error ) )
582
+ end ) =~ ~r"""
583
+ \[ error\] :gen_statem #PID<\d +\. \d +\. \d +> terminating
584
+ \* \* \( RuntimeError\) oops
585
+ .*
586
+ Queue: .*
587
+ Postponed: \[ \]
588
+ State: :ok
589
+ Callback mode: .*, state_enter: false
590
+ """ s
591
+
592
+ assert_receive { :event , { :string , [ [ ":gen_statem " <> _ | _ ] | _ ] } , gen_statem_metadata }
593
+ assert_receive { :event , { :string , [ "Process " | _ ] } , process_metadata }
594
+
595
+ assert { % RuntimeError { message: "oops" } , [ _ | _ ] } = gen_statem_metadata [ :crash_reason ]
596
+ assert { % RuntimeError { message: "oops" } , [ _ | _ ] } = process_metadata [ :crash_reason ]
597
+
598
+ refute Map . has_key? ( gen_statem_metadata , :initial_call )
599
+ assert process_metadata [ :initial_call ] == { MyGenStatemFormatStatus , :init , 1 }
600
+
601
+ refute Map . has_key? ( gen_statem_metadata , :registered_name )
602
+ refute Map . has_key? ( process_metadata , :registered_name )
603
+ end
604
+
555
605
test "translates Task crashes" do
556
606
{ :ok , pid } = Task . start_link ( __MODULE__ , :task , [ self ( ) ] )
557
607
parent = self ( )
0 commit comments