-module(showtime@erlang@event_handler). -compile(no_auto_import). -export([start/0]). -spec start() -> fun((showtime@common@test_suite:test_event()) -> nil). start() -> _assert_subject = gleam@otp@actor:start( {not_started, 0, gleam@map:new()}, fun(Msg, State) -> {Test_state, Num_done, Events} = State, Updated_state = showtime@common@common_event_handler:handle_event( Msg, {handler_state, Test_state, Num_done, Events} ), case Updated_state of {handler_state, {finished, Num_modules}, Num_done@1, Events@1} when Num_done@1 =:= Num_modules -> gleam@io:println( showtime@reports@formatter:create_test_report(Events@1) ), {stop, normal}; {handler_state, Test_state@1, Num_done@2, Events@2} -> {continue, {Test_state@1, Num_done@2, Events@2}} end end ), {ok, Subject} = case _assert_subject of {ok, _} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => assert, message => <<"Assertion pattern match failed"/utf8>>, value => _assert_fail, module => <<"showtime/erlang/event_handler"/utf8>>, function => <<"start"/utf8>>, line => 16}) end, Monitor = gleam@erlang@process:monitor_process( begin _pipe = Subject, gleam@erlang@process:subject_owner(_pipe) end ), Exit_subject = begin _pipe@1 = gleam_erlang_ffi:new_selector(), gleam@erlang@process:selecting_process_down( _pipe@1, Monitor, fun(_) -> nil end ) end, fun(Test_event) -> case Test_event of {end_test_run, _} -> gleam@erlang@process:send(Subject, Test_event), gleam_erlang_ffi:select(Exit_subject); _ -> gleam@erlang@process:send(Subject, Test_event) end end.