summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/mock_pkg_resource.erl2
-rw-r--r--test/rebar_compile_SUITE.erl27
-rw-r--r--test/rebar_ct_SUITE.erl36
-rw-r--r--test/rebar_erlydtl_SUITE.erl72
-rw-r--r--test/rebar_profiles_SUITE.erl150
-rw-r--r--test/rebar_test_utils.erl4
6 files changed, 212 insertions, 79 deletions
diff --git a/test/mock_pkg_resource.erl b/test/mock_pkg_resource.erl
index 615e8a5..560caef 100644
--- a/test/mock_pkg_resource.erl
+++ b/test/mock_pkg_resource.erl
@@ -152,7 +152,7 @@ find_parts([{AppName, Deps}|Rest], Skip, Acc) ->
end.
to_graph_parts(Dict) ->
- LastUpdated = now(),
+ LastUpdated = os:timestamp(),
dict:fold(fun(K,V,{Ks,Vs}) ->
{_,Deps} = lists:keyfind(<<"deps">>, 1, V),
{[{K,LastUpdated}|Ks],
diff --git a/test/rebar_compile_SUITE.erl b/test/rebar_compile_SUITE.erl
index ee262a1..bdab075 100644
--- a/test/rebar_compile_SUITE.erl
+++ b/test/rebar_compile_SUITE.erl
@@ -19,7 +19,8 @@
delete_beam_if_source_deleted/1,
checkout_priority/1,
compile_plugins/1,
- highest_version_of_pkg_dep/1]).
+ highest_version_of_pkg_dep/1,
+ parse_transform_test/1]).
-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl").
@@ -46,7 +47,8 @@ all() ->
build_all_srcdirs, recompile_when_hrl_changes,
recompile_when_opts_change, dont_recompile_when_opts_dont_change,
dont_recompile_yrl_or_xrl, delete_beam_if_source_deleted,
- deps_in_path, checkout_priority, compile_plugins, highest_version_of_pkg_dep].
+ deps_in_path, checkout_priority, compile_plugins, highest_version_of_pkg_dep,
+ parse_transform_test].
build_basic_app(Config) ->
AppDir = ?config(apps, Config),
@@ -449,3 +451,24 @@ highest_version_of_pkg_dep(Config) ->
Config, RConf, ["compile"],
{ok, [{app, Name}, {dep, PkgName, <<"0.1.3">>}]}
).
+
+parse_transform_test(Config) ->
+ AppDir = ?config(apps, Config),
+
+ RebarConfig = [{erl_opts, [{parse_transform, pascal}]}],
+
+ 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]),
+
+ ExtraSrc = <<"-module(pascal). "
+ "-export([parse_transform/2]). "
+ "parse_transform(Forms, _Options) -> "
+ "Forms.">>,
+
+ ok = file:write_file(filename:join([AppDir, "src", "pascal.erl"]), ExtraSrc),
+
+ rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"], {ok, [{app, Name}]}),
+
+ EbinDir = filename:join([AppDir, "_build", "default", "lib", Name, "ebin"]),
+ true = filelib:is_file(filename:join([EbinDir, "pascal.beam"])).
diff --git a/test/rebar_ct_SUITE.erl b/test/rebar_ct_SUITE.erl
index 3c4aed3..0a86127 100644
--- a/test/rebar_ct_SUITE.erl
+++ b/test/rebar_ct_SUITE.erl
@@ -16,7 +16,8 @@
single_unmanaged_suite/1,
multi_suite/1,
all_suite/1,
- single_dir_and_single_suite/1]).
+ single_dir_and_single_suite/1,
+ symlinked_dir_overwritten_fix/1]).
-include_lib("common_test/include/ct.hrl").
@@ -36,7 +37,8 @@ groups() -> [{basic_app, [], [basic_app_default_dirs,
single_unmanaged_suite,
multi_suite,
all_suite,
- single_dir_and_single_suite]}].
+ single_dir_and_single_suite,
+ symlinked_dir_overwritten_fix]}].
init_per_group(basic_app, Config) ->
C = rebar_test_utils:init_rebar_state(Config, "ct_"),
@@ -513,6 +515,36 @@ single_dir_and_single_suite(Config) ->
Expect = Suite.
+symlinked_dir_overwritten_fix(Config) ->
+ AppDir = ?config(apps, Config),
+ [Name1, _Name2] = ?config(appnames, Config),
+
+ {ok, State} = rebar_test_utils:run_and_check(Config, [], ["as", "test", "compile"], return),
+
+ LibDirs = rebar_dir:lib_dirs(State),
+ State1 = rebar_app_discover:do(State, LibDirs),
+
+ Providers = rebar_state:providers(State1),
+ Namespace = rebar_state:namespace(State1),
+ CommandProvider = providers:get_provider(ct, Providers, Namespace),
+ GetOptSpec = providers:opts(CommandProvider),
+ {ok, GetOptResult} = getopt:parse(GetOptSpec,
+ ["--dir=" ++ filename:join([AppDir,
+ "apps",
+ Name1])]),
+
+ State2 = rebar_state:command_parsed_args(State1, GetOptResult),
+
+ Result = rebar_prv_common_test:setup_ct(State2),
+
+ Expect = filename:absname(filename:join([AppDir, "_build", "test", "lib", Name1])),
+ Dir = proplists:get_value(dir, Result),
+
+ Expect = Dir,
+
+ {ok, _} = rebar_test_utils:run_and_check(Config, [], ["as", "test", "compile"], return).
+
+
test_suite(Name) ->
io_lib:format("-module(~ts_SUITE).\n"
"-compile(export_all).\n"
diff --git a/test/rebar_erlydtl_SUITE.erl b/test/rebar_erlydtl_SUITE.erl
deleted file mode 100644
index c9054fd..0000000
--- a/test/rebar_erlydtl_SUITE.erl
+++ /dev/null
@@ -1,72 +0,0 @@
-%% -*- erlang-indent-level: 4;indent-tabs-mode: nil -*-
-%% ex: ts=4 sw=4 et
--module(rebar_erlydtl_SUITE).
-
--export([suite/0,
- init_per_suite/1,
- end_per_suite/1,
- init_per_testcase/2,
- end_per_testcase/2,
- all/0,
- compile/1]).
-
--include_lib("common_test/include/ct.hrl").
--include_lib("eunit/include/eunit.hrl").
--include_lib("kernel/include/file.hrl").
-
-%% ===================================================================
-%% common_test callbacks
-%% ===================================================================
-
-suite() ->
- [].
-
-init_per_suite(Config) ->
- Config.
-
-end_per_suite(_Config) ->
- ok.
-
-
-init_per_testcase(_, Config) ->
- UpdConfig = rebar_test_utils:init_rebar_state(Config),
- AppDir = ?config(apps, UpdConfig),
-
- Name = rebar_test_utils:create_random_name("erlydtlapp_"),
- Vsn = rebar_test_utils:create_random_vsn(),
- rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
-
- write_dtl_file(AppDir, Name),
-
- RebarConfig = [{erl_opts, [debug_info]},
- {erlydtl_opts, []}],
- [{app_name, Name},
- {rebar_config, RebarConfig} | UpdConfig].
-
-end_per_testcase(_, _Config) ->
- ok.
-
-all() ->
- [compile].
-
-compile(Config) ->
- AppDir = ?config(apps, Config),
- AppName = ?config(app_name, Config),
- RebarConfig = ?config(rebar_config, Config),
- Beam = beam_file(AppDir, AppName),
- rebar_test_utils:run_and_check(
- Config, RebarConfig, ["erlydtl", "compile"],
- {ok, [{file, Beam}]}
- ).
-
-beam_file(AppDir, AppName) ->
- filename:join([AppDir, "_build", "default", "lib",
- AppName, "ebin", AppName++"_template_dtl.beam"]).
-
-write_dtl_file(Dir, AppName) ->
- Erl = filename:join([Dir, "priv", "templates", AppName++"_template.dtl"]),
- ok = filelib:ensure_dir(Erl),
- ok = ec_file:write(Erl, get_body()).
-
-get_body() ->
- ["[]"].
diff --git a/test/rebar_profiles_SUITE.erl b/test/rebar_profiles_SUITE.erl
index 2d03432..b42df39 100644
--- a/test/rebar_profiles_SUITE.erl
+++ b/test/rebar_profiles_SUITE.erl
@@ -7,11 +7,16 @@
all/0,
profile_new_key/1,
profile_merge_keys/1,
+ explicit_profile_deduplicate_deps/1,
+ implicit_profile_deduplicate_deps/1,
all_deps_code_paths/1,
profile_merges/1,
+ same_profile_deduplication/1,
+ stack_deduplication/1,
add_to_profile/1,
add_to_existing_profile/1,
profiles_remain_applied_with_config_present/1,
+ deduplicated_paths/1,
test_profile_applied_at_completion/1,
test_profile_applied_before_compile/1,
test_profile_applied_before_eunit/1,
@@ -23,8 +28,11 @@
all() ->
[profile_new_key, profile_merge_keys, all_deps_code_paths, profile_merges,
+ explicit_profile_deduplicate_deps, implicit_profile_deduplicate_deps,
+ same_profile_deduplication, stack_deduplication,
add_to_profile, add_to_existing_profile,
profiles_remain_applied_with_config_present,
+ deduplicated_paths,
test_profile_applied_at_completion,
test_profile_applied_before_compile,
test_profile_applied_before_eunit,
@@ -96,6 +104,66 @@ profile_merge_keys(Config) ->
,{dep, "a", "1.0.0"}
,{dep, "b", "2.0.0"}]}).
+explicit_profile_deduplicate_deps(Config) ->
+ AppDir = ?config(apps, Config),
+
+ AllDeps = rebar_test_utils:expand_deps(git, [{"a", "1.0.0", []}
+ ,{"a", "2.0.0", []}
+ ,{"b", "1.0.0", []}
+ ,{"b", "2.0.0", []}]),
+ mock_git_resource:mock([{deps, rebar_test_utils:flat_deps(AllDeps)}]),
+
+ Name = rebar_test_utils:create_random_name("explicit_profile_deduplicate_deps_"),
+ Vsn = rebar_test_utils:create_random_vsn(),
+ rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
+
+ FooDeps = rebar_test_utils:top_level_deps(
+ rebar_test_utils:expand_deps(git, [{"a", "1.0.0", []},
+ {"b", "2.0.0", []}])),
+ BarDeps = rebar_test_utils:top_level_deps(
+ rebar_test_utils:expand_deps(git, [{"b", "1.0.0", []}])),
+
+ RebarConfig = [{profiles,
+ [{foo,
+ [{deps, FooDeps}]},
+ {bar,
+ [{deps, BarDeps}]}]}],
+
+ rebar_test_utils:run_and_check(Config, RebarConfig,
+ ["as", "bar,foo,bar", "compile"], {ok, [{app, Name}
+ ,{dep, "a", "1.0.0"}
+ ,{dep, "b", "1.0.0"}]}).
+
+implicit_profile_deduplicate_deps(Config) ->
+ AppDir = ?config(apps, Config),
+
+ AllDeps = rebar_test_utils:expand_deps(git, [{"a", "1.0.0", []}
+ ,{"a", "2.0.0", []}
+ ,{"b", "1.0.0", []}
+ ,{"b", "2.0.0", []}]),
+ mock_git_resource:mock([{deps, rebar_test_utils:flat_deps(AllDeps)}]),
+
+ Name = rebar_test_utils:create_random_name("implicit_profile_deduplicate_deps_"),
+ Vsn = rebar_test_utils:create_random_vsn(),
+ rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
+
+ TestDeps = rebar_test_utils:top_level_deps(
+ rebar_test_utils:expand_deps(git, [{"a", "1.0.0", []},
+ {"b", "2.0.0", []}])),
+ ProfileDeps = rebar_test_utils:top_level_deps(
+ rebar_test_utils:expand_deps(git, [{"b", "1.0.0", []}])),
+
+ RebarConfig = [{profiles,
+ [{test,
+ [{deps, TestDeps}]},
+ {bar,
+ [{deps, ProfileDeps}]}]}],
+
+ rebar_test_utils:run_and_check(Config, RebarConfig,
+ ["as", "test,bar", "eunit"], {ok, [{app, Name}
+ ,{dep, "a", "1.0.0"}
+ ,{dep, "b", "2.0.0"}]}).
+
all_deps_code_paths(Config) ->
AppDir = ?config(apps, Config),
@@ -162,6 +230,72 @@ profile_merges(_Config) ->
[{key5, false}, {key5, true}] = rebar_state:get(State1, test5),
[{key6, true}, {key6, false}] = rebar_state:get(State1, test6).
+same_profile_deduplication(_Config) ->
+ RebarConfig = [{test1, [{key1, 1, 2}, key2]},
+ {test2, [foo]},
+ {test3, [key3]},
+ {profiles,
+ [{profile1,
+ [{test1, [{key3, 5}, {key2, "hello"}]},
+ {test2, [bar]},
+ {test3, []}
+ ]}]
+ }],
+ State = rebar_state:new(RebarConfig),
+ State1 = rebar_state:apply_profiles(State, [profile1, profile1, profile1]),
+
+ ?assertEqual([default, profile1], rebar_state:current_profiles(State1)),
+ Test1 = rebar_state:get(State1, test1),
+
+ %% Combine lists
+ ?assertEqual(lists:sort([key2, {key1, 1, 2}, {key3, 5}, {key2, "hello"}]),
+ lists:sort(Test1)),
+
+ %% Key2 from profile1 overrides key2 from default profile
+ ?assertEqual("hello", proplists:get_value(key2, Test1)),
+
+ %% Check that a newvalue of []/"" doesn't override non-string oldvalues
+ ?assertEqual([key3], rebar_state:get(State1, test3)),
+ ?assertEqual([bar, foo], rebar_state:get(State1, test2)).
+
+stack_deduplication(_Config) ->
+ RebarConfig = [
+ {test_key, default},
+ {test_list, [ {foo, default} ]},
+ {profiles, [
+ {a, [
+ {test_key, a},
+ {test_list, [ {foo, a} ]}
+ ]},
+ {b, [
+ {test_key, b},
+ {test_list, [ {foo, b} ]}
+ ]},
+ {c, [
+ {test_key, c},
+ {test_list, [ {foo, c} ]}
+ ]},
+ {d, [
+ {test_key, d},
+ {test_list, [ {foo, d} ]}
+ ]},
+ {e, [
+ {test_key, e},
+ {test_list, [ {foo, e} ]}
+ ]}
+ ]}
+ ],
+ State = rebar_state:new(RebarConfig),
+ State1 = rebar_state:apply_profiles(State, [a, b, c, d, e, a, e, b]),
+ ?assertEqual(b, rebar_state:get(State1, test_key)),
+
+ TestList = rebar_state:get(State1, test_list),
+ ?assertEqual(
+ [{foo, b}, {foo, e}, {foo, a}, {foo, d}, {foo, c}, {foo, default} ],
+ TestList
+ ),
+ ?assertEqual(b, proplists:get_value(foo, TestList)).
+
add_to_profile(_Config) ->
RebarConfig = [{foo, true}, {bar, false}],
State = rebar_state:new(RebarConfig),
@@ -205,6 +339,22 @@ profiles_remain_applied_with_config_present(Config) ->
true = lists:member({d, not_ok}, proplists:get_value(options, Mod:module_info(compile), [])).
+deduplicated_paths(Config) ->
+ AppDir = ?config(apps, Config),
+
+ Name = rebar_test_utils:create_random_name("deduplicated_paths_"),
+ Vsn = rebar_test_utils:create_random_vsn(),
+ rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
+
+ RebarConfig = [],
+ rebar_test_utils:create_config(AppDir, RebarConfig),
+ rebar_test_utils:run_and_check(Config, RebarConfig,
+ ["as", "a,b,c,d,e,a,e,b", "compile"],
+ {ok, [{app, Name}]}),
+
+ Path = filename:join([AppDir, "_build", "c+d+a+e+b", "lib", Name, "ebin"]),
+ ?assert(filelib:is_dir(Path)).
+
test_profile_applied_at_completion(Config) ->
AppDir = ?config(apps, Config),
diff --git a/test/rebar_test_utils.erl b/test/rebar_test_utils.erl
index f764146..2cdc58b 100644
--- a/test/rebar_test_utils.erl
+++ b/test/rebar_test_utils.erl
@@ -104,12 +104,12 @@ create_config(AppDir, Contents) ->
%% @doc Util to create a random variation of a given name.
create_random_name(Name) ->
- random:seed(erlang:now()),
+ random:seed(os:timestamp()),
Name ++ erlang:integer_to_list(random:uniform(1000000)).
%% @doc Util to create a random variation of a given version.
create_random_vsn() ->
- random:seed(erlang:now()),
+ random:seed(os:timestamp()),
lists:flatten([erlang:integer_to_list(random:uniform(100)),
".", erlang:integer_to_list(random:uniform(100)),
".", erlang:integer_to_list(random:uniform(100))]).