-module(all_SUITE). -include_lib("common_test/include/ct.hrl"). -include_lib("eunit/include/eunit.hrl"). -compile([export_all, nowarn_export_all]). init_per_suite(Config) -> %% TODO: figure out how to use a local rebar3 copy? %% Ensure global rebar3 has the same version as current one! {ok, Vsn} = application:get_key(rebar, vsn), {ok, ExecVsn} = rebar3("version", [{path, "."} | Config]), case rebar_string:lexemes(ExecVsn, " ") of ["rebar", Vsn | _] -> %% Copy all base cases to priv_dir rebar_file_utils:cp_r([?config(data_dir, Config)], ?config(priv_dir, Config)), Config; _ -> {skip, "expected current version "++Vsn++" in path " "and found '"++ ExecVsn ++ "'"} end. end_per_suite(Config) -> Config. init_per_testcase(Name, Config) -> set_name_config(Name, Config). end_per_testcase(_Name, Config) -> Config. all() -> [noop, resource_plugins, alias_clash, grisp_explode, compile_deps]. %groups() -> % [{plugins, [shuffle], []}, % {deps, [shuffle], []}]. %%%%%%%%%%%%%%%%%% %%% TEST CASES %%% %%%%%%%%%%%%%%%%%% noop() -> [{doc, "just a sanity check on the handling of the test suite init/end"}]. noop(_Config) -> true. resource_plugins() -> [{doc, "Issue #1673: " "Ensure that deps using resource plugins with semver compile."}]. resource_plugins(Config) -> %% When the environment handling is wrong, the run fails violently. {ok, Output} = rebar3("compile", Config), ct:pal("Rebar3 Output:~n~s",[Output]), ok. alias_clash() -> [{doc, "checking that the provider won't get plugin interference."}, {timetrap, 10000}]. alias_clash(Config) -> {ok, Help} = rebar3("help", Config), % should be redefined, but by the plugin ?assertNotEqual(nomatch, re:run(Help, "Alias help is already the name of a command[a-z ]+and will be ignored") ), {ok, Output} = rebar3("test", Config, [{env, [{"DEBUG", "1"}]}]), ?assertNotEqual(nomatch, re:run(Output, "cover summary written to:")), ?assertNotEqual(nomatch, re:run(Output, "Not adding provider default test from module rebar_prv_alias_test " "because it already exists from module rebar_prv_alias_test")), ok. grisp_explode() -> [{doc, "Don't force purge a plugin that runs the compile job itself"}]. grisp_explode(Config) -> %% When the purge handling is wrong, the run fails violently. {error, {_,Output}} = rebar3("grisp deploy -n robot -v 0.1.0", Config), ct:pal("Rebar3 Output:~n~s",[Output]), ?assertNotEqual(nomatch, re:run(Output, "No releases exist in the system for robot:0.1.0!") ), ok. compile_deps() -> [{doc, "When compiling a project multiple times, the deps should always be built event if refetched"}]. compile_deps(Config) -> rebar3("compile", Config), rebar3("compile", Config), PrivDir = ?config(path, Config), EbinDir = filename:join([PrivDir, "_build", "default", "lib", "fake_dep", "ebin"]), {ok, Beams} = file:list_dir(EbinDir), ?assert(length(Beams) > 1). %%%%%%%%%%%%%%% %%% Helpers %%% %%%%%%%%%%%%%%% set_name_config(Atom, Config) -> [{path, filename:join([?config(priv_dir, Config), atom_to_list(?MODULE)++"_data", atom_to_list(Atom)])} | Config]. rebar3(Args, Config) -> rebar3(Args, Config, []). rebar3(Args, Config, UserOpts) -> Exec = case os:type() of {win32, _} -> "rebar3.cmd"; _ -> "rebar3" end, Cmd = Exec ++ " " ++ Args, Opts = [{cd, ?config(path, Config)}, return_on_error, use_stdout | UserOpts], ct:pal("Calling rebar3 ~s with options ~p", [Cmd, Opts]), rebar_utils:sh(Cmd, Opts).