defmodule <%= inspect(@test_module) %> do use ExUnit.Case import Finitomata.ExUnit import Mox <%= for {{path_def, path}, number} <- Enum.with_index(@paths) do %> describe "<%= path_def |> inspect() |> String.replace(~r/⇥ \"[\w!?]+\" /, "") %>" do setup_finitomata do # ************************************* # **** PUT THE INITIALIZATION HERE **** # ************************************* # **** context example: parent = self() [ fsm: [ implementation: <%= inspect(@module) %>, payload: %{}, options: [transition_count: <%= path |> List.flatten() |> length() %>] ], context: [parent: parent] ] end test_path "path #<%= number %>", %{finitomata: %{}, parent: _} = _ctx do <%= for [{event, state} | states] <- path do %> <%= if event == :__start__ do %> :* -> # these validations are not yet handled by `Finitomata.ExUnit` # pattern match directly in the context above as shown below to validate # # %{finitomata: %{auto_init_msgs: %{idle: :foo, started: :bar}}} = _ctx assert_state <%= inspect(state) %> <%= for {_event, state} <- states do %> assert_state <%= inspect(state) %> <% end %> <% else %> {<%= inspect(event) %>, nil} -> assert_state <%= inspect(state) %> do assert_payload do # foo.bar.baz ~> ^parent end end <%= for {_event, state} <- states do %> assert_state <%= inspect(state) %> do assert_payload do # baz ~> ^parent end end <% end %> <% end %> <% end %> end end <% end %> end