diff options
Diffstat (limited to 'test/rebar_ct_SUITE.erl')
-rw-r--r-- | test/rebar_ct_SUITE.erl | 90 |
1 files changed, 78 insertions, 12 deletions
diff --git a/test/rebar_ct_SUITE.erl b/test/rebar_ct_SUITE.erl index 94ab690..1da7571 100644 --- a/test/rebar_ct_SUITE.erl +++ b/test/rebar_ct_SUITE.erl @@ -6,8 +6,10 @@ end_per_group/2]). -export([basic_app_default_dirs/1, basic_app_default_beams/1, + basic_app_ct_macro/1, multi_app_default_dirs/1, multi_app_default_beams/1, + multi_app_ct_macro/1, single_app_dir/1, single_extra_dir/1, single_unmanaged_dir/1, @@ -38,9 +40,11 @@ cmd_multiply_timetraps/1, cmd_scale_timetraps/1, cmd_create_priv_dir/1, + cmd_include_dir/1, cfg_opts/1, cfg_arbitrary_opts/1, cfg_test_spec/1, + cfg_cover_spec/1, cfg_atom_suites/1, cover_compiled/1, misspecified_ct_opts/1, @@ -56,16 +60,18 @@ all() -> [{group, basic_app}, {group, ct_opts}, {group, cover}, cfg_opts, cfg_arbitrary_opts, - cfg_test_spec, + cfg_test_spec, cfg_cover_spec, cfg_atom_suites, misspecified_ct_opts, misspecified_ct_compile_opts, misspecified_ct_first_files]. groups() -> [{basic_app, [], [basic_app_default_dirs, - basic_app_default_beams]}, + basic_app_default_beams, + basic_app_ct_macro]}, {multi_app, [], [multi_app_default_dirs, - multi_app_default_beams]}, + multi_app_default_beams, + multi_app_ct_macro]}, {dirs_and_suites, [], [single_app_dir, single_extra_dir, single_unmanaged_dir, @@ -95,7 +101,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, + cmd_include_dir]}, {cover, [], [cover_compiled]}]. init_per_group(basic_app, Config) -> @@ -118,7 +125,7 @@ init_per_group(basic_app, Config) -> {ok, T} = Tests, Opts = rebar_prv_common_test:translate_paths(NewState, T), - [{result, Opts}, {appnames, [Name]}|C]; + [{result, Opts}, {appnames, [Name]}, {compile_state, NewState}|C]; init_per_group(multi_app, Config) -> C = rebar_test_utils:init_rebar_state(Config, "ct_"), @@ -153,7 +160,7 @@ init_per_group(multi_app, Config) -> {ok, T} = Tests, Opts = rebar_prv_common_test:translate_paths(NewState, T), - [{result, Opts}, {appnames, [Name1, Name2]}|C]; + [{result, Opts}, {appnames, [Name1, Name2]}, {compile_state, NewState}|C]; init_per_group(dirs_and_suites, Config) -> C = rebar_test_utils:init_rebar_state(Config, "ct_"), @@ -211,7 +218,7 @@ init_per_group(ct_opts, Config) -> {ok, State} = rebar_test_utils:run_and_check(C, [], ["as", "test", "lock"], return), - [{result, State}|C]; + [{result, State}, {name, Name}|C]; init_per_group(cover, Config) -> C = rebar_test_utils:init_rebar_state(Config, "ct_opts"), @@ -252,6 +259,15 @@ basic_app_default_beams(Config) -> true = filelib:is_file(File). +basic_app_ct_macro(Config) -> + State = ?config(compile_state, Config), + + [App] = rebar_state:project_apps(State), + Opts = rebar_app_info:opts(App), + ErlOpts = dict:fetch(erl_opts, Opts), + true = lists:member({d, 'COMMON_TEST'}, ErlOpts). + + multi_app_default_dirs(Config) -> AppDir = ?config(apps, Config), [Name1, Name2] = ?config(appnames, Config), @@ -293,6 +309,16 @@ multi_app_default_beams(Config) -> true = filelib:is_file(File2), true = filelib:is_file(File3). +multi_app_ct_macro(Config) -> + State = ?config(compile_state, Config), + + Apps = rebar_state:project_apps(State), + lists:foreach(fun(App) -> + Opts = rebar_app_info:opts(App), + ErlOpts = dict:fetch(erl_opts, Opts), + true = lists:member({d, 'COMMON_TEST'}, ErlOpts) + end, Apps). + single_app_dir(Config) -> AppDir = ?config(apps, Config), [Name1, _Name2] = ?config(appnames, Config), @@ -700,7 +726,6 @@ suite_at_app_root(Config) -> data_dir_correct(Config) -> DataDir = ?config(data_dir, Config), Parts = filename:split(DataDir), - ct:pal(Parts), ["rebar_ct_SUITE_data","test","rebar","lib","test","_build"|_] = lists:reverse(Parts). cmd_label(Config) -> @@ -973,6 +998,29 @@ cmd_create_priv_dir(Config) -> true = lists:member({create_priv_dir, manual_per_tc}, TestOpts). +cmd_include_dir(Config) -> + State = ?config(result, Config), + AppDir = ?config(apps, 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, ["--include=foo/bar/baz,qux"]), + + 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), + Beam = filename:join([AppDir, "_build", "test", "lib", Name, "ebin", Name ++ ".beam"]), + + {ok, {_, [{compile_info, Info}]}} = beam_lib:chunks(Beam, [compile_info]), + CompileOpts = proplists:get_value(options, Info), + true = lists:member({i, "foo/bar/baz"}, CompileOpts), + true = lists:member({i, "qux"}, CompileOpts). + cfg_opts(Config) -> C = rebar_test_utils:init_rebar_state(Config, "ct_cfg_opts_"), @@ -1020,13 +1068,30 @@ cfg_test_spec(Config) -> Vsn = rebar_test_utils:create_random_vsn(), rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]), - RebarConfig = [{ct_opts, [{test_spec, "spec/foo.spec"}]}], + RebarConfig = [{ct_opts, [Opt = {test_spec, "spec/foo.spec"}]}], {ok, State} = rebar_test_utils:run_and_check(C, RebarConfig, ["as", "test", "lock"], return), - {error, {rebar_prv_common_test, Error}} = rebar_prv_common_test:prepare_tests(State), + {ok, TestOpts} = rebar_prv_common_test:prepare_tests(State), + + false = lists:member(Opt, TestOpts). + +cfg_cover_spec(Config) -> + C = rebar_test_utils:init_rebar_state(Config, "ct_cfg_cover_spec_opts_"), + + AppDir = ?config(apps, C), - {badconfig, "Test specs not supported"} = Error. + Name = rebar_test_utils:create_random_name("ct_cfg_cover_spec_opts_"), + Vsn = rebar_test_utils:create_random_vsn(), + rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]), + + RebarConfig = [{ct_opts, [Opt = {cover, "spec/foo.spec"}]}], + + {ok, State} = rebar_test_utils:run_and_check(C, RebarConfig, ["as", "test", "lock"], return), + + {ok, TestOpts} = rebar_prv_common_test:prepare_tests(State), + + false = lists:member(Opt, TestOpts). cfg_atom_suites(Config) -> C = rebar_test_utils:init_rebar_state(Config, "ct_cfg_atom_suites_"), @@ -1116,9 +1181,10 @@ misspecified_ct_first_files(Config) -> {badconfig, {"Value `~p' of option `~p' must be a list", {some_file, ct_first_files}}} = Error. + %% helper for generating test data test_suite(Name) -> io_lib:format("-module(~ts_SUITE).\n" "-compile(export_all).\n" "all() -> [some_test].\n" - "some_test(_) -> ok.\n", [Name]).
\ No newline at end of file + "some_test(_) -> ok.\n", [Name]). |