summaryrefslogtreecommitdiff
path: root/test/rebar_deps_SUITE.erl
diff options
context:
space:
mode:
Diffstat (limited to 'test/rebar_deps_SUITE.erl')
-rw-r--r--test/rebar_deps_SUITE.erl85
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)
+ ).
+