@@ -100,6 +100,28 @@ defmodule Logger.TranslatorTest do
100100 end
101101 end
102102
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+
103125 defmodule MyBridge do
104126 @ behaviour :supervisor_bridge
105127
@@ -393,7 +415,7 @@ defmodule Logger.TranslatorTest do
393415 assert { % RuntimeError { message: "oops" } , [ _ | _ ] } = process_metadata [ :crash_reason ]
394416
395417 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 }
397419
398420 refute Map . has_key? ( gen_statem_metadata , :registered_name )
399421 refute Map . has_key? ( process_metadata , :registered_name )
@@ -445,7 +467,7 @@ defmodule Logger.TranslatorTest do
445467 assert capture_log ( :debug , fn ->
446468 catch_exit ( :gen_statem . call ( pid , :error ) )
447469 end ) =~ """
448- [:ok, :ok, :ok, ...]
470+ State: {:started, [ :ok, ...]}
449471 """
450472 after
451473 Application . put_env ( :logger , :translator_inspect_opts , [ ] )
@@ -462,8 +484,7 @@ defmodule Logger.TranslatorTest do
462484 .*
463485 Queue: .*
464486 Postponed: \[ \]
465- State: :started
466- Data: :ok
487+ State: {:started, :ok}
467488 Callback mode: :state_functions, state_enter: false
468489 Client #PID<\d +\. \d +\. \d +> is alive
469490 .*
@@ -488,8 +509,7 @@ defmodule Logger.TranslatorTest do
488509 .*
489510 Queue: .*
490511 Postponed: \[ \]
491- State: :started
492- Data: :ok
512+ State: {:started, :ok}
493513 Callback mode: :state_functions, state_enter: false
494514 Client :named_client is alive
495515 .*
@@ -513,8 +533,7 @@ defmodule Logger.TranslatorTest do
513533 .*
514534 Queue: .*
515535 Postponed: \[ \]
516- State: :started
517- Data: :ok
536+ State: {:started, :ok}
518537 Callback mode: :state_functions, state_enter: false
519538 Client #PID<\d +\. \d +\. \d +> is dead
520539 """ s
@@ -533,8 +552,7 @@ defmodule Logger.TranslatorTest do
533552 .*
534553 Queue: .*
535554 Postponed: \[ \]
536- State: :started
537- Data: :ok
555+ State: {:started, :ok}
538556 Callback mode: :state_functions, state_enter: false
539557 """ s
540558 end
@@ -552,6 +570,34 @@ defmodule Logger.TranslatorTest do
552570 assert_receive { :event , { :string , [ "Process " | _ ] } , _process_metadata }
553571 end
554572
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+
555601 test "translates Task crashes" do
556602 { :ok , pid } = Task . start_link ( __MODULE__ , :task , [ self ( ) ] )
557603 parent = self ( )
0 commit comments