diff options
Diffstat (limited to 'aoc2023/build/packages/adglent/src/showtime@internal@common@common_event_handler.erl')
-rw-r--r-- | aoc2023/build/packages/adglent/src/showtime@internal@common@common_event_handler.erl | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/aoc2023/build/packages/adglent/src/showtime@internal@common@common_event_handler.erl b/aoc2023/build/packages/adglent/src/showtime@internal@common@common_event_handler.erl new file mode 100644 index 0000000..b0a6d7a --- /dev/null +++ b/aoc2023/build/packages/adglent/src/showtime@internal@common@common_event_handler.erl @@ -0,0 +1,131 @@ +-module(showtime@internal@common@common_event_handler). +-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]). + +-export([handle_event/3]). +-export_type([test_state/0, handler_state/0]). + +-type test_state() :: not_started | running | {finished, integer()}. + +-type handler_state() :: {handler_state, + test_state(), + integer(), + gleam@map:map_(binary(), gleam@map:map_(binary(), showtime@internal@common@test_suite:test_run()))}. + +-spec handle_event( + showtime@internal@common@test_suite:test_event(), + fun(() -> integer()), + handler_state() +) -> handler_state(). +handle_event(Msg, System_time, State) -> + Test_state = erlang:element(2, State), + Num_done = erlang:element(3, State), + Events = erlang:element(4, State), + {Updated_test_state, Updated_num_done, Updated_events} = case Msg of + start_test_run -> + {running, Num_done, Events}; + + {start_test_suite, Module} -> + Maybe_module_events = gleam@map:get( + Events, + erlang:element(2, Module) + ), + New_events = case Maybe_module_events of + {ok, _} -> + Events; + + {error, _} -> + _pipe = Events, + gleam@map:insert( + _pipe, + erlang:element(2, Module), + gleam@map:new() + ) + end, + {Test_state, Num_done, New_events}; + + {start_test, Module@1, Test} -> + Current_time = System_time(), + Maybe_module_events@1 = gleam@map:get( + Events, + erlang:element(2, Module@1) + ), + New_events@1 = case Maybe_module_events@1 of + {ok, Module_events} -> + Maybe_test_event = gleam@map:get( + Module_events, + erlang:element(2, Test) + ), + case Maybe_test_event of + {error, _} -> + _pipe@1 = Events, + gleam@map:insert( + _pipe@1, + erlang:element(2, Module@1), + begin + _pipe@2 = Module_events, + gleam@map:insert( + _pipe@2, + erlang:element(2, Test), + {ongoing_test_run, Test, Current_time} + ) + end + ); + + {ok, _} -> + Events + end; + + {error, _} -> + Events + end, + {Test_state, Num_done, New_events@1}; + + {end_test, Module@2, Test@1, Result} -> + Current_time@1 = System_time(), + Maybe_module_events@2 = gleam@map:get( + Events, + erlang:element(2, Module@2) + ), + New_events@2 = case Maybe_module_events@2 of + {ok, Module_events@1} -> + Maybe_test_run = begin + _pipe@3 = Module_events@1, + gleam@map:get(_pipe@3, erlang:element(2, Test@1)) + end, + Updated_module_events = case Maybe_test_run of + {ok, {ongoing_test_run, Test_function, Started_at}} -> + _pipe@4 = Module_events@1, + gleam@map:insert( + _pipe@4, + erlang:element(2, Test@1), + {completed_test_run, + Test_function, + Current_time@1 - Started_at, + Result} + ); + + {error, _} -> + Module_events@1 + end, + _pipe@5 = Events, + gleam@map:insert( + _pipe@5, + erlang:element(2, Module@2), + Updated_module_events + ); + + {error, _} -> + Events + end, + {Test_state, Num_done, New_events@2}; + + {end_test_suite, _} -> + {Test_state, Num_done + 1, Events}; + + {end_test_run, Num_modules} -> + {{finished, Num_modules}, Num_done, Events}; + + _ -> + {running, Num_done, Events} + end, + {handler_state, Updated_test_state, Updated_num_done, Updated_events}. |