Current section
Files
Jump to
Current section
Files
src/startest@test_tree.erl
-module(startest@test_tree).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([all_tests/1, decode_test_tree/1]).
-export_type([test_tree/0]).
-type test_tree() :: {suite, binary(), list(test_tree())} |
{test, startest@test_case:test()}.
-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.
-spec all_tests(test_tree()) -> list({binary(), startest@test_case:test()}).
all_tests(Tree) ->
collect_all_tests(Tree, [], []).
-spec decode_test_tree(gleam@dynamic:dynamic_()) -> {ok, test_tree()} |
{error, list(gleam@dynamic:decode_error())}.
decode_test_tree(Value) ->
_pipe = Value,
(gleam@dynamic:any(
[gleam@dynamic:decode2(
fun(Field@0, Field@1) -> {suite, Field@0, Field@1} end,
gleam@dynamic:element(1, fun gleam@dynamic:string/1),
gleam@dynamic:element(
2,
gleam@dynamic:list(fun decode_test_tree/1)
)
),
gleam@dynamic:decode1(
fun(Field@0) -> {test, Field@0} end,
gleam@dynamic:element(1, fun startest@test_case:decode_test/1)
)]
))(_pipe).