Current section

Files

Jump to
startest src startest@test_tree.erl
Raw

src/startest@test_tree.erl

-module(startest@test_tree).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-define(FILEPATH, "src/startest/test_tree.gleam").
-export([all_tests/1, test_tree_decoder/0]).
-export_type([test_tree/0]).
-type test_tree() :: {suite, binary(), list(test_tree())} |
{test, startest@test_case:test()}.
-file("src/startest/test_tree.gleam", 15).
-spec collect_all_tests(
test_tree(),
list(binary()),
list({binary(), startest@test_case:test()})
) -> list({binary(), startest@test_case:test()}).
collect_all_tests(Tree, Path, Acc) ->
case Tree of
{suite, Name, Suite} ->
_pipe = Suite,
gleam@list:flat_map(
_pipe,
fun(_capture) ->
collect_all_tests(_capture, [Name | Path], Acc)
end
);
{test, Test_case} ->
Test_path = begin
_pipe@1 = [erlang:element(2, Test_case) | Path],
_pipe@2 = lists:reverse(_pipe@1),
gleam@string:join(_pipe@2, <<" ❯ "/utf8>>)
end,
[{Test_path, Test_case} | Acc]
end.
-file("src/startest/test_tree.gleam", 11).
-spec all_tests(test_tree()) -> list({binary(), startest@test_case:test()}).
all_tests(Tree) ->
collect_all_tests(Tree, [], []).
-file("src/startest/test_tree.gleam", 36).
-spec test_tree_decoder() -> gleam@dynamic@decode:decoder(test_tree()).
test_tree_decoder() ->
gleam@dynamic@decode:one_of(
begin
gleam@dynamic@decode:then(
gleam@dynamic@decode:at(
[1],
{decoder, fun gleam@dynamic@decode:decode_string/1}
),
fun(Name) ->
gleam@dynamic@decode:then(
gleam@dynamic@decode:at(
[2],
gleam@dynamic@decode:list(test_tree_decoder())
),
fun(Suite) ->
gleam@dynamic@decode:success({suite, Name, Suite})
end
)
end
)
end,
[begin
_pipe = gleam@dynamic@decode:at(
[1],
startest@test_case:test_decoder()
),
gleam@dynamic@decode:map(
_pipe,
fun(Field@0) -> {test, Field@0} end
)
end]
).