Skip to content

Commit

Permalink
Added regression tests for PR 1398
Browse files Browse the repository at this point in the history
  • Loading branch information
tburghart committed Dec 5, 2016
1 parent 0383237 commit 1b422b9
Showing 1 changed file with 102 additions and 2 deletions.
104 changes: 102 additions & 2 deletions test/rebar_profiles_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,12 @@
test_profile_applied_at_completion/1,
test_profile_applied_before_compile/1,
test_profile_applied_before_eunit/1,
test_profile_applied_to_apps/1]).
test_profile_applied_to_apps/1,
test_profile_erl_opts_order_1/1,
test_profile_erl_opts_order_2/1,
test_profile_erl_opts_order_3/1,
test_profile_erl_opts_order_4/1,
test_profile_erl_opts_order_5/1]).

-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").
Expand All @@ -36,7 +41,12 @@ all() ->
test_profile_applied_at_completion,
test_profile_applied_before_compile,
test_profile_applied_before_eunit,
test_profile_applied_to_apps].
test_profile_applied_to_apps,
test_profile_erl_opts_order_1,
test_profile_erl_opts_order_2,
test_profile_erl_opts_order_3,
test_profile_erl_opts_order_4,
test_profile_erl_opts_order_5].

init_per_suite(Config) ->
application:start(meck),
Expand Down Expand Up @@ -432,3 +442,93 @@ test_profile_applied_to_apps(Config) ->
ErlOpts = dict:fetch(erl_opts, Opts),
true = lists:member({d, 'TEST'}, ErlOpts)
end, Apps).

test_profile_erl_opts_order_1(Config) ->
Opts = get_compiled_profile_erl_opts([default], Config),
Opt = last_erl_opt(Opts, [warn_export_all, nowarn_export_all], undefined),
undefined = Opt.

test_profile_erl_opts_order_2(Config) ->
Opts = get_compiled_profile_erl_opts([strict], Config),
Opt = last_erl_opt(Opts, [warn_export_all, nowarn_export_all], undefined),
warn_export_all = Opt.

test_profile_erl_opts_order_3(Config) ->
Opts = get_compiled_profile_erl_opts([loose], Config),
Opt = last_erl_opt(Opts, [warn_export_all, nowarn_export_all], undefined),
nowarn_export_all = Opt.

test_profile_erl_opts_order_4(Config) ->
Opts = get_compiled_profile_erl_opts([strict, loose], Config),
Opt = last_erl_opt(Opts, [warn_export_all, nowarn_export_all], undefined),
nowarn_export_all = Opt.

test_profile_erl_opts_order_5(Config) ->
Opts = get_compiled_profile_erl_opts([loose, strict], Config),
Opt = last_erl_opt(Opts, [warn_export_all, nowarn_export_all], undefined),
warn_export_all = Opt.

get_compiled_profile_erl_opts(Profiles, Config) ->
AppDir = ?config(apps, Config),
PStrs = [atom_to_list(P) || P <- Profiles],

Name = rebar_test_utils:create_random_name(
lists:flatten(["erl_opts_order_" | [[S, $_] || S <- PStrs]])),
Vsn = rebar_test_utils:create_random_vsn(),
rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),

RebarConfig = [
{erl_opts, [warnings_as_errors, {d, profile_default}]},
{profiles, [
{strict, [{erl_opts, [warn_export_all, {d, profile_strict}]}]},
{loose, [{erl_opts, [nowarn_export_all, {d, profile_loose}]}]} ]}],
rebar_test_utils:create_config(AppDir, RebarConfig),

Command = case Profiles of
[] ->
["compile"];
[default] ->
["compile"];
_ ->
["as", string:join(PStrs, ","), "compile"]
end,
{ok, State} = rebar_test_utils:run_and_check(
Config, RebarConfig, Command, {ok, [{app, Name}]}),
code:add_paths(rebar_state:code_paths(State, all_deps)),
Mod = list_to_atom(Name),
proplists:get_value(options, Mod:module_info(compile), []).

% macro definitions get special handling
last_erl_opt([{d, Macro} = Opt | Opts], Targets, Last) ->
case lists:any(erl_opt_macro_match_fun(Macro), Targets) of
true ->
last_erl_opt(Opts, Targets, Opt);
_ ->
last_erl_opt(Opts, Targets, Last)
end;
last_erl_opt([{d, Macro, _} = Opt | Opts], Targets, Last) ->
case lists:any(erl_opt_macro_match_fun(Macro), Targets) of
true ->
last_erl_opt(Opts, Targets, Opt);
_ ->
last_erl_opt(Opts, Targets, Last)
end;
last_erl_opt([Opt | Opts], Targets, Last) ->
case lists:member(Opt, Targets) of
true ->
last_erl_opt(Opts, Targets, Opt);
_ ->
last_erl_opt(Opts, Targets, Last)
end;
last_erl_opt([], _, Last) ->
Last.

erl_opt_macro_match_fun(Macro) ->
fun({d, M}) ->
M == Macro;
({d, M, _}) ->
M == Macro;
(_) ->
false
end.

0 comments on commit 1b422b9

Please sign in to comment.