Added support for the speficiation of test suite names

eg.  rebar eunit              -- runs all tests in all modules
     rebar eunit suite=foo    -- only runs tests in foo.erl/foo_tests.erl

Added an entry to .hgignore to avoid .swp files (created by VIM).
This commit is contained in:
OJ Reeves 2010-02-03 22:27:09 +10:00
parent 6c359a08cd
commit 71c974e341
2 changed files with 36 additions and 4 deletions

View file

@ -2,3 +2,4 @@
^rebar$ ^rebar$
.~ .~
\.orig \.orig
\.swp

View file

@ -51,9 +51,13 @@ eunit(Config, _File) ->
%% Make sure ?EUNIT_DIR/ directory exists (tack on dummy module) %% Make sure ?EUNIT_DIR/ directory exists (tack on dummy module)
ok = filelib:ensure_dir(?EUNIT_DIR ++ "/foo"), 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 %% Compile erlang code to ?EUNIT_DIR, using a tweaked config
%% with appropriate defines for eunit %% with appropriate defines for eunit, and include all the test modules
rebar_erlc_compiler:doterl_compile(eunit_config(Config), ?EUNIT_DIR), %% 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 %% 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 %% and eunit testing. Normally you can just tell cover and/or eunit to
@ -62,8 +66,35 @@ eunit(Config, _File) ->
%% we do it by hand. :( %% we do it by hand. :(
%% %%
%% TODO: Not currently compatible with package modules %% TODO: Not currently compatible with package modules
Modules = [list_to_atom(filename:basename(N, ".beam")) || Beams = [filename:basename(N, ".beam") || N <- filelib:wildcard("*.beam", ?EUNIT_DIR)],
N <- filelib:wildcard("*.beam", ?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 %% TODO: If there are other wildcards specified in eunit_sources, compile them