-module(startest@runner). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([run_tests/2]). -spec run_test(startest@test_case:test()) -> startest@test_case:test_outcome(). run_test(Test_case) -> case erlang:element(4, Test_case) of true -> skipped; false -> case startest@test_failure:rescue(erlang:element(3, Test_case)) of {ok, nil} -> passed; {error, Err} -> {failed, Err} end end. -spec run_tests( list(startest@test_tree:test_tree()), list(startest@reporter:reporter()) ) -> nil. run_tests(Tests, Reporters) -> Tests@1 = begin _pipe = Tests, gleam@list:flat_map( _pipe, fun(Tree) -> startest@test_tree:all_tests(Tree) end ) end, Test_count = gleam@list:length(Tests@1), gleam@io:println( <<<<"Running "/utf8, (gleam@int:to_string(Test_count))/binary>>/binary, " tests"/utf8>> ), Executed_tests = begin _pipe@1 = Tests@1, gleam@list:map( _pipe@1, fun(Pair) -> Test_case = {test, erlang:element(1, Pair), erlang:element(3, (erlang:element(2, Pair))), erlang:element(4, (erlang:element(2, Pair)))}, {executed_test, Test_case, run_test(Test_case)} end ) end, _pipe@2 = Reporters, gleam@list:each(_pipe@2, fun(Reporter) -> _pipe@3 = Executed_tests, gleam@list:each( _pipe@3, fun(Executed_test) -> (erlang:element(2, Reporter))(Executed_test) end ) end), Has_any_failures = begin _pipe@4 = Executed_tests, gleam@list:any( _pipe@4, fun(Executed_test@1) -> startest@test_case:is_failed(Executed_test@1) end ) end, Exit_code = case Has_any_failures of true -> 1; false -> 0 end, erlang:halt(Exit_code).