Browse Source

calculate coverage info as late as possible in ct provider execution

pull/907/head
alisdair sullivan 9 years ago
parent
commit
0461729fd9
2 changed files with 40 additions and 5 deletions
  1. +4
    -3
      src/rebar_prv_common_test.erl
  2. +36
    -2
      test/rebar_ct_SUITE.erl

+ 4
- 3
src/rebar_prv_common_test.erl View File

@ -77,11 +77,12 @@ run_tests(State, Opts) ->
Opts2 = turn_off_auto_compile(Opts1), Opts2 = turn_off_auto_compile(Opts1),
?DEBUG("ct_opts ~p", [Opts2]), ?DEBUG("ct_opts ~p", [Opts2]),
{RawOpts, _} = rebar_state:command_parsed_args(State), {RawOpts, _} = rebar_state:command_parsed_args(State),
ok = maybe_write_coverdata(State),
case proplists:get_value(verbose, RawOpts, false) of
Result = case proplists:get_value(verbose, RawOpts, false) of
true -> run_test_verbose(Opts2); true -> run_test_verbose(Opts2);
false -> run_test_quiet(Opts2) false -> run_test_quiet(Opts2)
end.
end,
ok = maybe_write_coverdata(State),
Result.
-spec format_error(any()) -> iolist(). -spec format_error(any()) -> iolist().
format_error({error, Reason}) -> format_error({error, Reason}) ->

+ 36
- 2
test/rebar_ct_SUITE.erl View File

@ -39,7 +39,8 @@
cfg_opts/1, cfg_opts/1,
cfg_arbitrary_opts/1, cfg_arbitrary_opts/1,
cfg_test_spec_filtered/1, cfg_test_spec_filtered/1,
cfg_atom_suites/1]).
cfg_atom_suites/1,
cover_compiled/1]).
-include_lib("common_test/include/ct.hrl"). -include_lib("common_test/include/ct.hrl").
@ -48,6 +49,7 @@ all() -> [{group, basic_app},
{group, dirs_and_suites}, {group, dirs_and_suites},
{group, data_dirs}, {group, data_dirs},
{group, ct_opts}, {group, ct_opts},
{group, cover},
cfg_opts, cfg_arbitrary_opts, cfg_opts, cfg_arbitrary_opts,
cfg_test_spec_filtered, cfg_test_spec_filtered,
cfg_atom_suites]. cfg_atom_suites].
@ -83,7 +85,8 @@ groups() -> [{basic_app, [], [basic_app_default_dirs,
cmd_abort_if_missing_suites, cmd_abort_if_missing_suites,
cmd_multiply_timetraps, cmd_multiply_timetraps,
cmd_scale_timetraps, cmd_scale_timetraps,
cmd_create_priv_dir]}].
cmd_create_priv_dir]},
{cover, [], [cover_compiled]}].
init_per_group(basic_app, Config) -> init_per_group(basic_app, Config) ->
C = rebar_test_utils:init_rebar_state(Config, "ct_"), C = rebar_test_utils:init_rebar_state(Config, "ct_"),
@ -183,6 +186,18 @@ init_per_group(ct_opts, Config) ->
{ok, State} = rebar_test_utils:run_and_check(C, [], ["as", "test", "lock"], return), {ok, State} = rebar_test_utils:run_and_check(C, [], ["as", "test", "lock"], return),
[{result, State}|C]; [{result, State}|C];
init_per_group(cover, Config) ->
C = rebar_test_utils:init_rebar_state(Config, "ct_opts"),
AppDir = ?config(apps, C),
Name = rebar_test_utils:create_random_name("ct_opts_"),
Vsn = rebar_test_utils:create_random_vsn(),
rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]),
{ok, State} = rebar_test_utils:run_and_check(C, [], ["as", "test", "lock"], return),
[{result, State}, {name, Name}|C];
init_per_group(_, Config) -> Config. init_per_group(_, Config) -> Config.
end_per_group(_Group, _Config) -> ok. end_per_group(_Group, _Config) -> ok.
@ -930,6 +945,25 @@ cfg_atom_suites(Config) ->
true = lists:member({suite, ["foo", "bar", "baz"]}, TestOpts). true = lists:member({suite, ["foo", "bar", "baz"]}, TestOpts).
cover_compiled(Config) ->
State = ?config(result, Config),
Providers = rebar_state:providers(State),
Namespace = rebar_state:namespace(State),
CommandProvider = providers:get_provider(ct, Providers, Namespace),
GetOptSpec = providers:opts(CommandProvider),
{ok, GetOptResult} = getopt:parse(GetOptSpec, ["--cover"]),
NewState = rebar_state:command_parsed_args(State, GetOptResult),
Tests = rebar_prv_common_test:prepare_tests(NewState),
{ok, _} = rebar_prv_common_test:compile(NewState, Tests),
Name = ?config(name, Config),
Mod = list_to_atom(Name),
{file, _} = cover:is_compiled(Mod).
%% helper for generating test data %% helper for generating test data
test_suite(Name) -> test_suite(Name) ->
io_lib:format("-module(~ts_SUITE).\n" io_lib:format("-module(~ts_SUITE).\n"

Loading…
Cancel
Save