diff options
Diffstat (limited to 'test/rebar_deps_SUITE.erl')
-rw-r--r-- | test/rebar_deps_SUITE.erl | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/test/rebar_deps_SUITE.erl b/test/rebar_deps_SUITE.erl new file mode 100644 index 0000000..b6ee8b8 --- /dev/null +++ b/test/rebar_deps_SUITE.erl @@ -0,0 +1,85 @@ +%%% TODO: check that warnings are appearing +-module(rebar_deps_SUITE). +-compile(export_all). +-include_lib("common_test/include/ct.hrl"). +-include_lib("eunit/include/eunit.hrl"). + +all() -> [flat, pick_highest_left, pick_highest_right, pick_earliest]. + +init_per_suite(Config) -> + application:start(meck), + Config. + +end_per_suite(_Config) -> + application:stop(meck). + +init_per_testcase(Case, Config) -> + {Deps, Expect} = deps(Case), + [{expect, + [case Dep of + {N,V} -> {dep, N, V}; + N -> {dep, N} + end || Dep <- Expect]} + | setup_project(Case, Config, expand_deps(Deps))]. + +deps(flat) -> + {[{"B", []}, + {"C", []}], + ["B", "C"]}; +deps(pick_highest_left) -> + {[{"B", [{"C", "2", []}]}, + {"C", "1", []}], + ["B", {"C", "1"}]}; % Warn C2 +deps(pick_highest_right) -> + {[{"B", "1", []}, + {"C", [{"B", "2", []}]}], + [{"B","1"}, "C"]}; % Warn B2 +deps(pick_earliest) -> + {[{"B", [{"D", "1", []}]}, + {"C", [{"D", "2", []}]}], + ["B","C",{"D","1"}]}. % Warn D2 + +end_per_testcase(_, Config) -> + mock_git_resource:unmock(), + meck:unload(), + Config. + +expand_deps([]) -> []; +expand_deps([{Name, Deps} | Rest]) -> + Dep = {Name, ".*", {git, "https://example.org/user/"++Name++".git", "master"}}, + [{Dep, expand_deps(Deps)} | expand_deps(Rest)]; +expand_deps([{Name, Vsn, Deps} | Rest]) -> + Dep = {Name, Vsn, {git, "https://example.org/user/"++Name++".git", {tag, Vsn}}}, + [{Dep, expand_deps(Deps)} | expand_deps(Rest)]. + +setup_project(Case, Config0, Deps) -> + Config = rebar_test_utils:init_rebar_state(Config0, atom_to_list(Case)), + AppDir = ?config(apps, Config), + TopDeps = top_level_deps(Deps), + RebarConf = rebar_test_utils:create_config(AppDir, [{deps, TopDeps}]), + mock_git_resource:mock([{deps, flat_deps(Deps)}]), + [{rebarconfig, RebarConf} | Config]. + + +flat_deps([]) -> []; +flat_deps([{{Name,_Vsn,_Ref}, Deps} | Rest]) -> + [{Name, top_level_deps(Deps)}] + ++ + flat_deps(Deps) + ++ + flat_deps(Rest). + +top_level_deps(Deps) -> [{list_to_atom(Name),Vsn,Ref} || {{Name,Vsn,Ref},_} <- Deps]. + +%%% TESTS %%% +flat(Config) -> run(Config). +pick_highest_left(Config) -> run(Config). +pick_highest_right(Config) -> run(Config). +pick_earliest(Config) -> run(Config). + +run(Config) -> + {ok, RebarConfig} = file:consult(?config(rebarconfig, Config)), + rebar_test_utils:run_and_check( + Config, RebarConfig, "install_deps", ?config(expect, Config) + ). + |