72 lines
1.8 KiB
Erlang
72 lines
1.8 KiB
Erlang
%% A formatter adapted from Sean Cribb's https://github.com/seancribbs/eunit_formatters
|
|
|
|
-module(gleeunit_progress).
|
|
-define(NOTEST, true).
|
|
|
|
%% eunit_listener callbacks
|
|
-export([
|
|
init/1, handle_begin/3, handle_end/3, handle_cancel/3, terminate/2,
|
|
start/0, start/1
|
|
]).
|
|
|
|
-define(reporting, gleeunit@internal@reporting).
|
|
|
|
start() ->
|
|
start([]).
|
|
|
|
start(Options) ->
|
|
eunit_listener:start(?MODULE, Options).
|
|
|
|
init(_Options) ->
|
|
?reporting:new_state().
|
|
|
|
handle_begin(_test_or_group, _data, State) ->
|
|
State.
|
|
|
|
handle_end(group, _data, State) ->
|
|
State;
|
|
handle_end(test, Data, State) ->
|
|
{AtomModule, AtomFunction, _Arity} = proplists:get_value(source, Data),
|
|
Module = erlang:atom_to_binary(AtomModule),
|
|
Function = erlang:atom_to_binary(AtomFunction),
|
|
|
|
% EUnit swallows stdout, so print it to make debugging easier.
|
|
case proplists:get_value(output, Data) of
|
|
undefined -> ok;
|
|
<<>> -> ok;
|
|
Out -> gleam@io:print(Out)
|
|
end,
|
|
|
|
case proplists:get_value(status, Data) of
|
|
ok ->
|
|
?reporting:test_passed(State);
|
|
{skipped, _Reason} ->
|
|
?reporting:test_skipped(State, Module, Function);
|
|
{error, {_, Exception, _Stack}} ->
|
|
?reporting:test_failed(State, Module, Function, Exception)
|
|
end.
|
|
|
|
|
|
handle_cancel(_test_or_group, Data, State) ->
|
|
?reporting:test_failed(State, <<"gleeunit">>, <<"main">>, Data).
|
|
|
|
terminate({ok, _Data}, State) ->
|
|
?reporting:finished(State),
|
|
ok;
|
|
terminate({error, Reason}, State) ->
|
|
?reporting:finished(State),
|
|
io:fwrite("
|
|
Eunit failed:
|
|
|
|
~80p
|
|
|
|
This is probably a bug in gleeunit. Please report it.
|
|
", [Reason]),
|
|
sync_end(error).
|
|
|
|
sync_end(Result) ->
|
|
receive
|
|
{stop, Reference, ReplyTo} ->
|
|
ReplyTo ! {result, Reference, Result},
|
|
ok
|
|
end.
|