Ver código fonte

Merge pull request #442 from tsloughter/tests_replace_paths

purge loaded code when it conflicts with project apps in tests
pull/447/merge
Tristan Sloughter 10 anos atrás
pai
commit
8c6af888b2
4 arquivos alterados com 24 adições e 4 exclusões
  1. +1
    -0
      .gitignore
  2. +2
    -2
      src/rebar_prv_common_test.erl
  3. +3
    -2
      src/rebar_prv_eunit.erl
  4. +18
    -0
      src/rebar_utils.erl

+ 1
- 0
.gitignore Ver arquivo

@ -1,3 +1,4 @@
.rebar3
rebar3 rebar3
_build _build
.depsolver_plt .depsolver_plt

+ 2
- 2
src/rebar_prv_common_test.erl Ver arquivo

@ -38,7 +38,7 @@ init(State) ->
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) -> do(State) ->
?INFO("Running Common Test suites...", []), ?INFO("Running Common Test suites...", []),
code:add_pathsa(rebar_state:code_paths(State, all_deps)),
rebar_utils:update_code(rebar_state:code_paths(State, all_deps)),
%% Run ct provider prehooks %% Run ct provider prehooks
Providers = rebar_state:providers(State), Providers = rebar_state:providers(State),
@ -49,7 +49,7 @@ do(State) ->
{ok, State1} = Result -> {ok, State1} = Result ->
%% Run ct provider posthooks %% Run ct provider posthooks
rebar_hooks:run_all_hooks(Cwd, post, ?PROVIDER, Providers, State1), rebar_hooks:run_all_hooks(Cwd, post, ?PROVIDER, Providers, State1),
rebar_utils:cleanup_code_path(rebar_state:code_paths(State1, default)),
rebar_utils:cleanup_code_path(rebar_state:code_paths(State, default)),
Result; Result;
?PRV_ERROR(_) = Error -> ?PRV_ERROR(_) = Error ->
rebar_utils:cleanup_code_path(rebar_state:code_paths(State, default)), rebar_utils:cleanup_code_path(rebar_state:code_paths(State, default)),

+ 3
- 2
src/rebar_prv_eunit.erl Ver arquivo

@ -37,7 +37,8 @@ init(State) ->
-spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}. -spec do(rebar_state:t()) -> {ok, rebar_state:t()} | {error, string()}.
do(State) -> do(State) ->
?INFO("Performing EUnit tests...", []), ?INFO("Performing EUnit tests...", []),
code:add_pathsa(rebar_state:code_paths(State, all_deps)),
rebar_utils:update_code(rebar_state:code_paths(State, all_deps)),
%% Run eunit provider prehooks %% Run eunit provider prehooks
Providers = rebar_state:providers(State), Providers = rebar_state:providers(State),
Cwd = rebar_dir:get_cwd(), Cwd = rebar_dir:get_cwd(),
@ -49,7 +50,7 @@ do(State) ->
{ok, State1} -> {ok, State1} ->
%% Run eunit provider posthooks %% Run eunit provider posthooks
rebar_hooks:run_all_hooks(Cwd, post, ?PROVIDER, Providers, State1), rebar_hooks:run_all_hooks(Cwd, post, ?PROVIDER, Providers, State1),
rebar_utils:cleanup_code_path(rebar_state:code_paths(State1, default)),
rebar_utils:cleanup_code_path(rebar_state:code_paths(State, default)),
{ok, State1}; {ok, State1};
Error -> Error ->
rebar_utils:cleanup_code_path(rebar_state:code_paths(State, default)), rebar_utils:cleanup_code_path(rebar_state:code_paths(State, default)),

+ 18
- 0
src/rebar_utils.erl Ver arquivo

@ -47,6 +47,7 @@
deprecated/4, deprecated/4,
erl_opts/1, erl_opts/1,
indent/1, indent/1,
update_code/1,
cleanup_code_path/1, cleanup_code_path/1,
args_to_tasks/1, args_to_tasks/1,
expand_env_variable/3, expand_env_variable/3,
@ -563,6 +564,23 @@ filter_defines([Opt | Rest], Acc) ->
indent(Amount) when erlang:is_integer(Amount) -> indent(Amount) when erlang:is_integer(Amount) ->
[?ONE_LEVEL_INDENT || _ <- lists:seq(1, Amount)]. [?ONE_LEVEL_INDENT || _ <- lists:seq(1, Amount)].
%% Replace code paths with new paths for existing apps and
%% purge code of the old modules from those apps.
update_code(Paths) ->
lists:foreach(fun(Path) ->
Name = filename:basename(Path, "/ebin"),
App = list_to_atom(Name),
application:load(App),
case application:get_key(App, modules) of
undefined ->
code:add_patha(Path),
ok;
{ok, Modules} ->
code:replace_path(Name, Path),
[begin code:purge(M), code:delete(M) end || M <- Modules]
end
end, Paths).
cleanup_code_path(OrigPath) -> cleanup_code_path(OrigPath) ->
CurrentPath = code:get_path(), CurrentPath = code:get_path(),
AddedPaths = CurrentPath -- OrigPath, AddedPaths = CurrentPath -- OrigPath,

Carregando…
Cancelar
Salvar