|
|
@ -4,7 +4,8 @@ |
|
|
|
-include_lib("common_test/include/ct.hrl"). |
|
|
|
-include_lib("eunit/include/eunit.hrl"). |
|
|
|
|
|
|
|
all() -> [flat, pick_highest_left, pick_highest_right, pick_earliest]. |
|
|
|
all() -> [flat, pick_highest_left, pick_highest_right, pick_earliest, |
|
|
|
circular1, circular2]. |
|
|
|
|
|
|
|
init_per_suite(Config) -> |
|
|
|
application:start(meck), |
|
|
@ -15,29 +16,42 @@ end_per_suite(_Config) -> |
|
|
|
|
|
|
|
init_per_testcase(Case, Config) -> |
|
|
|
{Deps, Expect} = deps(Case), |
|
|
|
[{expect, |
|
|
|
[case Dep of |
|
|
|
Expected = case Expect of |
|
|
|
{ok, List} -> {ok, format_expected_deps(List)}; |
|
|
|
{error, Reason} -> {error, Reason} |
|
|
|
end, |
|
|
|
[{expect, Expected} | setup_project(Case, Config, expand_deps(Deps))]. |
|
|
|
|
|
|
|
format_expected_deps(Deps) -> |
|
|
|
[case Dep of |
|
|
|
{N,V} -> {dep, N, V}; |
|
|
|
N -> {dep, N} |
|
|
|
end || Dep <- Expect]} |
|
|
|
| setup_project(Case, Config, expand_deps(Deps))]. |
|
|
|
end || Dep <- Deps]. |
|
|
|
|
|
|
|
deps(flat) -> |
|
|
|
{[{"B", []}, |
|
|
|
{"C", []}], |
|
|
|
["B", "C"]}; |
|
|
|
{ok, ["B", "C"]}}; |
|
|
|
deps(pick_highest_left) -> |
|
|
|
{[{"B", [{"C", "2", []}]}, |
|
|
|
{"C", "1", []}], |
|
|
|
["B", {"C", "1"}]}; % Warn C2 |
|
|
|
{ok, ["B", {"C", "1"}]}}; % Warn C2 |
|
|
|
deps(pick_highest_right) -> |
|
|
|
{[{"B", "1", []}, |
|
|
|
{"C", [{"B", "2", []}]}], |
|
|
|
[{"B","1"}, "C"]}; % Warn B2 |
|
|
|
{ok, [{"B","1"}, "C"]}}; % Warn B2 |
|
|
|
deps(pick_earliest) -> |
|
|
|
{[{"B", [{"D", "1", []}]}, |
|
|
|
{"C", [{"D", "2", []}]}], |
|
|
|
["B","C",{"D","1"}]}. % Warn D2 |
|
|
|
{ok, ["B","C",{"D","1"}]}}; % Warn D2 |
|
|
|
deps(circular1) -> |
|
|
|
{[{"B", [{"A", []}]}, % A is the top-level app |
|
|
|
{"C", []}], |
|
|
|
{error, {rebar_prv_install_deps, {cycles, [[<<"A">>,<<"B">>]]}}}}; |
|
|
|
deps(circular2) -> |
|
|
|
{[{"B", [{"C", [{"B", []}]}]}, |
|
|
|
{"C", []}], |
|
|
|
{error, {rebar_prv_install_deps, {cycles, [[<<"B">>,<<"C">>]]}}}}. |
|
|
|
|
|
|
|
end_per_testcase(_, Config) -> |
|
|
|
mock_git_resource:unmock(), |
|
|
@ -55,6 +69,7 @@ expand_deps([{Name, Vsn, Deps} | Rest]) -> |
|
|
|
setup_project(Case, Config0, Deps) -> |
|
|
|
Config = rebar_test_utils:init_rebar_state(Config0, atom_to_list(Case)), |
|
|
|
AppDir = ?config(apps, Config), |
|
|
|
rebar_test_utils:create_app(AppDir, "A", "0.0.0", [kernel, stdlib]), |
|
|
|
TopDeps = top_level_deps(Deps), |
|
|
|
RebarConf = rebar_test_utils:create_config(AppDir, [{deps, TopDeps}]), |
|
|
|
mock_git_resource:mock([{deps, flat_deps(Deps)}]), |
|
|
@ -76,6 +91,8 @@ flat(Config) -> run(Config). |
|
|
|
pick_highest_left(Config) -> run(Config). |
|
|
|
pick_highest_right(Config) -> run(Config). |
|
|
|
pick_earliest(Config) -> run(Config). |
|
|
|
circular1(Config) -> run(Config). |
|
|
|
circular2(Config) -> run(Config). |
|
|
|
|
|
|
|
run(Config) -> |
|
|
|
{ok, RebarConfig} = file:consult(?config(rebarconfig, Config)), |
|
|
|