diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/mock_pkg_resource.erl | 2 | ||||
-rw-r--r-- | test/rebar_compile_SUITE.erl | 27 | ||||
-rw-r--r-- | test/rebar_ct_SUITE.erl | 36 | ||||
-rw-r--r-- | test/rebar_erlydtl_SUITE.erl | 72 | ||||
-rw-r--r-- | test/rebar_profiles_SUITE.erl | 150 | ||||
-rw-r--r-- | test/rebar_test_utils.erl | 4 |
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))]). |