1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
-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).
|