From eff10143dbc2f19559d31ed077713dbc0f96ed5c Mon Sep 17 00:00:00 2001 From: Fred Hebert Date: Thu, 23 Jan 2020 09:17:59 -0500 Subject: [PATCH] simplify hook test specification --- test/rebar_compile_SUITE.erl | 175 ++++++----------------------------- 1 file changed, 29 insertions(+), 146 deletions(-) diff --git a/test/rebar_compile_SUITE.erl b/test/rebar_compile_SUITE.erl index cb151485..861310bd 100644 --- a/test/rebar_compile_SUITE.erl +++ b/test/rebar_compile_SUITE.erl @@ -2412,7 +2412,6 @@ split_project_apps_hooks(Config) -> ok = file:write_file(filename:join(AppDir2, "rebar.config"), io_lib:format("~p.~n~p.", Cfg("app2"))), RebarConfig = Cfg("all"), - ct:pal("RebarConfig: ~p~n", [RebarConfig]), rebar_test_utils:run_and_check(Config, RebarConfig, ["compile"], {ok, [{app, Name1}, {app, Name2}]}), %% Now for the big party: @@ -2429,153 +2428,37 @@ split_project_apps_hooks(Config) -> %% - compile post hook runs for each app individually %% - we expect app compile post-hooks to show up in order %% - we expect whole post-hooks to run last - ?assertEqual({ok, <<"pre-compile-all\n">>}, - file:read_file(filename:join(HookDir, "pre-compile-all"))), - ?assertEqual({ok, << - "pre-compile-all\n" - "pre-compile-app2\n" - >>}, - file:read_file(filename:join(HookDir, "pre-compile-app2"))), - ?assertEqual({ok, << - "pre-compile-all\n" - "pre-compile-app2\n" - "pre-erlc-app2\n" - >>}, - file:read_file(filename:join(HookDir, "pre-erlc-app2"))), - ?assertEqual({ok, << - "pre-compile-all\n" - "pre-compile-app1\n" - "pre-compile-app2\n" - "pre-erlc-app2\n" - >>}, - file:read_file(filename:join(HookDir, "pre-compile-app1"))), - ?assertEqual({ok, << - "pre-compile-all\n" - "pre-compile-app1\n" - "pre-compile-app2\n" - "pre-erlc-app1\n" - "pre-erlc-app2\n" - >>}, - file:read_file(filename:join(HookDir, "pre-erlc-app1"))), - ?assertEqual({ok, << - "post-erlc-app2\n" - "pre-compile-all\n" - "pre-compile-app1\n" - "pre-compile-app2\n" - "pre-erlc-app1\n" - "pre-erlc-app2\n" - >>}, - file:read_file(filename:join(HookDir, "post-erlc-app2"))), - ?assertEqual({ok, << - "post-erlc-app2\n" - "pre-app-app2\n" - "pre-compile-all\n" - "pre-compile-app1\n" - "pre-compile-app2\n" - "pre-erlc-app1\n" - "pre-erlc-app2\n" - >>}, - file:read_file(filename:join(HookDir, "pre-app-app2"))), - ?assertEqual({ok, << - "post-app-app2\n" - "post-erlc-app2\n" - "pre-app-app2\n" - "pre-compile-all\n" - "pre-compile-app1\n" - "pre-compile-app2\n" - "pre-erlc-app1\n" - "pre-erlc-app2\n" - >>}, - file:read_file(filename:join(HookDir, "post-app-app2"))), - ?assertEqual({ok, << - "post-app-app2\n" - "post-compile-app2\n" - "post-erlc-app2\n" - "pre-app-app2\n" - "pre-compile-all\n" - "pre-compile-app1\n" - "pre-compile-app2\n" - "pre-erlc-app1\n" - "pre-erlc-app2\n" - >>}, - file:read_file(filename:join(HookDir, "post-compile-app2"))), - ?assertEqual({ok, << - "post-app-app2\n" - "post-compile-app2\n" - "post-erlc-app1\n" - "post-erlc-app2\n" - "pre-app-app2\n" - "pre-compile-all\n" - "pre-compile-app1\n" - "pre-compile-app2\n" - "pre-erlc-app1\n" - "pre-erlc-app2\n" - >>}, - file:read_file(filename:join(HookDir, "post-erlc-app1"))), - ?assertEqual({ok, << - "post-app-app2\n" - "post-compile-app2\n" - "post-erlc-app1\n" - "post-erlc-app2\n" - "pre-app-app1\n" - "pre-app-app2\n" - "pre-compile-all\n" - "pre-compile-app1\n" - "pre-compile-app2\n" - "pre-erlc-app1\n" - "pre-erlc-app2\n" - >>}, - file:read_file(filename:join(HookDir, "pre-app-app1"))), - ?assertEqual({ok, << - "post-app-app1\n" - "post-app-app2\n" - "post-compile-app2\n" - "post-erlc-app1\n" - "post-erlc-app2\n" - "pre-app-app1\n" - "pre-app-app2\n" - "pre-compile-all\n" - "pre-compile-app1\n" - "pre-compile-app2\n" - "pre-erlc-app1\n" - "pre-erlc-app2\n" - >>}, - file:read_file(filename:join(HookDir, "post-app-app1"))), - ?assertEqual({ok, << - "post-app-app1\n" - "post-app-app2\n" - "post-compile-app1\n" - "post-compile-app2\n" - "post-erlc-app1\n" - "post-erlc-app2\n" - "pre-app-app1\n" - "pre-app-app2\n" - "pre-compile-all\n" - "pre-compile-app1\n" - "pre-compile-app2\n" - "pre-erlc-app1\n" - "pre-erlc-app2\n" - >>}, - file:read_file(filename:join(HookDir, "post-compile-app1"))), - ?assertEqual({ok, << - "post-app-app1\n" - "post-app-app2\n" - "post-compile-all\n" - "post-compile-app1\n" - "post-compile-app2\n" - "post-erlc-app1\n" - "post-erlc-app2\n" - "pre-app-app1\n" - "pre-app-app2\n" - "pre-compile-all\n" - "pre-compile-app1\n" - "pre-compile-app2\n" - "pre-erlc-app1\n" - "pre-erlc-app2\n" - >>}, - file:read_file(filename:join(HookDir, "post-compile-all"))), + CallOrder = [ + "pre-compile-all", + "pre-compile-app2", + "pre-erlc-app2", + "pre-compile-app1", + "pre-erlc-app1", + "post-erlc-app2", + "pre-app-app2", + "post-app-app2", + "post-compile-app2", + "post-erlc-app1", + "pre-app-app1", + "post-app-app1", + "post-compile-app1", + "post-compile-all" + ], + validate_call_order(CallOrder, HookDir), ok. +validate_call_order(Calls, Dir) -> validate_call_order(Calls, Dir, []). + +validate_call_order([], _, _) -> + ok; +validate_call_order([Name|T], Dir, Seen) -> + {ok, Bin} = file:read_file(filename:join(Dir, Name)), + %% weird list of tokens, but works on lexemes/tokens for backwards compat + Found = rebar_string:lexemes(binary_to_list(Bin), [$\n, $\r, "\r\n"]), + NewSeen = [Name|Seen], + ?assertEqual({Name, Found}, {Name, lists:sort(NewSeen)}), + validate_call_order(T, Dir, NewSeen). + app_file_linting(Config) -> meck:new(rebar_log, [no_link, passthrough]), AppDir = ?config(apps, Config),