-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] ).