-module(testament). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -define(FILEPATH, "src/testament.gleam"). -export([main/0, test_main/1]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. -file("src/testament.gleam", 59). -spec main() -> nil. main() -> case erlang:element(4, argv:load()) of [<<"clean"/utf8>>] -> _ = testament@internal@util:clean_doc_tests(), nil; [<<"clean"/utf8>>, <<"all"/utf8>>] -> _ = testament@internal@util:clean_doc_tests(), _ = simplifile_erl:delete( filepath:join(<<"test"/utf8>>, <<"testament"/utf8>>) ), nil; [<<"-h"/utf8>>] -> gleam_stdlib:println( <<"Testament 📖 Doc tests for gleam! ✨ - `clean`: delete doc test files - `clean all`: delete all doc test files (useful after code reorgs) 'test/**/*_doc_test.gleam' - `help`: prints this help message ----------------------- Usage: Write some beautiful gleam code with Doc Comments ```gleam ////Example Module ////```gleam ////: assert 1 + 1 == 2 ////``` ///adds two Ints ///```gleam ///: assert example.add(1, 2) == 3 ///: assert example.add(1, -1) == 0 /// ``` pub fn add(a: Int, b: Int) -> Int { a + b } ``` Add testament to your test's main function ```gleam import gleeunit import testament pub fn main() -> Nil { testament.test_main(gleeunit.main) } ``` Enjoy ```bash gleam test Compiling example Compiled in 0.44s Running example_test.main . 1 tests, no failures ``` "/utf8>> ); [<<"h"/utf8>>] -> gleam_stdlib:println( <<"Testament 📖 Doc tests for gleam! ✨ - `clean`: delete doc test files - `clean all`: delete all doc test files (useful after code reorgs) 'test/**/*_doc_test.gleam' - `help`: prints this help message ----------------------- Usage: Write some beautiful gleam code with Doc Comments ```gleam ////Example Module ////```gleam ////: assert 1 + 1 == 2 ////``` ///adds two Ints ///```gleam ///: assert example.add(1, 2) == 3 ///: assert example.add(1, -1) == 0 /// ``` pub fn add(a: Int, b: Int) -> Int { a + b } ``` Add testament to your test's main function ```gleam import gleeunit import testament pub fn main() -> Nil { testament.test_main(gleeunit.main) } ``` Enjoy ```bash gleam test Compiling example Compiled in 0.44s Running example_test.main . 1 tests, no failures ``` "/utf8>> ); [<<"--help"/utf8>>] -> gleam_stdlib:println( <<"Testament 📖 Doc tests for gleam! ✨ - `clean`: delete doc test files - `clean all`: delete all doc test files (useful after code reorgs) 'test/**/*_doc_test.gleam' - `help`: prints this help message ----------------------- Usage: Write some beautiful gleam code with Doc Comments ```gleam ////Example Module ////```gleam ////: assert 1 + 1 == 2 ////``` ///adds two Ints ///```gleam ///: assert example.add(1, 2) == 3 ///: assert example.add(1, -1) == 0 /// ``` pub fn add(a: Int, b: Int) -> Int { a + b } ``` Add testament to your test's main function ```gleam import gleeunit import testament pub fn main() -> Nil { testament.test_main(gleeunit.main) } ``` Enjoy ```bash gleam test Compiling example Compiled in 0.44s Running example_test.main . 1 tests, no failures ``` "/utf8>> ); [<<"help"/utf8>>] -> gleam_stdlib:println( <<"Testament 📖 Doc tests for gleam! ✨ - `clean`: delete doc test files - `clean all`: delete all doc test files (useful after code reorgs) 'test/**/*_doc_test.gleam' - `help`: prints this help message ----------------------- Usage: Write some beautiful gleam code with Doc Comments ```gleam ////Example Module ////```gleam ////: assert 1 + 1 == 2 ////``` ///adds two Ints ///```gleam ///: assert example.add(1, 2) == 3 ///: assert example.add(1, -1) == 0 /// ``` pub fn add(a: Int, b: Int) -> Int { a + b } ``` Add testament to your test's main function ```gleam import gleeunit import testament pub fn main() -> Nil { testament.test_main(gleeunit.main) } ``` Enjoy ```bash gleam test Compiling example Compiled in 0.44s Running example_test.main . 1 tests, no failures ``` "/utf8>> ); _ -> gleam_stdlib:print_error(<<"Unknown command"/utf8>>) end. -file("src/testament.gleam", 94). ?DOC( "Add testament to your test's main function and you're good to go!\n" "You can use gleeunit or any other testing framework\n" " ```gleam\n" " import gleeunit\n" " import testament\n" " \n" " pub fn main() -> Nil {\n" " testament.test_main(gleeunit.main)\n" " }\n" " ```\n" ). -spec test_main(fun(() -> nil)) -> nil. test_main(Run_tests) -> Files@1 = case simplifile:get_files(<<"src"/utf8>>) of {ok, Files} -> Files; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, file => <>, module => <<"testament"/utf8>>, function => <<"test_main"/utf8>>, line => 95, value => _assert_fail, start => 1768, 'end' => 1818, pattern_start => 1779, pattern_end => 1788}) end, case gleam@list:try_each( Files@1, fun(File) -> testament@internal@util:create_tests_for_file( File, [testament@internal@util:import_from_file_name(File)] ) end ) of {ok, _} -> nil; _assert_fail@1 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, file => <>, module => <<"testament"/utf8>>, function => <<"test_main"/utf8>>, line => 97, value => _assert_fail@1, start => 1822, 'end' => 1958, pattern_start => 1833, pattern_end => 1838}) end, case envoy_ffi:get(<<"TESTAMENT_WITH_DOCS"/utf8>>) of {ok, <<"1"/utf8>>} -> Run_tests(); {error, _} -> Args = case platform:runtime() of erlang -> [<<"erlang"/utf8>>]; bun -> lists:append( [<<"javascript"/utf8>>, <<"--runtime"/utf8>>], [<<"bun"/utf8>>] ); deno -> lists:append( [<<"javascript"/utf8>>, <<"--runtime"/utf8>>], [<<"deno"/utf8>>] ); node -> lists:append( [<<"javascript"/utf8>>, <<"--runtime"/utf8>>], [<<"node"/utf8>>] ); browser -> erlang:error(#{gleam_error => panic, message => <<"testament: invalid runtime or target"/utf8>>, file => <>, module => <<"testament"/utf8>>, function => <<"test_main"/utf8>>, line => 111}); {other_runtime, _} -> erlang:error(#{gleam_error => panic, message => <<"testament: invalid runtime or target"/utf8>>, file => <>, module => <<"testament"/utf8>>, function => <<"test_main"/utf8>>, line => 111}) end, _ = shellout:command( <<"gleam"/utf8>>, [<<"test"/utf8>>, <<"--target"/utf8>> | Args], <<"."/utf8>>, [let_be_stderr, let_be_stdout, {set_environment, [{<<"TESTAMENT_WITH_DOCS"/utf8>>, <<"1"/utf8>>}]}] ), case testament@internal@util:clean_doc_tests() of {ok, _} -> nil; _assert_fail@2 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, file => <>, module => <<"testament"/utf8>>, function => <<"test_main"/utf8>>, line => 121, value => _assert_fail@2, start => 2641, 'end' => 2682, pattern_start => 2652, pattern_end => 2657}) end, nil; {ok, _} -> Args = case platform:runtime() of erlang -> [<<"erlang"/utf8>>]; bun -> lists:append( [<<"javascript"/utf8>>, <<"--runtime"/utf8>>], [<<"bun"/utf8>>] ); deno -> lists:append( [<<"javascript"/utf8>>, <<"--runtime"/utf8>>], [<<"deno"/utf8>>] ); node -> lists:append( [<<"javascript"/utf8>>, <<"--runtime"/utf8>>], [<<"node"/utf8>>] ); browser -> erlang:error(#{gleam_error => panic, message => <<"testament: invalid runtime or target"/utf8>>, file => <>, module => <<"testament"/utf8>>, function => <<"test_main"/utf8>>, line => 111}); {other_runtime, _} -> erlang:error(#{gleam_error => panic, message => <<"testament: invalid runtime or target"/utf8>>, file => <>, module => <<"testament"/utf8>>, function => <<"test_main"/utf8>>, line => 111}) end, _ = shellout:command( <<"gleam"/utf8>>, [<<"test"/utf8>>, <<"--target"/utf8>> | Args], <<"."/utf8>>, [let_be_stderr, let_be_stdout, {set_environment, [{<<"TESTAMENT_WITH_DOCS"/utf8>>, <<"1"/utf8>>}]}] ), case testament@internal@util:clean_doc_tests() of {ok, _} -> nil; _assert_fail@2 -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, file => <>, module => <<"testament"/utf8>>, function => <<"test_main"/utf8>>, line => 121, value => _assert_fail@2, start => 2641, 'end' => 2682, pattern_start => 2652, pattern_end => 2657}) end, nil end.