Current section

Files

Jump to
gurka src gurka_eunit.erl
Raw

src/gurka_eunit.erl

-module(gurka_eunit).
-include_lib("eunit/include/eunit.hrl").
-export([setup/1, setup/2, setup/3]).
setup(Setup) ->
setup(Setup, fun(_) -> ok end).
setup(Setup, Cleanup) ->
setup(Setup, Cleanup, fun(Message) -> io:fwrite(user, "~s~n", [Message]) end).
setup(Features, Cleanup, Log) when is_list(Features) ->
setup(fun() -> Features end, Cleanup, Log);
setup(Setup, Cleanup, Log) ->
{setup, spawn, Setup, Cleanup, fun(Files) -> features(Log, Files) end}.
features(Log, Files) ->
Timeout = parse_timeout(),
{inorder, [{timeout, Timeout, fun() -> feature(Log, File) end} || File <- Files]}.
feature(Log, File) ->
erlang:group_leader(erlang:whereis(user), self()),
Tags = parse_tags(),
Formatter = parse_format(),
Options = [{file, File}, {tags, Tags}, {formatter, Formatter}, {log, Log}],
Result = gurka:run(File, Options),
Log(io_lib:format("~s", [Formatter:format(Result, Options)])),
case Result of
{ok, _} ->
ok;
{fail, _} ->
erlang:error({failed, File})
end.
parse_timeout() ->
case os:getenv("TIMEOUT") of
false ->
60;
Timeout ->
list_to_number(Timeout)
end.
parse_tags() ->
case os:getenv("TAGS") of
false ->
[];
Tags ->
[list_to_binary(Tag) || Tag <- string:tokens(Tags, ", ")]
end.
parse_format() ->
case os:getenv("FORMAT") of
false ->
gurka_formatter_compact;
Format ->
list_to_atom("gurka_formatter_" ++ Format)
end.
list_to_number(L) ->
try list_to_float(L)
catch
error:badarg ->
list_to_integer(L)
end.