summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/rebar_prv_common_test.erl74
1 files changed, 51 insertions, 23 deletions
diff --git a/src/rebar_prv_common_test.erl b/src/rebar_prv_common_test.erl
index 9565926..fe2a8f6 100644
--- a/src/rebar_prv_common_test.erl
+++ b/src/rebar_prv_common_test.erl
@@ -62,8 +62,8 @@ run_test(State, RawOpts, CTOpts) ->
end.
-spec format_error(any()) -> iolist().
-format_error({failures_running_tests, FailedCount}) ->
- io_lib:format("Failures occured running tests: ~p", [FailedCount]);
+format_error({failures_running_tests, {Failed, AutoSkipped}}) ->
+ io_lib:format("Failures occured running tests: ~b", [Failed+AutoSkipped]);
format_error({error_running_tests, Reason}) ->
io_lib:format("Error running tests: ~p", [Reason]);
format_error({error_processing_options, Reason}) ->
@@ -400,28 +400,56 @@ maybe_cover_compile(State, Opts) ->
end,
rebar_prv_cover:maybe_cover_compile(State1).
-handle_results([Result]) ->
+handle_results(Results) when is_list(Results) ->
+ Result = lists:foldl(fun sum_results/2, {0, 0, {0,0}}, Results),
handle_results(Result);
-handle_results([Result|Results]) when is_list(Results) ->
- case handle_results(Result) of
- ok ->
- handle_results(Results);
- Error ->
- Error
- end;
+handle_results({_, Failed, {_, AutoSkipped}})
+ when Failed > 0 orelse AutoSkipped > 0 ->
+ {error, {failures_running_tests, {Failed, AutoSkipped}}};
handle_results({error, Reason}) ->
{error, {error_running_tests, Reason}};
-handle_results(_) -> ok.
-
-handle_quiet_results(_, {Passed, 0, {0, 0}}) ->
- io:format(" All ~p tests passed.~n", [Passed]);
-handle_quiet_results(_, {Passed, 0, {UserSkipped, AutoSkipped}}) ->
- io:format(" All ~p tests passed. Skipped ~p tests.~n",
- [Passed, UserSkipped + AutoSkipped]);
-handle_quiet_results(CTOpts, {_, Failed, _}) ->
- LogDir = proplists:get_value(logdir, CTOpts),
- Index = filename:join([LogDir, "index.html"]),
- io:format(" ~p tests failed.~n Results written to ~p.~n", [Failed, Index]);
-handle_quiet_results(_CTOpts, {'DOWN', _, _, _, Reason}) ->
+handle_results(_) ->
+ ok.
+
+sum_results({Passed, Failed, {UserSkipped, AutoSkipped}},
+ {Passed2, Failed2, {UserSkipped2, AutoSkipped2}}) ->
+ {Passed+Passed2, Failed+Failed2,
+ {UserSkipped+UserSkipped2, AutoSkipped+AutoSkipped2}}.
+
+handle_quiet_results(_, {error, _} = Result) ->
+ handle_results(Result);
+handle_quiet_results(_, {'DOWN', _, _, _, Reason}) ->
handle_results({error, Reason});
-handle_quiet_results(_CTOpts, Result) -> handle_results(Result).
+handle_quiet_results(CTOpts, Results) when is_list(Results) ->
+ _ = [format_result(Result) || Result <- Results],
+ case handle_results(Results) of
+ {error, {failures_running_tests, _}} = Error ->
+ LogDir = proplists:get_value(logdir, CTOpts),
+ Index = filename:join([LogDir, "index.html"]),
+ ?CONSOLE("Results written to ~p.", [Index]),
+ Error;
+ Other ->
+ Other
+ end;
+handle_quiet_results(CTOpts, Result) ->
+ handle_quiet_results(CTOpts, [Result]).
+
+format_result({Passed, 0, {0, 0}}) ->
+ ?CONSOLE("All ~p tests passed.", [Passed]);
+format_result({Passed, Failed, Skipped}) ->
+ Format = [format_failed(Failed), format_skipped(Skipped),
+ format_passed(Passed)],
+ ?CONSOLE("~s", [Format]).
+
+format_failed(0) ->
+ [];
+format_failed(Failed) ->
+ io_lib:format("Failed ~p tests. ", [Failed]).
+
+format_passed(Passed) ->
+ io_lib:format("Passed ~p tests. ", [Passed]).
+
+format_skipped({0, 0}) ->
+ [];
+format_skipped({User, Auto}) ->
+ io_lib:format("Skipped ~p (~p, ~p) tests. ", [User+Auto, User, Auto]).