-module(rebar_discover_SUITE). -compile(export_all). -include_lib("common_test/include/ct.hrl"). -include_lib("eunit/include/eunit.hrl"). all() -> [empty_app_src, bad_app_src, invalid_app_src]. %% note: invalid .app files without a .app.src also present %% has rebar3 just ignoring the directory as not OTP-related. init_per_testcase(_, Config) -> NewConfig = rebar_test_utils:init_rebar_state(Config, "discover_app_"), AppDir = ?config(apps, NewConfig), Name = rebar_test_utils:create_random_name("app1"), Vsn = rebar_test_utils:create_random_vsn(), rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]), [{app_names, [Name]}, {vsns, [Vsn]}|NewConfig]. end_per_testcase(_, Config) -> Config. empty_app_src() -> [{doc, "when there's an empty .app.src file, exit with a good error " "message rather than an uncaught exception"}]. empty_app_src(Config) -> AppDir = ?config(apps, Config), [Name] = ?config(app_names, Config), AppSrc = filename:join([AppDir, "src", Name ++ ".app.src"]), ok = file:write_file(AppSrc, ""), ?assertEqual( {error, {rebar_app_discover, {cannot_read_app_file, AppSrc}}}, rebar_test_utils:run_and_check(Config, [], ["compile"], return) ), ok. bad_app_src() -> [{doc, "when there's a syntactically invalid " ".app.src file, exit with a good error " "message rather than an uncaught exception"}]. bad_app_src(Config) -> AppDir = ?config(apps, Config), [Name] = ?config(app_names, Config), AppSrc = filename:join([AppDir, "src", Name ++ ".app.src"]), ok = file:write_file(AppSrc, "bad term file :("), ?assertMatch( {error, {rebar_app_discover, {bad_term_file, AppSrc, _}}}, rebar_test_utils:run_and_check(Config, [], ["compile"], return) ), ok. invalid_app_src() -> [{doc, "when there's a syntactically valid but semantically invalid " ".app.src file, exit with a good error " "message rather than an uncaught exception"}]. invalid_app_src(Config) -> AppDir = ?config(apps, Config), [Name] = ?config(app_names, Config), AppSrc = filename:join([AppDir, "src", Name ++ ".app.src"]), ok = file:write_file(AppSrc, "{applications, name_but_no_args}."), ?assertEqual( {error, {rebar_app_discover, {cannot_read_app_file, AppSrc}}}, rebar_test_utils:run_and_check(Config, [], ["compile"], return) ), ok.