diff options
author | Tristan Sloughter <t@crashfast.com> | 2015-11-05 18:19:46 -0600 |
---|---|---|
committer | Tristan Sloughter <t@crashfast.com> | 2015-11-05 18:19:46 -0600 |
commit | d5d9eb852d522b4cf040a88523ad803b53c33f8d (patch) | |
tree | 9280351bdaf28182eb97a4b51ecb928f24c3cc6f | |
parent | f02ec399850ca40c75d66ff690c6edf005189c9a (diff) | |
parent | 0461729fd923f01796510f93f03ad6c848e6c73e (diff) |
Merge pull request #907 from talentdeficit/ct_coverage_fix
calculate coverage info as late as possible in ct provider execution
-rw-r--r-- | src/rebar_prv_common_test.erl | 7 | ||||
-rw-r--r-- | test/rebar_ct_SUITE.erl | 38 |
2 files changed, 40 insertions, 5 deletions
diff --git a/src/rebar_prv_common_test.erl b/src/rebar_prv_common_test.erl index 7a088e5..977a5f6 100644 --- a/src/rebar_prv_common_test.erl +++ b/src/rebar_prv_common_test.erl @@ -77,11 +77,12 @@ run_tests(State, Opts) -> Opts2 = turn_off_auto_compile(Opts1), ?DEBUG("ct_opts ~p", [Opts2]), {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); false -> run_test_quiet(Opts2) - end. + end, + ok = maybe_write_coverdata(State), + Result. -spec format_error(any()) -> iolist(). format_error({error, Reason}) -> diff --git a/test/rebar_ct_SUITE.erl b/test/rebar_ct_SUITE.erl index ac016b1..c4fc4dc 100644 --- a/test/rebar_ct_SUITE.erl +++ b/test/rebar_ct_SUITE.erl @@ -39,7 +39,8 @@ cfg_opts/1, cfg_arbitrary_opts/1, cfg_test_spec_filtered/1, - cfg_atom_suites/1]). + cfg_atom_suites/1, + cover_compiled/1]). -include_lib("common_test/include/ct.hrl"). @@ -48,6 +49,7 @@ all() -> [{group, basic_app}, {group, dirs_and_suites}, {group, data_dirs}, {group, ct_opts}, + {group, cover}, cfg_opts, cfg_arbitrary_opts, cfg_test_spec_filtered, cfg_atom_suites]. @@ -83,7 +85,8 @@ groups() -> [{basic_app, [], [basic_app_default_dirs, cmd_abort_if_missing_suites, cmd_multiply_timetraps, cmd_scale_timetraps, - cmd_create_priv_dir]}]. + cmd_create_priv_dir]}, + {cover, [], [cover_compiled]}]. init_per_group(basic_app, Config) -> 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), [{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. end_per_group(_Group, _Config) -> ok. @@ -930,6 +945,25 @@ cfg_atom_suites(Config) -> 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 test_suite(Name) -> io_lib:format("-module(~ts_SUITE).\n" |