diff options
author | Fred Hebert <mononcqc@ferd.ca> | 2017-12-14 10:14:53 -0500 |
---|---|---|
committer | Fred Hebert <mononcqc@ferd.ca> | 2017-12-14 10:14:53 -0500 |
commit | d0f958d59d1f87bda8d1d6c724a1af18af288324 (patch) | |
tree | ca70dd2a607da5d8c1ac4f1db1064046a62ec7c8 /test | |
parent | b7c021b3f216bdd03d286b467889d03b142f4bf3 (diff) |
Fix escriptize failure when ebin/ has subdirs
Although fairly irregular, the presence of a subdirectory in ebin/ while
running rebar3 escriptize would crash the run and generate a dump.
Since ebin subdirectories are generally not supported (adding a path for
an application only adds ebin/ and no subdirectories to the VM's path
set), we just silently ignore the directory altogether.
Fixes #1693
Diffstat (limited to 'test')
-rw-r--r-- | test/rebar_escriptize_SUITE.erl | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/test/rebar_escriptize_SUITE.erl b/test/rebar_escriptize_SUITE.erl index 139d5cd..a6901f9 100644 --- a/test/rebar_escriptize_SUITE.erl +++ b/test/rebar_escriptize_SUITE.erl @@ -7,7 +7,8 @@ all/0, escriptize_with_name/1, escriptize_with_bad_name/1, - build_and_clean_app/1]). + build_and_clean_app/1, + escriptize_with_ebin_subdir/1]). -include_lib("common_test/include/ct.hrl"). -include_lib("eunit/include/eunit.hrl"). @@ -29,7 +30,8 @@ all() -> [ build_and_clean_app, escriptize_with_name, - escriptize_with_bad_name + escriptize_with_bad_name, + escriptize_with_ebin_subdir ]. %% Test escriptize builds and runs the app's escript @@ -59,3 +61,24 @@ escriptize_with_bad_name(Config) -> rebar_test_utils:create_app(AppDir, Name, Vsn, [kernel, stdlib]), rebar_test_utils:run_and_check(Config, [{escript_main_app, boogers}], ["escriptize"], {error,{rebar_prv_escriptize, {bad_name, boogers}}}). + +escriptize_with_ebin_subdir(Config) -> + AppDir = ?config(apps, Config), + 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]), + + filelib:ensure_dir(filename:join([AppDir, "ebin", "subdir", "subdirfile"])), + + %% To work, this test must run from the AppDir itself. To avoid breaking + %% other tests, be careful with cwd + Cwd = file:get_cwd(), + try + file:set_cwd(AppDir), + {ok, _} = rebar3:run(rebar_state:new(?config(state,Config), [], AppDir), + ["escriptize"]) + after + file:set_cwd(Cwd) % reset always + end, + ok. |