rebar3/test/rebar_namespace_SUITE.erl

150 lines
4.6 KiB
Erlang

-module(rebar_namespace_SUITE).
-compile(export_all).
-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").
all() -> [implicit_compile, default_compile, do_compile,
as_default_compile, as_do_compile,
notfound, do_notfound, default_notfound, ns_notfound, ns_found,
as_ns_invalid,
do_ns_chain, do_ns_chain2, do_ns_noarg, do_ns_badcmd].
init_per_testcase(Case, Config0) ->
Config = rebar_test_utils:init_rebar_state(Config0),
AppDir = ?config(apps, Config),
Name = rebar_test_utils:create_random_name("app1_"++atom_to_list(Case)),
Vsn = rebar_test_utils:create_random_vsn(),
rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
[{name, Name} | Config].
end_per_testcase(_, Config) ->
Config.
implicit_compile(Config) ->
Name = ?config(name, Config),
rebar_test_utils:run_and_check(Config, [],
["compile"],
{ok, [{app, Name}]}).
default_compile(Config) ->
Name = ?config(name, Config),
rebar_test_utils:run_and_check(Config, [],
["default","compile"],
{ok, [{app, Name}]}).
do_compile(Config) ->
Name = ?config(name, Config),
rebar_test_utils:run_and_check(Config, [],
["do", "compile"],
{ok, [{app, Name}]}).
as_default_compile(Config) ->
Name = ?config(name, Config),
rebar_test_utils:run_and_check(Config, [],
["as", "prod", "default", "compile"],
{ok, [{app, Name}]}).
as_do_compile(Config) ->
Name = ?config(name, Config),
rebar_test_utils:run_and_check(Config, [],
["as", "prod", "do", "compile"],
{ok, [{app, Name}]}).
notfound(Config) ->
Command = ["fakecommand"],
rebar_test_utils:run_and_check(
Config, [], Command,
{error, io_lib:format("Command ~p not found", [fakecommand])}
).
do_notfound(Config) ->
Command = ["do", "fakecommand"],
rebar_test_utils:run_and_check(
Config, [], Command,
{error, io_lib:format("Command ~p not found", [fakecommand])}
).
default_notfound(Config) ->
Command = ["default", "fakecommand"],
rebar_test_utils:run_and_check(
Config, [], Command,
{error, io_lib:format("Command ~p not found", [fakecommand])}
).
ns_notfound(Config) ->
Command = ["ns", "fakecommand"],
rebar_test_utils:run_and_check(
add_fake_ns_provider(Config), [], Command,
{error, io_lib:format("Command ~p not found in namespace ~p",
[fakecommand, ns])}
).
ns_found(Config) ->
Command = ["ns", "fake_provider"],
rebar_test_utils:run_and_check(
add_fake_ns_provider(Config), [], Command,
{ok, []}
).
as_ns_invalid(Config) ->
%% The as namespace is not valid
Command = ["as", "profile", "as", "task"],
rebar_test_utils:run_and_check(
add_fake_ns_provider(Config), [], Command,
{error, "Namespace 'as' is forbidden"}
).
do_ns_chain(Config) ->
%% `do` is also able to resolve namespaces on
%% commands not found
Command = ["do", "deps,", "ns", "fake_provider,", "deps"],
rebar_test_utils:run_and_check(
add_fake_ns_provider(Config), [], Command,
{ok, []}
).
do_ns_chain2(Config) ->
%% `do` is also able to resolve namespaces on
%% commands not found
Command = ["do", "ns", "fake_provider,", "deps,", "ns", "fake_provider"],
rebar_test_utils:run_and_check(
add_fake_ns_provider(Config), [], Command,
{ok, []}
).
do_ns_noarg(Config) ->
%% `do` is also able to resolve namespaces on
%% commands not found
Command = ["do", "ns"],
rebar_test_utils:run_and_check(
add_fake_ns_provider(Config), [], Command,
{error, io_lib:format("Command ~p not found", [ns])}
).
do_ns_badcmd(Config) ->
%% `do` is also able to resolve namespaces on
%% commands not found
Command = ["do", "ns", "badcmd"],
rebar_test_utils:run_and_check(
add_fake_ns_provider(Config), [], Command,
{error, io_lib:format("Command ~p not found in namespace ~p", [badcmd, ns])}
).
%%% Helpers %%%
add_fake_ns_provider(Config) ->
State = ?config(state, Config),
State1 = rebar_state:add_provider(
State,
providers:create(
[{name, fake_provider},
{module, ?MODULE},
{namespace, ns},
{deps, []},
{opts, []}]
)
),
[{state, State1} | Config].
%% callback for the test suite.
do(State) -> {ok, State}.