summaryrefslogtreecommitdiff
path: root/src/rebar_ct.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/rebar_ct.erl')
-rw-r--r--src/rebar_ct.erl70
1 files changed, 49 insertions, 21 deletions
diff --git a/src/rebar_ct.erl b/src/rebar_ct.erl
index 8f7c71a..a66bdce 100644
--- a/src/rebar_ct.erl
+++ b/src/rebar_ct.erl
@@ -141,32 +141,57 @@ make_cmd(TestDir, Config) ->
CodeDirs = [io_lib:format("\"~s\"", [Dir]) ||
Dir <- [EbinDir|NonLibCodeDirs]],
CodePathString = string:join(CodeDirs, " "),
- Cmd = ?FMT("erl " % should we expand ERL_PATH?
- " -noshell -pa ~s ~s"
- " -s ct_run script_start -s erlang halt"
- " -name test@~s"
- " -logdir \"~s\""
- " -env TEST_DIR \"~s\"",
- [CodePathString,
- Include,
- net_adm:localhost(),
- LogDir,
- filename:join(Cwd, TestDir)]) ++
- get_cover_config(Config, Cwd) ++
- get_ct_config_file(TestDir) ++
- get_config_file(TestDir) ++
- get_suite(TestDir) ++
- get_case(),
+ Cmd = case get_ct_specs(Cwd) of
+ undefined ->
+ ?FMT("erl " % should we expand ERL_PATH?
+ " -noshell -pa ~s ~s"
+ " -s ct_run script_start -s erlang halt"
+ " -name test@~s"
+ " -logdir \"~s\""
+ " -env TEST_DIR \"~s\"",
+ [CodePathString,
+ Include,
+ net_adm:localhost(),
+ LogDir,
+ filename:join(Cwd, TestDir)]) ++
+ get_cover_config(Config, Cwd) ++
+ get_ct_config_file(TestDir) ++
+ get_config_file(TestDir) ++
+ get_suite(TestDir) ++
+ get_case();
+ SpecFlags ->
+ ?FMT("erl " % should we expand ERL_PATH?
+ " -noshell -pa ~s ~s"
+ " -s ct_run script_start -s erlang halt"
+ " -name test@~s"
+ " -logdir \"~s\""
+ " -env TEST_DIR \"~s\"",
+ [CodePathString,
+ Include,
+ net_adm:localhost(),
+ LogDir,
+ filename:join(Cwd, TestDir)]) ++
+ SpecFlags ++ get_cover_config(Config, Cwd)
+ end,
RawLog = filename:join(LogDir, "raw.log"),
{Cmd, RawLog}.
+get_ct_specs(Cwd) ->
+ case collect_glob(Cwd, ".*\.test\.spec\$") of
+ [] -> undefined;
+ [Spec] ->
+ " -spec " ++ Spec;
+ Specs ->
+ " -spec " ++
+ lists:flatten([io_lib:format("~s ", [Spec]) || Spec <- Specs])
+ end.
+
get_cover_config(Config, Cwd) ->
case rebar_config:get_local(Config, cover_enabled, false) of
false ->
"";
true ->
- case filelib:fold_files(Cwd, ".*cover\.spec\$",
- true, fun collect_ct_specs/2, []) of
+ case collect_glob(Cwd, ".*cover\.spec\$") of
[] ->
?DEBUG("No cover spec found: ~s~n", [Cwd]),
"";
@@ -178,15 +203,18 @@ get_cover_config(Config, Cwd) ->
end
end.
-collect_ct_specs(F, Acc) ->
+collect_glob(Cwd, Glob) ->
+ filelib:fold_files(Cwd, Glob, true, fun collect_files/2, []).
+
+collect_files(F, Acc) ->
%% Ignore any specs under the deps/ directory. Do this pulling
%% the dirname off the the F and then splitting it into a list.
Parts = filename:split(filename:dirname(F)),
case lists:member("deps", Parts) of
true ->
- Acc; % There is a directory named "deps" in path
+ Acc; % There is a directory named "deps" in path
false ->
- [F | Acc] % No "deps" directory in path
+ [F | Acc] % No "deps" directory in path
end.
get_ct_config_file(TestDir) ->