diff options
author | Fred Hebert <mononcqc@ferd.ca> | 2014-12-21 14:47:55 -0500 |
---|---|---|
committer | Fred Hebert <mononcqc@ferd.ca> | 2014-12-21 14:47:55 -0500 |
commit | 54a41ca6c4fb819aa5adf4883f51d0c785a56be3 (patch) | |
tree | 3cdd87e1e733d8e0b87f99456b90b3c58872d473 | |
parent | 73676c80b06bd4a26040b41f42fee8dde536dcac (diff) |
Tests and fixes for namespaces
-rw-r--r-- | src/rebar_core.erl | 9 | ||||
-rw-r--r-- | test/rebar_namespace_SUITE.erl | 93 |
2 files changed, 100 insertions, 2 deletions
diff --git a/src/rebar_core.erl b/src/rebar_core.erl index cfe040a..c3a8951 100644 --- a/src/rebar_core.erl +++ b/src/rebar_core.erl @@ -54,8 +54,13 @@ process_command(State, Command) -> undefined -> %% On the first run (Namespace = undefined), we use the %% unfound command name to be a namespace. - do([{default, do} | TargetProviders], - rebar_state:namespace(State, Command)); + case providers:get_providers_by_namespace(Command, Providers) of + [] -> + {error, io_lib:format("Command ~p not found", [Command])}; + _ -> + do([{default, do} | TargetProviders], + rebar_state:namespace(State, Command)) + end; default -> {error, io_lib:format("Command ~p not found", [Command])}; _ -> diff --git a/test/rebar_namespace_SUITE.erl b/test/rebar_namespace_SUITE.erl new file mode 100644 index 0000000..40b7238 --- /dev/null +++ b/test/rebar_namespace_SUITE.erl @@ -0,0 +1,93 @@ +-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]. + +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])} + ). + +%%% Helpers %%% +add_fake_ns_provider(Config) -> + State = ?config(state, Config), + State1 = rebar_state:add_provider( + State, + providers:create( + [{name, fake_provider}, + {module, fake_provider}, + {namespace, ns}, + {deps, []}, + {opts, []}] + ) + ), + [{state, State1} | Config]. |