summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Reid <dreid@dreid.org>2011-08-03 11:28:33 -0700
committerDavid Reid <dreid@dreid.org>2011-08-05 10:04:14 -0700
commit0edf52b5399baf68fbb158c9cb7d9ca06010d8f7 (patch)
tree71e8b6a4eb96e1c1a9137e5df4ee31e0269c584f
parent3e4138537f089c8c1a5e5f9173603569aa012eca (diff)
Redirect cover module output to .eunit/cover.log
The cover module calls io:format and io:fwrite directly for several types of informational messages and warnings. When using meck to mock covered modules these warnings are triggered and can cause severe polution of the test output. We can avoid this by starting cover explicitly then setting the group_leader of that process to a file handle.
-rw-r--r--src/rebar_eunit.erl25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/rebar_eunit.erl b/src/rebar_eunit.erl
index 8f7c682..ad56a34 100644
--- a/src/rebar_eunit.erl
+++ b/src/rebar_eunit.erl
@@ -128,10 +128,13 @@ eunit(Config, AppFile) ->
Modules = [rebar_utils:beam_to_mod(?EUNIT_DIR, N) || N <- BeamFiles],
SrcModules = [rebar_utils:erl_to_mod(M) || M <- SrcErls],
- cover_init(Config, BeamFiles),
+ {ok, CoverLog} = cover_init(Config, BeamFiles),
+
EunitResult = perform_eunit(Config, Modules),
perform_cover(Config, Modules, SrcModules),
+ cover_close(CoverLog),
+
case EunitResult of
ok ->
ok;
@@ -275,9 +278,25 @@ cover_analyze(Config, Modules, SrcModules) ->
ok
end.
-cover_init(false, _BeamFiles) ->
+cover_close(not_enabled) ->
ok;
+cover_close(F) ->
+ ok = file:close(F).
+
+cover_init(false, _BeamFiles) ->
+ {ok, not_enabled};
cover_init(true, BeamFiles) ->
+ %% Attempt to start the cover server, then set it's group leader to
+ %% .eunit/cover.log, so all cover log messages will go there instead of
+ %% to stdout.
+ {_,CoverPid} = cover:start(),
+
+ {ok, F} = file:open(
+ filename:join([?EUNIT_DIR, "cover.log"]),
+ [write]),
+
+ group_leader(F, CoverPid),
+
%% Make sure any previous runs of cover don't unduly influence
cover:reset(),
@@ -300,7 +319,7 @@ cover_init(true, BeamFiles) ->
[Beam, Desc])
end,
_ = [PrintWarning(Beam, Desc) || {Beam, {error, Desc}} <- Compiled],
- ok
+ {ok, F}
end;
cover_init(Config, BeamFiles) ->
cover_init(rebar_config:get(Config, cover_enabled, false), BeamFiles).