Current section

Files

Jump to
startest src startest@reporter.erl
Raw

src/startest@reporter.erl

-module(startest@reporter).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-define(FILEPATH, "src/startest/reporter.gleam").
-export([report_summary/8]).
-export_type([duration_components/0]).
-type duration_components() :: {duration_components,
integer(),
integer(),
integer(),
integer()}.
-file("src/startest/reporter.gleam", 150).
-spec decompose_duration(gleam@time@duration:duration()) -> duration_components().
decompose_duration(Duration) ->
{Total_seconds, Nanoseconds} = gleam@time@duration:to_seconds_and_nanoseconds(
Duration
),
Minutes = Total_seconds div 60,
Seconds = Total_seconds rem 60,
Milliseconds = Nanoseconds div 1000000,
Remaining_nanoseconds = Nanoseconds rem 1000000,
Microseconds = Remaining_nanoseconds div 1000,
{duration_components, Minutes, Seconds, Milliseconds, Microseconds}.
-file("src/startest/reporter.gleam", 128).
-spec duration_to_string(gleam@time@duration:duration()) -> binary().
duration_to_string(Duration) ->
{duration_components, Minutes, Seconds, Milliseconds, Microseconds} = decompose_duration(
Duration
),
case true of
_ when Minutes > 0 ->
<<(erlang:integer_to_binary(Minutes))/binary, "m"/utf8>>;
_ when Seconds > 0 ->
<<(erlang:integer_to_binary(Seconds))/binary, "s"/utf8>>;
_ when Milliseconds > 0 ->
<<(erlang:integer_to_binary(Milliseconds))/binary, "ms"/utf8>>;
_ when Microseconds > 0 ->
<<(erlang:integer_to_binary(Microseconds))/binary, "µs"/utf8>>;
_ ->
<<"0µs"/utf8>>
end.
-file("src/startest/reporter.gleam", 16).
-spec report_summary(
startest@context:context(),
list(startest@locator:test_file()),
list(startest@test_case:executed_test()),
list(startest@test_case:test()),
list({startest@test_case:test(), startest@test_failure:test_failure()}),
gleam@time@duration:duration(),
gleam@time@duration:duration(),
gleam@time@duration:duration()
) -> nil.
report_summary(
Ctx,
Test_files,
Tests,
Skipped_tests,
Failed_tests,
Discovery_duration,
Execution_duration,
Reporting_duration
) ->
Total_test_count = erlang:length(Tests),
Skipped_test_count = erlang:length(Skipped_tests),
Failed_test_count = erlang:length(Failed_tests),
Passed_test_count = (Total_test_count - Skipped_test_count) - Failed_test_count,
Has_any_failures = Failed_test_count > 0,
case Has_any_failures of
true ->
startest@logger:log(erlang:element(4, Ctx), <<""/utf8>>),
startest@logger:log(
erlang:element(4, Ctx),
gleam_community@ansi:black(
gleam_community@ansi:bg_bright_red(
<<<<" Failed Tests: "/utf8,
(erlang:integer_to_binary(Failed_test_count))/binary>>/binary,
" "/utf8>>
)
)
),
startest@logger:log(erlang:element(4, Ctx), <<""/utf8>>),
_pipe = Failed_tests,
gleam@list:each(
_pipe,
fun(Failed_test) ->
{Test_case, Failure} = Failed_test,
startest@logger:log(
erlang:element(4, Ctx),
<<<<<<<<(gleam_community@ansi:black(
gleam_community@ansi:bg_bright_red(
<<" FAIL "/utf8>>
)
))/binary,
" "/utf8>>/binary,
(erlang:element(2, Test_case))/binary>>/binary,
"\n"/utf8>>/binary,
(startest@test_failure:to_string(Failure))/binary>>
)
end
);
false ->
nil
end,
Total_duration = begin
_pipe@1 = erlang:element(5, Ctx),
gleam@time@timestamp:difference(
_pipe@1,
bigben@clock:now(erlang:element(3, Ctx))
)
end,
Passed_tests = case Passed_test_count of
0 ->
none;
_ ->
{some,
gleam_community@ansi:bright_green(
<<(erlang:integer_to_binary(Passed_test_count))/binary,
" passed"/utf8>>
)}
end,
Skipped_tests@1 = case Skipped_test_count of
0 ->
none;
_ ->
{some,
gleam_community@ansi:yellow(
<<(erlang:integer_to_binary(Skipped_test_count))/binary,
" skipped"/utf8>>
)}
end,
Failed_tests@1 = case Failed_test_count of
0 ->
none;
_ ->
{some,
gleam_community@ansi:bright_red(
<<(erlang:integer_to_binary(Failed_test_count))/binary,
" failed"/utf8>>
)}
end,
Total_tests = gleam_community@ansi:gray(
<<<<"("/utf8, (erlang:integer_to_binary(Total_test_count))/binary>>/binary,
")"/utf8>>
),
Tests_by_category = begin
_pipe@2 = [Passed_tests, Skipped_tests@1, Failed_tests@1],
_pipe@3 = gleam@list:filter_map(
_pipe@2,
fun(_capture) -> gleam@option:to_result(_capture, nil) end
),
gleam@string:join(_pipe@3, <<" | "/utf8>>)
end,
Total_collect_duration = begin
_pipe@4 = Test_files,
gleam@list:fold(
_pipe@4,
gleam@time@duration:nanoseconds(0),
fun(Acc, Test_file) ->
gleam@time@duration:add(Acc, erlang:element(5, Test_file))
end
)
end,
Label = fun(Text) ->
gleam_community@ansi:dim(gleam_community@ansi:white(Text))
end,
startest@logger:log(
erlang:element(4, Ctx),
<<(Label(<<"Test Files: "/utf8>>))/binary,
(erlang:integer_to_binary(erlang:length(Test_files)))/binary>>
),
startest@logger:log(
erlang:element(4, Ctx),
<<<<<<(Label(<<" Tests: "/utf8>>))/binary,
Tests_by_category/binary>>/binary,
" "/utf8>>/binary,
Total_tests/binary>>
),
startest@logger:log(
erlang:element(4, Ctx),
<<(Label(<<"Started at: "/utf8>>))/binary,
(begin
_pipe@5 = erlang:element(5, Ctx),
_pipe@6 = gleam@time@timestamp:to_rfc3339(
_pipe@5,
gleam@time@calendar:local_offset()
),
gleam@string:slice(
_pipe@6,
string:length(<<"YYYY-MM-DDT"/utf8>>),
string:length(<<"HH:MM:SS"/utf8>>)
)
end)/binary>>
),
startest@logger:log(
erlang:element(4, Ctx),
<<<<<<(Label(<<" Duration: "/utf8>>))/binary,
(duration_to_string(Total_duration))/binary>>/binary,
" "/utf8>>/binary,
(Label(
<<<<<<<<<<<<<<<<"(discover "/utf8,
(duration_to_string(
Discovery_duration
))/binary>>/binary,
", collect "/utf8>>/binary,
(duration_to_string(
Total_collect_duration
))/binary>>/binary,
", tests "/utf8>>/binary,
(duration_to_string(Execution_duration))/binary>>/binary,
", reporters "/utf8>>/binary,
(duration_to_string(Reporting_duration))/binary>>/binary,
")"/utf8>>
))/binary>>
).