Переглянути джерело

add support for a bare `test` directory when using `apps` libdirs

pull/88/head
alisdair sullivan 10 роки тому
джерело
коміт
16c31097c2
2 змінених файлів з 50 додано та 9 видалено
  1. +26
    -2
      src/rebar_prv_common_test.erl
  2. +24
    -7
      src/rebar_prv_eunit.erl

+ 26
- 2
src/rebar_prv_common_test.erl Переглянути файл

@ -51,6 +51,7 @@ do(State) ->
TestState = test_state(S, InDirs, OutDir),
ok = rebar_erlc_compiler:compile(TestState, AppDir)
end, TestApps),
ok = maybe_compile_extra_tests(TestApps, State, InDirs, OutDir),
Path = code:get_path(),
true = code:add_patha(OutDir),
CTOpts = resolve_ct_opts(State, Opts, OutDir),
@ -283,10 +284,17 @@ test_state(State, InDirs, OutDir) ->
ErlOpts = rebar_state:get(State, common_test_compile_opts, []) ++
rebar_utils:erl_opts(State),
TestOpts = [{outdir, OutDir}] ++
[{src_dirs, ["src", "test"] ++ InDirs}] ++
ErlOpts,
add_test_dir(ErlOpts, InDirs),
first_files(rebar_state:set(State, erl_opts, TestOpts)).
add_test_dir(Opts, InDirs) ->
%% if no src_dirs are set we have to specify `src` or it won't
%% be built
case proplists:append_values(src_dirs, Opts) of
[] -> [{src_dirs, ["src", "test"|InDirs]}];
_ -> [{src_dirs, ["test"|InDirs]}]
end.
first_files(State) ->
BaseFirst = rebar_state:get(State, erl_first_files, []),
CTFirst = rebar_state:get(State, common_test_first_files, []),
@ -302,6 +310,22 @@ resolve_ct_opts(State, CmdLineOpts, OutDir) ->
%% and disable `auto_compile`
[{auto_compile, false}, {dir, OutDir}] ++ lists:keydelete(dir, 1, Opts).
maybe_compile_extra_tests(TestApps, State, InDirs, OutDir) ->
F = fun(App) -> rebar_app_info:dir(App) == rebar_dir:get_cwd() end,
case lists:filter(F, TestApps) of
%% compile just the `test` and extra test directories of the base dir
[] ->
ErlOpts = rebar_state:get(State, common_test_compile_opts, []) ++
rebar_utils:erl_opts(State),
TestOpts = [{outdir, OutDir}] ++
[{src_dirs, ["test"|InDirs]}] ++
lists:keydelete(src_dirs, 1, ErlOpts),
TestState = first_files(rebar_state:set(State, erl_opts, TestOpts)),
rebar_erlc_compiler:compile(TestState, rebar_dir:get_cwd());
%% already compiled `./test` so do nothing
_ -> ok
end.
handle_results([Result]) ->
handle_results(Result);
handle_results([Result|Results]) when is_list(Results) ->

+ 24
- 7
src/rebar_prv_eunit.erl Переглянути файл

@ -51,9 +51,10 @@ do(State) ->
%% combine `erl_first_files` and `eunit_first_files` and adjust
%% compile opts to include `eunit_compile_opts`, `{d, 'TEST'}`
%% and `{src_dirs, "test"}`
TestState = first_files(test_opts(S, OutDir)),
TestState = first_files(test_state(S, OutDir)),
ok = rebar_erlc_compiler:compile(TestState, AppDir)
end, TestApps),
ok = maybe_compile_extra_tests(TestApps, State, OutDir),
Path = code:get_path(),
true = code:add_patha(OutDir),
EUnitOpts = resolve_eunit_opts(State, Opts),
@ -104,12 +105,12 @@ filter_checkouts([App|Rest], Acc) ->
false -> filter_checkouts(Rest, [App|Acc])
end.
test_opts(State, TmpDir) ->
test_state(State, TmpDir) ->
ErlOpts = rebar_state:get(State, eunit_compile_opts, []) ++
rebar_utils:erl_opts(State),
TestOpts = [{outdir, TmpDir}] ++
add_test_dir(ErlOpts) ++
safe_define_test_macro(ErlOpts),
ErlOpts1 = [{outdir, TmpDir}] ++
add_test_dir(ErlOpts),
TestOpts = safe_define_test_macro(ErlOpts1),
rebar_state:set(State, erl_opts, TestOpts).
add_test_dir(Opts) ->
@ -117,8 +118,8 @@ add_test_dir(Opts) ->
%% be built
case proplists:append_values(src_dirs, Opts) of
[] -> [{src_dirs, ["src", "test"]}];
_ -> [{src_dirs, ["test"]}]
end.
Srcs -> [{src_dirs, ["test"|Srcs]}]
end ++ lists:keydelete(src_dirs, 1, Opts).
safe_define_test_macro(Opts) ->
%% defining a compile macro twice results in an exception so
@ -151,6 +152,22 @@ set_verbose(Opts) ->
false -> [verbose] ++ Opts
end.
maybe_compile_extra_tests(TestApps, State, OutDir) ->
F = fun(App) -> rebar_app_info:dir(App) == rebar_dir:get_cwd() end,
case lists:filter(F, TestApps) of
%% compile just the `test` and extra test directories of the base dir
[] ->
ErlOpts = rebar_state:get(State, common_test_compile_opts, []) ++
rebar_utils:erl_opts(State),
TestOpts = [{outdir, OutDir}] ++
[{src_dirs, ["test"]}] ++
safe_define_test_macro(lists:keydelete(src_dirs, 1, ErlOpts)),
TestState = first_files(rebar_state:set(State, erl_opts, TestOpts)),
rebar_erlc_compiler:compile(TestState, rebar_dir:get_cwd());
%% already compiled `./test` so do nothing
_ -> ok
end.
handle_results(ok) -> ok;
handle_results(error) ->
{error, unknown_error};

Завантаження…
Відмінити
Зберегти