-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}.