- -module(rebar_src_dirs_SUITE).
-
- -export([suite/0,
- init_per_suite/1,
- end_per_suite/1,
- init_per_testcase/2,
- end_per_testcase/2,
- all/0,
- src_dirs_at_root/1,
- extra_src_dirs_at_root/1,
- src_dirs_in_erl_opts/1,
- extra_src_dirs_in_erl_opts/1,
- src_dirs_at_root_and_in_erl_opts/1,
- extra_src_dirs_at_root_and_in_erl_opts/1,
- build_basic_app/1,
- build_multi_apps/1,
- src_dir_takes_precedence_over_extra/1]).
-
- -include_lib("common_test/include/ct.hrl").
-
- suite() ->
- [].
-
- init_per_suite(Config) ->
- Config.
-
- end_per_suite(_Config) ->
- ok.
-
- init_per_testcase(_, Config) ->
- rebar_test_utils:init_rebar_state(Config).
-
- end_per_testcase(_, _Config) -> ok.
-
- all() ->
- [src_dirs_at_root, extra_src_dirs_at_root,
- src_dirs_in_erl_opts, extra_src_dirs_in_erl_opts,
- src_dirs_at_root_and_in_erl_opts, extra_src_dirs_at_root_and_in_erl_opts,
- build_basic_app, build_multi_apps, src_dir_takes_precedence_over_extra].
-
- src_dirs_at_root(Config) ->
- AppDir = ?config(apps, Config),
-
- Name = rebar_test_utils:create_random_name("app1_"),
- Vsn = rebar_test_utils:create_random_vsn(),
- rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
-
- RebarConfig = [{src_dirs, ["foo", "bar", "baz"]}],
-
- {ok, State} = rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"], return),
-
- ["bar", "baz", "foo"] = rebar_dir:src_dirs(rebar_state:opts(State), []).
-
- extra_src_dirs_at_root(Config) ->
- AppDir = ?config(apps, Config),
-
- Name = rebar_test_utils:create_random_name("app1_"),
- Vsn = rebar_test_utils:create_random_vsn(),
- rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
-
- RebarConfig = [{extra_src_dirs, ["foo", "bar", "baz"]}],
-
- {ok, State} = rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"], return),
-
- ["bar", "baz", "foo"] = rebar_dir:extra_src_dirs(rebar_state:opts(State), []).
-
- src_dirs_in_erl_opts(Config) ->
- AppDir = ?config(apps, Config),
-
- Name = rebar_test_utils:create_random_name("app1_"),
- Vsn = rebar_test_utils:create_random_vsn(),
- rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
-
- RebarConfig = [{erl_opts, [{src_dirs, ["foo", "bar", "baz"]}]}],
-
- {ok, State} = rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"], return),
-
- ["bar", "baz", "foo"] = rebar_dir:src_dirs(rebar_state:opts(State), []).
-
- extra_src_dirs_in_erl_opts(Config) ->
- AppDir = ?config(apps, Config),
-
- Name = rebar_test_utils:create_random_name("app1_"),
- Vsn = rebar_test_utils:create_random_vsn(),
- rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
-
- RebarConfig = [{erl_opts, [{extra_src_dirs, ["foo", "bar", "baz"]}]}],
-
- {ok, State} = rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"], return),
-
- ["bar", "baz", "foo"] = rebar_dir:extra_src_dirs(rebar_state:opts(State), []).
-
- src_dirs_at_root_and_in_erl_opts(Config) ->
- AppDir = ?config(apps, Config),
-
- Name = rebar_test_utils:create_random_name("app1_"),
- Vsn = rebar_test_utils:create_random_vsn(),
- rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
-
- RebarConfig = [{erl_opts, [{src_dirs, ["foo", "bar"]}]}, {src_dirs, ["baz", "qux"]}],
-
- {ok, State} = rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"], return),
-
- ["bar", "baz", "foo", "qux"] = rebar_dir:src_dirs(rebar_state:opts(State), []).
-
- extra_src_dirs_at_root_and_in_erl_opts(Config) ->
- AppDir = ?config(apps, Config),
-
- Name = rebar_test_utils:create_random_name("app1_"),
- Vsn = rebar_test_utils:create_random_vsn(),
- rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
-
- RebarConfig = [{erl_opts, [{extra_src_dirs, ["foo", "bar"]}]}, {extra_src_dirs, ["baz", "qux"]}],
-
- {ok, State} = rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"], return),
-
- ["bar", "baz", "foo", "qux"] = rebar_dir:extra_src_dirs(rebar_state:opts(State), []).
-
- build_basic_app(Config) ->
- AppDir = ?config(apps, Config),
-
- Name = rebar_test_utils:create_random_name("app1_"),
- Vsn = rebar_test_utils:create_random_vsn(),
- rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
-
- Extra = filename:join([AppDir, "extra", "extra.erl"]),
- ok = filelib:ensure_dir(Extra),
- Src = io_lib:format("-module(extra).~n-export([x/0]).~nx() -> ok.", []),
- ok = ec_file:write(Extra, Src),
-
- RebarConfig = [{erl_opts, [{extra_src_dirs, ["extra"]}]}],
-
- rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"], {ok, [{app, Name}]}),
-
- %% check that `extra.erl` was compiled to the `extra` dir
- ExtraOut = filename:join([AppDir, "_build", "default", "lib", Name, "extra"]),
- true = filelib:is_file(filename:join([ExtraOut, "extra.beam"])),
-
- %% check that `extra.erl` is not in the `modules` key of the app
- {ok, App} = file:consult(filename:join([AppDir,
- "_build",
- "default",
- "lib",
- Name,
- "ebin",
- Name ++ ".app"])),
- [{application, _, KVs}] = App,
- Mods = proplists:get_value(modules, KVs),
- false = lists:member(extra, Mods).
-
- build_multi_apps(Config) ->
- AppDir = ?config(apps, Config),
-
- Name1 = rebar_test_utils:create_random_name("app1_"),
- Vsn1 = rebar_test_utils:create_random_vsn(),
- rebar_test_utils:create_app(filename:join([AppDir,"apps",Name1]), Name1, Vsn1, [kernel, stdlib]),
- Name2 = rebar_test_utils:create_random_name("app2_"),
- Vsn2 = rebar_test_utils:create_random_vsn(),
- rebar_test_utils:create_app(filename:join([AppDir,"apps",Name2]), Name2, Vsn2, [kernel, stdlib]),
-
- Extra1 = filename:join([AppDir, "apps", Name1, "extra", "extra1.erl"]),
- ok = filelib:ensure_dir(Extra1),
- Src1 = io_lib:format("-module(extra1).~n-export([x/0]).~nx() -> ok.", []),
- ok = ec_file:write(Extra1, Src1),
-
- Extra2 = filename:join([AppDir, "apps", Name2, "extra", "extra2.erl"]),
- ok = filelib:ensure_dir(Extra2),
- Src2 = io_lib:format("-module(extra2).~n-export([x/0]).~nx() -> ok.", []),
- ok = ec_file:write(Extra2, Src2),
-
- RebarConfig = [{erl_opts, [{extra_src_dirs, ["extra"]}]}],
-
- rebar_test_utils:run_and_check(
- Config, RebarConfig, ["compile"],
- {ok, [{app, Name1}, {app, Name2}]}
- ),
-
- %% check that `extraX.erl` was compiled to the `ebin` dir
- ExtraOut1 = filename:join([AppDir, "_build", "default", "lib", Name1, "extra"]),
- true = filelib:is_file(filename:join([ExtraOut1, "extra1.beam"])),
-
- ExtraOut2 = filename:join([AppDir, "_build", "default", "lib", Name2, "extra"]),
- true = filelib:is_file(filename:join([ExtraOut2, "extra2.beam"])),
-
- %% check that `extraX.erl` is not in the `modules` key of the app
- {ok, App1} = file:consult(filename:join([AppDir,
- "_build",
- "default",
- "lib",
- Name1,
- "ebin",
- Name1 ++ ".app"])),
- [{application, _, KVs1}] = App1,
- Mods1 = proplists:get_value(modules, KVs1),
- false = lists:member(extra1, Mods1),
-
- {ok, App2} = file:consult(filename:join([AppDir,
- "_build",
- "default",
- "lib",
- Name2,
- "ebin",
- Name2 ++ ".app"])),
- [{application, _, KVs2}] = App2,
- Mods2 = proplists:get_value(modules, KVs2),
- false = lists:member(extra2, Mods2).
-
- src_dir_takes_precedence_over_extra(Config) ->
- AppDir = ?config(apps, Config),
-
- Name = rebar_test_utils:create_random_name("app1_"),
- Vsn = rebar_test_utils:create_random_vsn(),
- rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
-
- Extra = filename:join([AppDir, "extra", "extra.erl"]),
- ok = filelib:ensure_dir(Extra),
- Src = io_lib:format("-module(extra).~n-export([x/0]).~nx() -> ok.", []),
- ok = ec_file:write(Extra, Src),
-
- RebarConfig = [{erl_opts, [{src_dirs, ["src", "extra"]}, {extra_src_dirs, ["extra"]}]}],
-
- rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"], {ok, [{app, Name}]}),
-
- %% check that `extra.erl` was compiled to the `extra` dir
- ExtraOut = filename:join([AppDir, "_build", "default", "lib", Name, "extra"]),
- true = filelib:is_file(filename:join([ExtraOut, "extra.beam"])),
-
- %% check that `extra.erl` is in the `modules` key of the app
- {ok, App} = file:consult(filename:join([AppDir,
- "_build",
- "default",
- "lib",
- Name,
- "ebin",
- Name ++ ".app"])),
- [{application, _, KVs}] = App,
- Mods = proplists:get_value(modules, KVs),
- true = lists:member(extra, Mods).
|