summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorFred Hebert <mononcqc@ferd.ca>2019-07-04 16:01:51 -0400
committerFred Hebert <mononcqc@ferd.ca>2019-07-04 16:06:53 -0400
commit9e4a191f46bbf86bfe75f19ddfa1048b1660faba (patch)
tree32f7e4c8d285ce66bfd64c86069073f1c5f43f7b /test
parentd80804015388ca5b4197396748b1b247c2d9d2fd (diff)
Fix crash when a dependency is missing app file
Patch up and add tests on #2112
Diffstat (limited to 'test')
-rw-r--r--test/rebar_discover_SUITE.erl69
1 files changed, 69 insertions, 0 deletions
diff --git a/test/rebar_discover_SUITE.erl b/test/rebar_discover_SUITE.erl
new file mode 100644
index 0000000..3fdd34b
--- /dev/null
+++ b/test/rebar_discover_SUITE.erl
@@ -0,0 +1,69 @@
+-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.
+