summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.hgignore1
-rw-r--r--priv/templates/simplefsm.erl55
-rw-r--r--priv/templates/simplefsm.template2
-rw-r--r--priv/templates/simplemod.erl10
-rw-r--r--priv/templates/simplemod.template3
-rw-r--r--priv/templates/simplemod_tests.erl3
-rw-r--r--priv/templates/simplesrv.erl49
-rw-r--r--priv/templates/simplesrv.template2
-rw-r--r--src/rebar_eunit.erl39
9 files changed, 161 insertions, 3 deletions
diff --git a/.hgignore b/.hgignore
index ad6143a..684e0cb 100644
--- a/.hgignore
+++ b/.hgignore
@@ -2,3 +2,4 @@
^rebar$
.~
\.orig
+\.swp
diff --git a/priv/templates/simplefsm.erl b/priv/templates/simplefsm.erl
new file mode 100644
index 0000000..039532c
--- /dev/null
+++ b/priv/templates/simplefsm.erl
@@ -0,0 +1,55 @@
+-module({{fsmid}}).
+-behaviour(gen_fsm).
+-define(SERVER, ?MODULE).
+
+%% ------------------------------------------------------------------
+%% API Function Exports
+%% ------------------------------------------------------------------
+
+-export([start_link/0]).
+
+%% ------------------------------------------------------------------
+%% gen_fsm Function Exports
+%% ------------------------------------------------------------------
+
+-export([init/1, state_name/2, state_name/3, handle_event/3, handle_sync_event/4, handle_info/3, terminate/3, code_change/4]).
+
+%% ------------------------------------------------------------------
+%% API Function Definitions
+%% ------------------------------------------------------------------
+
+start_link() ->
+ gen_fsm:start_link({local, ?SERVER}, ?MODULE, [], []).
+
+%% ------------------------------------------------------------------
+%% gen_fsm Function Definitions
+%% ------------------------------------------------------------------
+
+init(_Args) ->
+ {ok, initial_state_name, initial_state}.
+
+state_name(_Event, State) ->
+ {next_state, state_name, State}.
+
+state_name(_Event, _From, State) ->
+ {reply, ok, state_name, State}.
+
+handle_event(_Event, StateName, State) ->
+ {next_state, StateName, State}.
+
+handle_sync_event(_Event, _From, StateName, State) ->
+ {reply, ok, StateName, State}.
+
+handle_info(_Info, StateName, State) ->
+ {next_state, StateName, State}.
+
+terminate(_Reason, _StateName, _State) ->
+ ok.
+
+code_change(_OldVsn, StateName, State, _Extra) ->
+ {ok, StateName, State}.
+
+%% ------------------------------------------------------------------
+%% Internal Function Definitions
+%% ------------------------------------------------------------------
+
diff --git a/priv/templates/simplefsm.template b/priv/templates/simplefsm.template
new file mode 100644
index 0000000..edb6f56
--- /dev/null
+++ b/priv/templates/simplefsm.template
@@ -0,0 +1,2 @@
+{variables, [{fsmid, "myfsm"}]}.
+{file, "simplefsm.erl", "src/{{fsmid}}.erl"}.
diff --git a/priv/templates/simplemod.erl b/priv/templates/simplemod.erl
new file mode 100644
index 0000000..2baff59
--- /dev/null
+++ b/priv/templates/simplemod.erl
@@ -0,0 +1,10 @@
+-module({{modid}}).
+
+-export([my_func/0]).
+
+-ifdef(TEST).
+-compile(export_all).
+-endif.
+
+my_func() ->
+ ok.
diff --git a/priv/templates/simplemod.template b/priv/templates/simplemod.template
new file mode 100644
index 0000000..1de8cd0
--- /dev/null
+++ b/priv/templates/simplemod.template
@@ -0,0 +1,3 @@
+{variables, [{modid, "mymod"}]}.
+{file, "simplemod.erl", "src/{{modid}}.erl"}.
+{file, "simplemod_tests.erl", "test/{{modid}}_tests.erl"}.
diff --git a/priv/templates/simplemod_tests.erl b/priv/templates/simplemod_tests.erl
new file mode 100644
index 0000000..c5ca0bb
--- /dev/null
+++ b/priv/templates/simplemod_tests.erl
@@ -0,0 +1,3 @@
+-module({{modid}}_tests).
+-include_lib("eunit/include/eunit.hrl").
+
diff --git a/priv/templates/simplesrv.erl b/priv/templates/simplesrv.erl
new file mode 100644
index 0000000..8db932e
--- /dev/null
+++ b/priv/templates/simplesrv.erl
@@ -0,0 +1,49 @@
+-module({{srvid}}).
+-behaviour(gen_server).
+-define(SERVER, ?MODULE).
+
+%% ------------------------------------------------------------------
+%% API Function Exports
+%% ------------------------------------------------------------------
+
+-export([start_link/0]).
+
+%% ------------------------------------------------------------------
+%% gen_server Function Exports
+%% ------------------------------------------------------------------
+
+-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
+
+%% ------------------------------------------------------------------
+%% API Function Definitions
+%% ------------------------------------------------------------------
+
+start_link() ->
+ gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
+
+%% ------------------------------------------------------------------
+%% gen_server Function Definitions
+%% ------------------------------------------------------------------
+
+init(Args) ->
+ {ok, Args}.
+
+handle_call(_Request, _From, State) ->
+ {noreply, ok, State}.
+
+handle_cast(_Msg, State) ->
+ {noreply, State}.
+
+handle_info(_Info, State) ->
+ {noreply, State}.
+
+terminate(_Reason, _State) ->
+ ok.
+
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+%% ------------------------------------------------------------------
+%% Internal Function Definitions
+%% ------------------------------------------------------------------
+
diff --git a/priv/templates/simplesrv.template b/priv/templates/simplesrv.template
new file mode 100644
index 0000000..e72dd25
--- /dev/null
+++ b/priv/templates/simplesrv.template
@@ -0,0 +1,2 @@
+{variables, [{srvid, "myserver"}]}.
+{file, "simplesrv.erl", "src/{{srvid}}.erl"}.
diff --git a/src/rebar_eunit.erl b/src/rebar_eunit.erl
index d51c35d..4c280e9 100644
--- a/src/rebar_eunit.erl
+++ b/src/rebar_eunit.erl
@@ -58,9 +58,13 @@ eunit(Config, _File) ->
%% Make sure ?EUNIT_DIR/ directory exists (tack on dummy module)
ok = filelib:ensure_dir(?EUNIT_DIR ++ "/foo"),
+ %% grab all the test modules for inclusion in the compile stage
+ TestErls = rebar_utils:find_files("test", ".*\\.erl\$"),
+
%% Compile erlang code to ?EUNIT_DIR, using a tweaked config
- %% with appropriate defines for eunit
- rebar_erlc_compiler:doterl_compile(eunit_config(Config), ?EUNIT_DIR),
+ %% with appropriate defines for eunit, and include all the test modules
+ %% as well.
+ rebar_erlc_compiler:doterl_compile(eunit_config(Config), ?EUNIT_DIR, TestErls),
%% Build a list of all the .beams in ?EUNIT_DIR -- use this for cover
%% and eunit testing. Normally you can just tell cover and/or eunit to
@@ -68,7 +72,36 @@ eunit(Config, _File) ->
%% with that scan and causes any cover compilation info to be lost. So,
%% we do it by hand. :(
%%
- Modules = [rebar_utils:beam_to_mod(?EUNIT_DIR, N) || N <- rebar_utils:beams(?EUNIT_DIR)],
+ %% TODO: Not currently compatible with package modules
+ Beams = [filename:basename(N, ".beam") || N <- rebar_utils:beams(?EUNIT_DIR)],
+
+ %% Grab two lists of test and non-test beam files
+ {TestBeams, ModuleBeams} = lists:partition(fun(B) ->
+ lists:suffix("_tests", B) end, Beams),
+
+ case rebar_config:get_global(suite, undefined) of
+ undefined ->
+ %% no suite defined, so include all modules
+ RealModules = ModuleBeams,
+
+ %% exclude any test modules that have a matching module
+ TestModules = [T || T <- TestBeams,
+ lists:member(string:left(T, length(T) - 6), RealModules) == false];
+ SuiteName ->
+ %% suite defined, so only specify the module that relates to the
+ %% suite (if any)
+ RealModules = [M || M <- ModuleBeams, SuiteName =:= M],
+
+ %% only include the test suite if the main module doesn't exist
+ TestModules = case length(RealModules) of
+ 0 -> [T || T <- TestBeams, T =:= SuiteName ++ "_tests"];
+ _ -> []
+ end
+ end,
+
+ %% combine the modules and associated test modules into the resulting list
+ %% of modules to run tests on.
+ Modules = [list_to_atom(M) || M <- RealModules ++ TestModules],
%% TODO: If there are other wildcards specified in eunit_sources, compile them