diff options
| -rw-r--r-- | test/rebar_compile_SUITE.erl | 46 | ||||
| -rw-r--r-- | test/rebar_test_utils.erl | 10 | 
2 files changed, 51 insertions, 5 deletions
| diff --git a/test/rebar_compile_SUITE.erl b/test/rebar_compile_SUITE.erl index d67be77..627e834 100644 --- a/test/rebar_compile_SUITE.erl +++ b/test/rebar_compile_SUITE.erl @@ -6,7 +6,9 @@           init_per_testcase/2,           all/0,           build_basic_app/1, -         build_release_apps/1]). +         build_release_apps/1, +         build_checkout_apps/1, +         build_checkout_deps/1]).  -include_lib("common_test/include/ct.hrl").  -include_lib("eunit/include/eunit.hrl"). @@ -25,7 +27,8 @@ init_per_testcase(_, Config) ->      rebar_test_utils:init_rebar_state(Config).  all() -> -    [build_basic_app, build_release_apps]. +    [build_basic_app, build_release_apps, +     build_checkout_apps, build_checkout_deps].  build_basic_app(Config) ->      AppDir = ?config(apps, Config), @@ -39,10 +42,10 @@ build_basic_app(Config) ->  build_release_apps(Config) ->      AppDir = ?config(apps, Config), -    Name1 = rebar_test_utils:create_random_name("app1_"), +    Name1 = rebar_test_utils:create_random_name("relapp1_"),      Vsn1 = rebar_test_utils:create_random_vsn(),      rebar_test_utils:create_app(filename:join([AppDir,Name1]), Name1, Vsn1, [kernel, stdlib]), -    Name2 = rebar_test_utils:create_random_name("app2_"), +    Name2 = rebar_test_utils:create_random_name("relapp2_"),      Vsn2 = rebar_test_utils:create_random_vsn(),      rebar_test_utils:create_app(filename:join([AppDir,Name2]), Name2, Vsn2, [kernel, stdlib]), @@ -50,3 +53,38 @@ build_release_apps(Config) ->          Config, [], ["compile"],          {ok, [{app, Name1}, {app, Name2}]}      ). + +build_checkout_apps(Config) -> +    AppDir = ?config(apps, Config), +    CheckoutsDir = ?config(checkouts, Config), +    Name1 = rebar_test_utils:create_random_name("checkapp1_"), +    Vsn1 = rebar_test_utils:create_random_vsn(), +    rebar_test_utils:create_app(filename:join([AppDir,Name1]), Name1, Vsn1, [kernel, stdlib]), +    Name2 = rebar_test_utils:create_random_name("checkapp2_"), +    Vsn2 = rebar_test_utils:create_random_vsn(), +    rebar_test_utils:create_app(filename:join([CheckoutsDir,Name2]), Name2, Vsn2, [kernel, stdlib]), + +    rebar_test_utils:run_and_check( +        Config, [], ["compile"], +        {ok, [{app, Name1}, {checkout, Name2}]} +    ). + +build_checkout_deps(Config) -> +    AppDir = ?config(apps, Config), +    CheckoutsDir = ?config(checkouts, Config), +    DepsDir = filename:join([AppDir, "_build", "lib"]), +    Name1 = rebar_test_utils:create_random_name("checkapp1_"), +    Vsn1 = rebar_test_utils:create_random_vsn(), +    rebar_test_utils:create_app(filename:join([AppDir,Name1]), Name1, Vsn1, [kernel, stdlib]), +    Name2 = rebar_test_utils:create_random_name("checkapp2_"), +    Vsn2 = rebar_test_utils:create_random_vsn(), +    rebar_test_utils:create_app(filename:join([CheckoutsDir,Name2]), Name2, Vsn2, [kernel, stdlib]), +    rebar_test_utils:create_app(filename:join([DepsDir,Name2]), Name2, Vsn1, [kernel, stdlib]), + +    rebar_test_utils:run_and_check( +        Config, [], ["compile"], +        {ok, [{app, Name1}, {checkout, Name2}]} +    ), +    ok = application:load(list_to_atom(Name2)), +    Loaded = application:loaded_applications(), +    {_, _, Vsn2} = lists:keyfind(list_to_atom(Name2), 1, Loaded). diff --git a/test/rebar_test_utils.erl b/test/rebar_test_utils.erl index ac85f41..4982929 100644 --- a/test/rebar_test_utils.erl +++ b/test/rebar_test_utils.erl @@ -19,11 +19,13 @@ init_rebar_state(Config, Name) ->      application:load(rebar),      DataDir = ?config(priv_dir, Config),      AppsDir = filename:join([DataDir, create_random_name(Name)]), +    CheckoutsDir = filename:join([AppsDir, "_checkouts"]),      ok = ec_file:mkdir_p(AppsDir), +    ok = ec_file:mkdir_p(CheckoutsDir),      Verbosity = rebar3:log_level(),      rebar_log:init(command_line, Verbosity),      State = rebar_state:new([{base_dir, filename:join([AppsDir, "_build"])}]), -    [{apps, AppsDir}, {state, State} | Config]. +    [{apps, AppsDir}, {checkouts, CheckoutsDir}, {state, State} | Config].  %% @doc Takes common test config, a rebar config ([] if empty), a command to  %% run ("install_deps", "compile", etc.), and a list of expected applications @@ -97,10 +99,13 @@ create_random_vsn() ->  %%%%%%%%%%%%%%%  check_results(AppDir, Expected) ->      BuildDir = filename:join([AppDir, "_build", "lib"]), +    CheckoutsDir = filename:join([AppDir, "_checkouts"]),      Apps = rebar_app_discover:find_apps([AppDir]),      AppsNames = [{ec_cnv:to_list(rebar_app_info:name(App)), App} || App <- Apps],      Deps = rebar_app_discover:find_apps([BuildDir], all),      DepsNames = [{ec_cnv:to_list(rebar_app_info:name(App)), App} || App <- Deps], +    Checkouts = rebar_app_discover:find_apps([CheckoutsDir], all), +    CheckoutsNames = [{ec_cnv:to_list(rebar_app_info:name(App)), App} || App <- Checkouts],      lists:foreach(          fun({app, Name}) ->                  ct:pal("Name: ~p", [Name]), @@ -110,6 +115,9 @@ check_results(AppDir, Expected) ->                      {Name, _App} ->                          ok                  end +        ;  ({checkout, Name}) -> +                ct:pal("Name: ~p", [Name]), +                ?assertNotEqual(false, lists:keyfind(Name, 1, CheckoutsNames))          ;  ({dep, Name}) ->                  ct:pal("Name: ~p", [Name]),                  ?assertNotEqual(false, lists:keyfind(Name, 1, DepsNames)) | 
