rebar/inttest/depplugins/depplugins_rt.erl
Tuncer Ayaz 77a0eb6fe4 Fix #56 (always-on recursion)
Always-on recursive application of all rebar commands causes too many
issues. Recursive application is required for:
1. dealing with dependencies: get-deps, update-deps, and compile of deps
   right after get-deps or update-deps
2. projects with a riak-like apps/ project structure and dev process

The vast majority of projects are not structured like riak. Therefore,
moving forward it's best to (by default) restrict recursive behavior to
dealing with deps. This commit does that and also adds command line and
rebar.config options for controlling or configuring recursion. Also, we
introduce two meta commands: prepare-deps (equivalent to rebar -r
get-deps compile) and refresh-deps (equivalent to rebar -r update-deps
compile). riak-like projects can extend the list of recursive commands
(to include 'eunit' and 'compile') by adding
{recursive_cmds, [eunit, compile]} to rebar.config.
2014-03-11 21:11:36 +00:00

69 lines
2.4 KiB
Erlang

%%% @doc Plugin handling test
%%%
%%% This test checks if plugins are loaded correctly.
%%%
%%% It has three applications:
%%% <ol>
%%% <li>fish. top-level app, has one dependency: `dependsonplugin'.
%%% It also loads a plugin from CWD which creates
%%% base_dir_cwd_pre.compile on pre_compile.</li>
%%% <li>dependsonplugin, has one dependency: `testplugin' and loads
%%% the testplugin_mod plugin.</li>
%%% <li>testplugin. This is a plugin application which creates
%%% plugin_pre.compile on pre_compile. It also loads a plugin from CWD
%%% which creates dep_cwd_pre.compile on pre_compile.</li>
%%% </ol>
-module(depplugins_rt).
-compile(export_all).
-include_lib("eunit/include/eunit.hrl").
files() ->
[
{copy, "../../rebar", "rebar"},
{copy, "rebar.config", "rebar.config"},
{copy, "base_dir_cwd_plugin.erl", "base_dir_cwd_plugin.erl"},
{create, "ebin/fish.app", app(fish, [])},
{copy, "rebar_dependsonplugin.config",
"deps/dependsonplugin/rebar.config"},
{create, "deps/dependsonplugin/ebin/dependsonplugin.app",
app(dependsonplugin, [])},
{copy, "rebar_testplugin.config", "deps/testplugin/rebar.config"},
{copy, "testplugin_mod.erl",
"deps/testplugin/plugins/testplugin_mod.erl"},
{copy, "dep_cwd_plugin.erl", "deps/testplugin/dep_cwd_plugin.erl"},
{create, "deps/testplugin/ebin/testplugin.app", app(testplugin, [])}
].
run(_Dir) ->
?assertMatch({ok, _}, retest_sh:run("./rebar -r compile", [])),
?assertEqual(true, filelib:is_regular("base_dir_cwd_pre.compile")),
?assertEqual(true, filelib:is_regular(
"deps/dependsonplugin/base_dir_cwd_pre.compile")),
?assertEqual(true, filelib:is_regular(
"deps/dependsonplugin/plugin_pre.compile")),
?assertEqual(true, filelib:is_regular(
"deps/testplugin/base_dir_cwd_pre.compile")),
?assertEqual(true, filelib:is_regular(
"deps/testplugin/dep_cwd_pre.compile")),
?assertEqual(true, filelib:is_regular(
"deps/testplugin/plugin_pre.compile")),
ok.
%%
%% Generate the contents of a simple .app file
%%
app(Name, Modules) ->
App = {application, Name,
[{description, atom_to_list(Name)},
{vsn, "1"},
{modules, Modules},
{registered, []},
{applications, [kernel, stdlib]}]},
io_lib:format("~p.\n", [App]).