Current section
Files
Jump to
Current section
Files
src/gurka_eunit.erl
-module(gurka_eunit).
-include_lib("eunit/include/eunit.hrl").
-export([setup/1, setup/2, setup/3]).
-type eunit_fixture() :: {setup, spawn, Setup::fun(), Cleanup::fun(), Tests::fun()}.
-spec setup(Setup) -> eunit_fixture() when
Setup :: fun().
setup(Setup) ->
setup(Setup, fun(_) -> ok end).
-spec setup(Setup, Cleanup) -> eunit_fixture() when
Setup :: fun(),
Cleanup :: fun().
setup(Setup, Cleanup) ->
setup(Setup, Cleanup, fun(Message) -> io:fwrite(user, "~s~n", [Message]) end).
-spec setup(Setup, Cleanup, Log) -> eunit_fixture() when
Setup :: [file:name_all()] | fun(),
Cleanup :: fun(),
Log :: fun().
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}],
{Status, Result} = gurka:run(File, Options),
Log(io_lib:format("~s", [Formatter:format(Status, Result, Options)])),
case Status 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.