summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorFred Hebert <mononcqc@ferd.ca>2014-12-23 12:32:58 -0500
committerFred Hebert <mononcqc@ferd.ca>2014-12-23 12:32:58 -0500
commitcd6281043111ed9fd189dd1af1f9f8a756eb3093 (patch)
treeb2af067090c3e8153257cd04ce262f9ed7abed86 /test
parente81e6d2e31bf59e2f5ecd25c5f7c2f7a8dafd4e2 (diff)
parentd25838ff69e3c99cce96cb4e21055eef9e85aa06 (diff)
Merge pull request #72 from rebar/template-tests-subdirs
Add support for custom templates in subdirectories
Diffstat (limited to 'test')
-rw-r--r--test/rebar_new_SUITE.erl59
-rw-r--r--test/rebar_new_SUITE_data/.rebar3/templates/app/LICENSE.dtl29
-rw-r--r--test/rebar_new_SUITE_data/.rebar3/templates/app/README.md.dtl9
-rw-r--r--test/rebar_new_SUITE_data/.rebar3/templates/app/app.erl.dtl27
-rw-r--r--test/rebar_new_SUITE_data/.rebar3/templates/app/gitignore.dtl18
-rw-r--r--test/rebar_new_SUITE_data/.rebar3/templates/app/otp_app.app.src.dtl12
-rw-r--r--test/rebar_new_SUITE_data/.rebar3/templates/app/rebar.config.dtl2
-rw-r--r--test/rebar_new_SUITE_data/.rebar3/templates/app/sup.erl.dtl35
-rw-r--r--test/rebar_new_SUITE_data/.rebar3/templates/app/test_app.template12
9 files changed, 203 insertions, 0 deletions
diff --git a/test/rebar_new_SUITE.erl b/test/rebar_new_SUITE.erl
new file mode 100644
index 0000000..62a26af
--- /dev/null
+++ b/test/rebar_new_SUITE.erl
@@ -0,0 +1,59 @@
+%%% This suite can't run tests for built-in templates because
+%%% they require being escriptize and we currently don't support
+%%% this in here!
+-module(rebar_new_SUITE).
+-compile(export_all).
+-include_lib("common_test/include/ct.hrl").
+-include_lib("eunit/include/eunit.hrl").
+
+all() -> [app].
+
+
+init_per_testcase(Case, Config0) ->
+ Config = rebar_test_utils:init_rebar_state(Config0),
+ Name = rebar_test_utils:create_random_name(atom_to_list(Case)),
+ Data = ?config(data_dir, Config),
+ mock_home_dir(Data),
+ mock_empty_escript_templates(),
+ [{name, Name} | Config].
+
+end_per_testcase(_, Config) ->
+ meck:unload(),
+ Config.
+
+mock_home_dir(Path) ->
+ meck:new(rebar_dir, [passthrough]),
+ meck:expect(rebar_dir, home_dir, fun() -> Path end).
+
+mock_empty_escript_templates() ->
+ %% Can't find escript templates unless we run
+ %% from the escript, which obviously crashes these here tests.
+ meck:new(rebar_utils, [passthrough]),
+ meck:expect(rebar_utils, escript_foldl, fun(_,_,_) -> {ok, []} end).
+
+app(Config) ->
+ Name = ?config(name, Config),
+ rebar_test_utils:run_and_check(
+ Config, [],
+ ["new", "test_app", Name, "author_name=some_name"],
+ {ok, []}
+ ),
+ validate_files(
+ Config, Name,
+ [{"LICENSE", ["some_name", "anonymous@example.org"]},
+ {"README.md", [Name]},
+ {".gitignore", []},
+ {"rebar.config", []},
+ {filename:join(["src", Name++".app.src"]), [Name]},
+ {filename:join(["src", Name++"_sup.erl"]), [Name]},
+ {filename:join(["src", Name++"_app.erl"]), [Name]}
+ ]).
+
+validate_files(_Config, Name, Checks) ->
+ [begin
+ Path = filename:join([Name, File]),
+ {ok, Bin} = file:read_file(Path),
+ [{match, _} = re:run(Bin, Pattern, [multiline,global])
+ || Pattern <- Patterns]
+ end || {File, Patterns} <- Checks],
+ ok.
diff --git a/test/rebar_new_SUITE_data/.rebar3/templates/app/LICENSE.dtl b/test/rebar_new_SUITE_data/.rebar3/templates/app/LICENSE.dtl
new file mode 100644
index 0000000..41588ab
--- /dev/null
+++ b/test/rebar_new_SUITE_data/.rebar3/templates/app/LICENSE.dtl
@@ -0,0 +1,29 @@
+Copyright (c) {{copyright_year}}, {{author_name}} <{{author_email}}>.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+* Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+* The names of its contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/test/rebar_new_SUITE_data/.rebar3/templates/app/README.md.dtl b/test/rebar_new_SUITE_data/.rebar3/templates/app/README.md.dtl
new file mode 100644
index 0000000..5507536
--- /dev/null
+++ b/test/rebar_new_SUITE_data/.rebar3/templates/app/README.md.dtl
@@ -0,0 +1,9 @@
+{{name}}
+=====
+
+{{desc}}
+
+Build
+-----
+
+ $ rebar3 compile
diff --git a/test/rebar_new_SUITE_data/.rebar3/templates/app/app.erl.dtl b/test/rebar_new_SUITE_data/.rebar3/templates/app/app.erl.dtl
new file mode 100644
index 0000000..83eb9a3
--- /dev/null
+++ b/test/rebar_new_SUITE_data/.rebar3/templates/app/app.erl.dtl
@@ -0,0 +1,27 @@
+%%%-------------------------------------------------------------------
+%% @doc {{name}} public API
+%% @end
+%%%-------------------------------------------------------------------
+
+-module({{name}}_app).
+
+-behaviour(application).
+
+%% Application callbacks
+-export([start/2
+ ,stop/1]).
+
+%%====================================================================
+%% API
+%%====================================================================
+
+start(_StartType, _StartArgs) ->
+ {{name}}_sup:start_link().
+
+%%--------------------------------------------------------------------
+stop(_State) ->
+ ok.
+
+%%====================================================================
+%% Internal functions
+%%====================================================================
diff --git a/test/rebar_new_SUITE_data/.rebar3/templates/app/gitignore.dtl b/test/rebar_new_SUITE_data/.rebar3/templates/app/gitignore.dtl
new file mode 100644
index 0000000..40a1d4f
--- /dev/null
+++ b/test/rebar_new_SUITE_data/.rebar3/templates/app/gitignore.dtl
@@ -0,0 +1,18 @@
+.rebar3
+_*
+.eunit
+*.o
+*.beam
+*.plt
+*.swp
+*.swo
+.erlang.cookie
+ebin
+log
+erl_crash.dump
+.rebar
+_rel
+_deps
+_plugins
+_tdeps
+logs
diff --git a/test/rebar_new_SUITE_data/.rebar3/templates/app/otp_app.app.src.dtl b/test/rebar_new_SUITE_data/.rebar3/templates/app/otp_app.app.src.dtl
new file mode 100644
index 0000000..5188f56
--- /dev/null
+++ b/test/rebar_new_SUITE_data/.rebar3/templates/app/otp_app.app.src.dtl
@@ -0,0 +1,12 @@
+{application, {{name}},
+ [{description, "{{desc}}"}
+ ,{vsn, "0.1.0"}
+ ,{registered, []}
+ ,{mod, {'{{name}}_app', []}}
+ ,{applications,
+ [kernel
+ ,stdlib
+ ]}
+ ,{env,[]}
+ ,{modules, []}
+ ]}.
diff --git a/test/rebar_new_SUITE_data/.rebar3/templates/app/rebar.config.dtl b/test/rebar_new_SUITE_data/.rebar3/templates/app/rebar.config.dtl
new file mode 100644
index 0000000..f618f3e
--- /dev/null
+++ b/test/rebar_new_SUITE_data/.rebar3/templates/app/rebar.config.dtl
@@ -0,0 +1,2 @@
+{erl_opts, [debug_info]}.
+{deps, []}. \ No newline at end of file
diff --git a/test/rebar_new_SUITE_data/.rebar3/templates/app/sup.erl.dtl b/test/rebar_new_SUITE_data/.rebar3/templates/app/sup.erl.dtl
new file mode 100644
index 0000000..a2e7209
--- /dev/null
+++ b/test/rebar_new_SUITE_data/.rebar3/templates/app/sup.erl.dtl
@@ -0,0 +1,35 @@
+%%%-------------------------------------------------------------------
+%% @doc {{name}} top level supervisor.
+%% @end
+%%%-------------------------------------------------------------------
+
+-module({{name}}_sup).
+
+-behaviour(supervisor).
+
+%% API
+-export([start_link/0]).
+
+%% Supervisor callbacks
+-export([init/1]).
+
+-define(SERVER, ?MODULE).
+
+%%====================================================================
+%% API functions
+%%====================================================================
+
+start_link() ->
+ supervisor:start_link({local, ?SERVER}, ?MODULE, []).
+
+%%====================================================================
+%% Supervisor callbacks
+%%====================================================================
+
+%% Child :: {Id,StartFunc,Restart,Shutdown,Type,Modules}
+init([]) ->
+ {ok, { {one_for_all, 0, 1}, []} }.
+
+%%====================================================================
+%% Internal functions
+%%====================================================================
diff --git a/test/rebar_new_SUITE_data/.rebar3/templates/app/test_app.template b/test/rebar_new_SUITE_data/.rebar3/templates/app/test_app.template
new file mode 100644
index 0000000..b17e30c
--- /dev/null
+++ b/test/rebar_new_SUITE_data/.rebar3/templates/app/test_app.template
@@ -0,0 +1,12 @@
+{description, "OTP Application"}.
+{variables, [
+ {name, "mylib", "Name of the OTP application"},
+ {desc, "An OTP application", "Short description of the app"}
+]}.
+{template, "app.erl.dtl", "{{name}}/src/{{name}}_app.erl"}.
+{template, "sup.erl.dtl", "{{name}}/src/{{name}}_sup.erl"}.
+{template, "otp_app.app.src.dtl", "{{name}}/src/{{name}}.app.src"}.
+{template, "rebar.config.dtl", "{{name}}/rebar.config"}.
+{template, "gitignore.dtl", "{{name}}/.gitignore"}.
+{template, "LICENSE.dtl", "{{name}}/LICENSE"}.
+{template, "README.md.dtl", "{{name}}/README.md"}.