Current section
Files
Jump to
Current section
Files
src/teal.erl
-module(teal).
-export([assert/3,
not_equal/2, assert_not_equal/2, assert_not_equal/3,
raises_exception/1, assert_raises_exception/1,
assert_raises_exception/2,
raises_exception_with_message/2,
assert_raises_exception_with_message/2,
assert_raises_exception_with_message/3,
raises_throw/1, assert_raises_throw/1, assert_raises_throw/2,
raises_throw_with_message/2, assert_raises_throw_with_message/2,
assert_raises_throw_with_message/3,
raises_error/1, assert_raises_error/1, assert_raises_error/2,
raises_error_with_message/2, assert_raises_error_with_message/2,
assert_raises_error_with_message/3,
raises_exit/1, assert_raises_exit/1, assert_raises_exit/2,
raises_exit_with_message/2, assert_raises_exit_with_message/2,
assert_raises_exit_with_message/3
]).
%%%===================================================================
%%% API
%%%===================================================================
-spec assert(Lhs :: any(), Rhs :: any(), Message :: atom()) -> true.
assert(Lhs, Rhs, Message) ->
try Lhs = Rhs of
Lhs -> true
catch
error:{badmatch, _} ->
erlang:error(Message)
end.
%% equality functions
-spec not_equal(Term1 :: any(), Term2 :: any()) -> boolean().
not_equal(Term1, Term2) ->
case Term1 of
Term2 ->
false;
_ ->
true
end.
-spec assert_not_equal(Term1 :: any(), Term2 :: any()) -> boolean().
assert_not_equal(Term1, Term2) ->
teal:assert(true, not_equal(Term1, Term2), equal).
-spec assert_not_equal(Term1 :: any(), Term2 :: any(), Msg :: atom()) -> boolean().
assert_not_equal(Term1, Term2, Msg) ->
teal:assert(true, not_equal(Term1, Term2), Msg).
%% Exception function
-spec raises_exception(Fun :: fun()) -> boolean().
raises_exception(Fun) when is_function(Fun) ->
does_raise_exception(Fun).
-spec assert_raises_exception(Fun :: fun()) -> boolean().
assert_raises_exception(Fun) ->
assert(true, raises_exception(Fun), no_exception_caught).
-spec assert_raises_exception(Fun :: fun(), Msg :: any()) -> boolean().
assert_raises_exception(Fun, Msg) ->
assert(true, raises_exception(Fun), Msg).
-spec raises_exception_with_message(Fun :: fun(), ErrMsg :: any()) -> boolean().
raises_exception_with_message(Fun, ErrMsg) when is_function(Fun) ->
does_raise_exception_with_message(Fun, ErrMsg).
-spec assert_raises_exception_with_message(Fun :: fun(), ErrMsg :: any()) ->
boolean().
assert_raises_exception_with_message(Fun, ErrMsg) ->
assert(true, raises_exception_with_message(Fun, ErrMsg),
no_exception_caught).
-spec assert_raises_exception_with_message(Fun :: fun(), ErrMsg :: any(),
Msg :: any()) -> boolean().
assert_raises_exception_with_message(Fun, ErrMsg, Msg) ->
assert(true, raises_exception_with_message(Fun, ErrMsg), Msg).
-spec raises_throw(Fun :: fun()) -> boolean().
raises_throw(Fun) when is_function(Fun) ->
does_raise_exception(Fun, throw).
-spec assert_raises_throw(Fun :: fun()) -> boolean().
assert_raises_throw(Fun) ->
assert(true, raises_throw(Fun), no_throw_caught).
-spec assert_raises_throw(Fun :: fun(), Msg :: any()) -> boolean().
assert_raises_throw(Fun, Msg) ->
assert(true, raises_throw(Fun), Msg).
-spec raises_throw_with_message(Fun :: fun(), ErrMsg :: any()) -> boolean().
raises_throw_with_message(Fun, ErrMsg) when is_function(Fun) ->
does_raise_exception(Fun, throw, ErrMsg).
-spec assert_raises_throw_with_message(Fun :: fun(), ErrMsg :: any()) ->
boolean().
assert_raises_throw_with_message(Fun, ErrMsg) ->
assert(true, raises_throw_with_message(Fun, ErrMsg), no_throw_caught).
-spec assert_raises_throw_with_message(Fun :: fun(), ErrMsg :: any(),
Msg :: any()) -> boolean().
assert_raises_throw_with_message(Fun, ErrMsg, Msg) ->
assert(true, raises_throw_with_message(Fun, ErrMsg), Msg).
-spec raises_error(Fun :: fun()) -> boolean().
raises_error(Fun) when is_function(Fun) ->
does_raise_exception(Fun, error).
-spec assert_raises_error(Fun :: fun()) -> boolean().
assert_raises_error(Fun) when is_function(Fun) ->
assert(true, raises_error(Fun), no_error_caught).
-spec assert_raises_error(Fun :: fun(), Msg :: any()) -> boolean().
assert_raises_error(Fun, Msg) when is_function(Fun) ->
assert(true, raises_error(Fun), Msg).
-spec raises_error_with_message(Fun :: fun(), ErrMsg :: any()) -> boolean().
raises_error_with_message(Fun, ErrMsg) when is_function(Fun) ->
does_raise_exception(Fun, error, ErrMsg).
-spec assert_raises_error_with_message(Fun :: fun(), ErrMsg :: any()) ->
boolean().
assert_raises_error_with_message(Fun, ErrMsg) when is_function(Fun) ->
assert(true, raises_error_with_message(Fun, ErrMsg), no_error_caught).
-spec assert_raises_error_with_message(Fun :: fun(), ErrMsg :: any(),
Msg :: any()) -> boolean().
assert_raises_error_with_message(Fun, ErrMsg, Msg) when is_function(Fun) ->
assert(true, raises_error_with_message(Fun, ErrMsg), Msg).
-spec raises_exit(Fun :: fun()) -> boolean().
raises_exit(Fun) when is_function(Fun) ->
does_raise_exception(Fun, exit).
-spec assert_raises_exit(Fun :: fun()) -> boolean().
assert_raises_exit(Fun) when is_function(Fun) ->
assert(true, raises_exit(Fun), no_exit_caught).
-spec assert_raises_exit(Fun :: fun(), Msg :: any()) -> boolean().
assert_raises_exit(Fun, Msg) when is_function(Fun) ->
assert(true, raises_exit(Fun), Msg).
-spec raises_exit_with_message(Fun :: fun(), ErrMsg :: any()) -> boolean().
raises_exit_with_message(Fun, ErrMsg) when is_function(Fun) ->
does_raise_exception(Fun, exit, ErrMsg).
-spec assert_raises_exit_with_message(Fun :: fun(), ErrMsg :: any()) ->
boolean().
assert_raises_exit_with_message(Fun, ErrMsg) when is_function(Fun) ->
assert(true, raises_exit_with_message(Fun, ErrMsg), no_exit_caught).
-spec assert_raises_exit_with_message(Fun :: fun(), ErrMsg :: any(),
Msg :: any()) -> boolean().
assert_raises_exit_with_message(Fun, ErrMsg, Msg) when is_function(Fun) ->
assert(true, raises_exit_with_message(Fun, ErrMsg), Msg).
%%%===================================================================
%%% Private functions
%%%===================================================================
does_raise_exception(Fun) when is_function(Fun) ->
try Fun() of
_ -> false
catch
_Error:_ErrMsg ->
true
end.
does_raise_exception(Fun, Error) when is_function(Fun) ->
try Fun() of
_ -> false
catch
Error:_ErrMsg ->
true
end.
does_raise_exception_with_message(Fun, ErrorMessage) when is_function(Fun) ->
try Fun() of
_ -> false
catch
_Error:ErrorMessage ->
true
end.
does_raise_exception(Fun, Error, ErrorMessage) when is_function(Fun) ->
try Fun() of
_ -> false
catch
Error:ErrorMessage ->
true
end.