Current section
Files
Jump to
Current section
Files
src/testament.erl
-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 => <<?FILEPATH/utf8>>,
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 => <<?FILEPATH/utf8>>,
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 => <<?FILEPATH/utf8>>,
module => <<"testament"/utf8>>,
function => <<"test_main"/utf8>>,
line => 111});
{other_runtime, _} ->
erlang:error(#{gleam_error => panic,
message => <<"testament: invalid runtime or target"/utf8>>,
file => <<?FILEPATH/utf8>>,
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 => <<?FILEPATH/utf8>>,
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 => <<?FILEPATH/utf8>>,
module => <<"testament"/utf8>>,
function => <<"test_main"/utf8>>,
line => 111});
{other_runtime, _} ->
erlang:error(#{gleam_error => panic,
message => <<"testament: invalid runtime or target"/utf8>>,
file => <<?FILEPATH/utf8>>,
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 => <<?FILEPATH/utf8>>,
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.