Initial commit

This commit is contained in:
Hugo Mårdbrink 2025-11-30 15:44:22 +01:00
commit a6272848f9
379 changed files with 74829 additions and 0 deletions

View file

@ -0,0 +1,343 @@
-module(gleeunit@internal@reporting).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gleeunit/internal/reporting.gleam").
-export([new_state/0, test_skipped/3, test_passed/1, finished/1, eunit_missing/0, test_failed/4]).
-export_type([state/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-type state() :: {state, integer(), integer(), integer()}.
-file("src/gleeunit/internal/reporting.gleam", 15).
?DOC(false).
-spec new_state() -> state().
new_state() ->
{state, 0, 0, 0}.
-file("src/gleeunit/internal/reporting.gleam", 207).
?DOC(false).
-spec bold(binary()) -> binary().
bold(Text) ->
<<<<"\x{001b}[1m"/utf8, Text/binary>>/binary, "\x{001b}[22m"/utf8>>.
-file("src/gleeunit/internal/reporting.gleam", 211).
?DOC(false).
-spec cyan(binary()) -> binary().
cyan(Text) ->
<<<<"\x{001b}[36m"/utf8, Text/binary>>/binary, "\x{001b}[39m"/utf8>>.
-file("src/gleeunit/internal/reporting.gleam", 191).
?DOC(false).
-spec code_snippet(gleam@option:option(bitstring()), integer(), integer()) -> binary().
code_snippet(Src, Start, End) ->
_pipe = begin
gleam@result:'try'(
gleam@option:to_result(Src, nil),
fun(Src@1) ->
gleam@result:'try'(
gleam_stdlib:bit_array_slice(Src@1, Start, End - Start),
fun(Snippet) ->
gleam@result:'try'(
gleam@bit_array:to_string(Snippet),
fun(Snippet@1) ->
Snippet@2 = <<<<<<(cyan(<<" code"/utf8>>))/binary,
": "/utf8>>/binary,
Snippet@1/binary>>/binary,
"\n"/utf8>>,
{ok, Snippet@2}
end
)
end
)
end
)
end,
gleam@result:unwrap(_pipe, <<""/utf8>>).
-file("src/gleeunit/internal/reporting.gleam", 215).
?DOC(false).
-spec yellow(binary()) -> binary().
yellow(Text) ->
<<<<"\x{001b}[33m"/utf8, Text/binary>>/binary, "\x{001b}[39m"/utf8>>.
-file("src/gleeunit/internal/reporting.gleam", 202).
?DOC(false).
-spec test_skipped(state(), binary(), binary()) -> state().
test_skipped(State, Module, Function) ->
gleam_stdlib:print(
<<<<<<<<"\n"/utf8, Module/binary>>/binary, "."/utf8>>/binary,
Function/binary>>/binary,
(yellow(<<" skipped"/utf8>>))/binary>>
),
{state,
erlang:element(2, State),
erlang:element(3, State),
erlang:element(4, State) + 1}.
-file("src/gleeunit/internal/reporting.gleam", 219).
?DOC(false).
-spec green(binary()) -> binary().
green(Text) ->
<<<<"\x{001b}[32m"/utf8, Text/binary>>/binary, "\x{001b}[39m"/utf8>>.
-file("src/gleeunit/internal/reporting.gleam", 66).
?DOC(false).
-spec test_passed(state()) -> state().
test_passed(State) ->
gleam_stdlib:print(green(<<"."/utf8>>)),
{state,
erlang:element(2, State) + 1,
erlang:element(3, State),
erlang:element(4, State)}.
-file("src/gleeunit/internal/reporting.gleam", 223).
?DOC(false).
-spec red(binary()) -> binary().
red(Text) ->
<<<<"\x{001b}[31m"/utf8, Text/binary>>/binary, "\x{001b}[39m"/utf8>>.
-file("src/gleeunit/internal/reporting.gleam", 19).
?DOC(false).
-spec finished(state()) -> integer().
finished(State) ->
case State of
{state, 0, 0, 0} ->
gleam_stdlib:println(<<"\nNo tests found!"/utf8>>),
1;
{state, _, 0, 0} ->
Message = <<<<"\n"/utf8,
(erlang:integer_to_binary(erlang:element(2, State)))/binary>>/binary,
" passed, no failures"/utf8>>,
gleam_stdlib:println(green(Message)),
0;
{state, _, _, 0} ->
Message@1 = <<<<<<<<"\n"/utf8,
(erlang:integer_to_binary(erlang:element(2, State)))/binary>>/binary,
" passed, "/utf8>>/binary,
(erlang:integer_to_binary(erlang:element(3, State)))/binary>>/binary,
" failures"/utf8>>,
gleam_stdlib:println(red(Message@1)),
1;
{state, _, 0, _} ->
Message@2 = <<<<<<<<"\n"/utf8,
(erlang:integer_to_binary(erlang:element(2, State)))/binary>>/binary,
" passed, 0 failures, "/utf8>>/binary,
(erlang:integer_to_binary(erlang:element(4, State)))/binary>>/binary,
" skipped"/utf8>>,
gleam_stdlib:println(yellow(Message@2)),
1;
{state, _, _, _} ->
Message@3 = <<<<<<<<<<<<"\n"/utf8,
(erlang:integer_to_binary(
erlang:element(2, State)
))/binary>>/binary,
" passed, "/utf8>>/binary,
(erlang:integer_to_binary(erlang:element(3, State)))/binary>>/binary,
" failures, "/utf8>>/binary,
(erlang:integer_to_binary(erlang:element(4, State)))/binary>>/binary,
" skipped"/utf8>>,
gleam_stdlib:println(red(Message@3)),
1
end.
-file("src/gleeunit/internal/reporting.gleam", 89).
?DOC(false).
-spec eunit_missing() -> {ok, any()} | {error, nil}.
eunit_missing() ->
Message = <<(bold(red(<<"Error"/utf8>>)))/binary,
": EUnit libraries not found.
Your Erlang installation seems to be incomplete. If you installed Erlang using
a package manager ensure that you have installed the full Erlang
distribution instead of a stripped-down version.
"/utf8>>,
gleam_stdlib:print_error(Message),
{error, nil}.
-file("src/gleeunit/internal/reporting.gleam", 227).
?DOC(false).
-spec grey(binary()) -> binary().
grey(Text) ->
<<<<"\x{001b}[90m"/utf8, Text/binary>>/binary, "\x{001b}[39m"/utf8>>.
-file("src/gleeunit/internal/reporting.gleam", 100).
?DOC(false).
-spec format_unknown(binary(), binary(), gleam@dynamic:dynamic_()) -> binary().
format_unknown(Module, Function, Error) ->
erlang:list_to_binary(
[<<(grey(<<<<Module/binary, "."/utf8>>/binary, Function/binary>>))/binary,
"\n"/utf8>>,
<<"An unexpected error occurred:\n"/utf8>>,
<<"\n"/utf8>>,
<<<<" "/utf8, (gleam@string:inspect(Error))/binary>>/binary,
"\n"/utf8>>]
).
-file("src/gleeunit/internal/reporting.gleam", 183).
?DOC(false).
-spec inspect_value(gleeunit@internal@gleam_panic:asserted_expression()) -> binary().
inspect_value(Value) ->
case erlang:element(4, Value) of
unevaluated ->
grey(<<"unevaluated"/utf8>>);
{literal, _} ->
grey(<<"literal"/utf8>>);
{expression, Value@1} ->
gleam@string:inspect(Value@1)
end.
-file("src/gleeunit/internal/reporting.gleam", 179).
?DOC(false).
-spec assert_value(
binary(),
gleeunit@internal@gleam_panic:asserted_expression()
) -> binary().
assert_value(Name, Value) ->
<<<<<<(cyan(Name))/binary, ": "/utf8>>/binary,
(inspect_value(Value))/binary>>/binary,
"\n"/utf8>>.
-file("src/gleeunit/internal/reporting.gleam", 160).
?DOC(false).
-spec assert_info(gleeunit@internal@gleam_panic:assert_kind()) -> binary().
assert_info(Kind) ->
case Kind of
{binary_operator, _, Left, Right} ->
erlang:list_to_binary(
[assert_value(<<" left"/utf8>>, Left),
assert_value(<<"right"/utf8>>, Right)]
);
{function_call, Arguments} ->
_pipe = Arguments,
_pipe@1 = gleam@list:index_map(
_pipe,
fun(E, I) ->
Number = gleam@string:pad_start(
erlang:integer_to_binary(I),
5,
<<" "/utf8>>
),
assert_value(Number, E)
end
),
erlang:list_to_binary(_pipe@1);
{other_expression, _} ->
<<""/utf8>>
end.
-file("src/gleeunit/internal/reporting.gleam", 113).
?DOC(false).
-spec format_gleam_error(
gleeunit@internal@gleam_panic:gleam_panic(),
binary(),
binary(),
gleam@option:option(bitstring())
) -> binary().
format_gleam_error(Error, Module, Function, Src) ->
Location = grey(
<<<<(erlang:element(3, Error))/binary, ":"/utf8>>/binary,
(erlang:integer_to_binary(erlang:element(6, Error)))/binary>>
),
case erlang:element(7, Error) of
panic ->
erlang:list_to_binary(
[<<<<<<(bold(red(<<"panic"/utf8>>)))/binary, " "/utf8>>/binary,
Location/binary>>/binary,
"\n"/utf8>>,
<<<<<<<<<<(cyan(<<" test"/utf8>>))/binary, ": "/utf8>>/binary,
Module/binary>>/binary,
"."/utf8>>/binary,
Function/binary>>/binary,
"\n"/utf8>>,
<<<<<<(cyan(<<" info"/utf8>>))/binary, ": "/utf8>>/binary,
(erlang:element(2, Error))/binary>>/binary,
"\n"/utf8>>]
);
todo ->
erlang:list_to_binary(
[<<<<<<(bold(yellow(<<"todo"/utf8>>)))/binary, " "/utf8>>/binary,
Location/binary>>/binary,
"\n"/utf8>>,
<<<<<<<<<<(cyan(<<" test"/utf8>>))/binary, ": "/utf8>>/binary,
Module/binary>>/binary,
"."/utf8>>/binary,
Function/binary>>/binary,
"\n"/utf8>>,
<<<<<<(cyan(<<" info"/utf8>>))/binary, ": "/utf8>>/binary,
(erlang:element(2, Error))/binary>>/binary,
"\n"/utf8>>]
);
{assert, Start, End, _, Kind} ->
erlang:list_to_binary(
[<<<<<<(bold(red(<<"assert"/utf8>>)))/binary, " "/utf8>>/binary,
Location/binary>>/binary,
"\n"/utf8>>,
<<<<<<<<<<(cyan(<<" test"/utf8>>))/binary, ": "/utf8>>/binary,
Module/binary>>/binary,
"."/utf8>>/binary,
Function/binary>>/binary,
"\n"/utf8>>,
code_snippet(Src, Start, End),
assert_info(Kind),
<<<<<<(cyan(<<" info"/utf8>>))/binary, ": "/utf8>>/binary,
(erlang:element(2, Error))/binary>>/binary,
"\n"/utf8>>]
);
{let_assert, Start@1, End@1, _, _, Value} ->
erlang:list_to_binary(
[<<<<<<(bold(red(<<"let assert"/utf8>>)))/binary, " "/utf8>>/binary,
Location/binary>>/binary,
"\n"/utf8>>,
<<<<<<<<<<(cyan(<<" test"/utf8>>))/binary, ": "/utf8>>/binary,
Module/binary>>/binary,
"."/utf8>>/binary,
Function/binary>>/binary,
"\n"/utf8>>,
code_snippet(Src, Start@1, End@1),
<<<<<<(cyan(<<"value"/utf8>>))/binary, ": "/utf8>>/binary,
(gleam@string:inspect(Value))/binary>>/binary,
"\n"/utf8>>,
<<<<<<(cyan(<<" info"/utf8>>))/binary, ": "/utf8>>/binary,
(erlang:element(2, Error))/binary>>/binary,
"\n"/utf8>>]
)
end.
-file("src/gleeunit/internal/reporting.gleam", 71).
?DOC(false).
-spec test_failed(state(), binary(), binary(), gleam@dynamic:dynamic_()) -> state().
test_failed(State, Module, Function, Error) ->
Message = case gleeunit_gleam_panic_ffi:from_dynamic(Error) of
{ok, Error@1} ->
Src = gleam@option:from_result(
file:read_file(erlang:element(3, Error@1))
),
format_gleam_error(Error@1, Module, Function, Src);
{error, _} ->
format_unknown(Module, Function, Error)
end,
gleam_stdlib:print(<<"\n"/utf8, Message/binary>>),
{state,
erlang:element(2, State),
erlang:element(3, State) + 1,
erlang:element(4, State)}.