summaryrefslogtreecommitdiff
path: root/test/rebar_src_dirs_SUITE.erl
diff options
context:
space:
mode:
Diffstat (limited to 'test/rebar_src_dirs_SUITE.erl')
-rw-r--r--test/rebar_src_dirs_SUITE.erl239
1 files changed, 239 insertions, 0 deletions
diff --git a/test/rebar_src_dirs_SUITE.erl b/test/rebar_src_dirs_SUITE.erl
new file mode 100644
index 0000000..1804fbf
--- /dev/null
+++ b/test/rebar_src_dirs_SUITE.erl
@@ -0,0 +1,239 @@
+-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),
+
+ ["foo", "bar", "baz"] = rebar_dir:src_dirs(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),
+
+ ["foo", "bar", "baz"] = rebar_dir:extra_src_dirs(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),
+
+ ["foo", "bar", "baz"] = rebar_dir:src_dirs(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),
+
+ ["foo", "bar", "baz"] = rebar_dir:extra_src_dirs(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),
+
+ ["baz", "qux", "foo", "bar"] = rebar_dir:src_dirs(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),
+
+ ["baz", "qux", "foo", "bar"] = rebar_dir:extra_src_dirs(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 `ebin` dir
+ Ebin = filename:join([AppDir, "_build", "default", "lib", Name, "ebin"]),
+ true = filelib:is_file(filename:join([Ebin, "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,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,Name2]), Name2, Vsn2, [kernel, stdlib]),
+
+ Extra1 = filename:join([AppDir, 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, 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
+ Ebin1 = filename:join([AppDir, "_build", "default", "lib", Name1, "ebin"]),
+ true = filelib:is_file(filename:join([Ebin1, "extra1.beam"])),
+
+ Ebin2 = filename:join([AppDir, "_build", "default", "lib", Name2, "ebin"]),
+ true = filelib:is_file(filename:join([Ebin2, "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 `ebin` dir
+ %% check that `extraX.erl` was compiled to the `ebin` dir
+ Ebin = filename:join([AppDir, "_build", "default", "lib", Name, "ebin"]),
+ true = filelib:is_file(filename:join([Ebin, "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). \ No newline at end of file