diff options
Diffstat (limited to 'lib/common_test/src/ct_run.erl')
-rw-r--r-- | lib/common_test/src/ct_run.erl | 45 |
1 files changed, 42 insertions, 3 deletions
diff --git a/lib/common_test/src/ct_run.erl b/lib/common_test/src/ct_run.erl index 7d6a2f54d9..a12d4d6f18 100644 --- a/lib/common_test/src/ct_run.erl +++ b/lib/common_test/src/ct_run.erl @@ -172,9 +172,7 @@ script_start1(Parent, Args) -> ([]) -> true end, false, Args), EvHandlers = event_handler_args2opts(Args), - SuiteCBs = get_start_opt(suite_callbacks, - fun(CBs) -> [list_to_atom(CB) || CB <- CBs] end, - [], Args), + SuiteCBs = suite_callbacks_args2opts(Args), %% check flags and set corresponding application env variables @@ -2076,6 +2074,33 @@ get_start_opt(Key, IfExists, IfNotExists, Args) -> IfNotExists end. +suite_callbacks_args2opts(Args) -> + suite_callbacks_args2opts( + proplists:get_value(suite_callbacks, Args, []),[]). + +suite_callbacks_args2opts([SCB,Arg,"and"| Rest],Acc) -> + suite_callbacks_args2opts(Rest,[{list_to_atom(SCB), + parse_scb_args(Arg)}|Acc]); +suite_callbacks_args2opts([SCB], Acc) -> + suite_callbacks_args2opts([SCB,"and"],Acc); +suite_callbacks_args2opts([SCB, "and" | Rest], Acc) -> + suite_callbacks_args2opts(Rest,[list_to_atom(SCB)|Acc]); +suite_callbacks_args2opts([SCB, Args], Acc) -> + suite_callbacks_args2opts([SCB, Args, "and"],Acc); +suite_callbacks_args2opts([],Acc) -> + lists:reverse(Acc). + +parse_scb_args(String) -> + try + true = io_lib:printable_list(String), + {ok,Toks,_} = erl_scan:string(String++"."), + {ok, Args} = erl_parse:parse_term(Toks), + Args + catch _:_ -> + String + end. + + event_handler_args2opts(Args) -> case proplists:get_value(event_handler, Args) of undefined -> @@ -2205,6 +2230,20 @@ opts2args(EnvStartOpts) -> [{event_handler_init,lists:reverse(StrsR)}]; ({suite_callbacks,[]}) -> []; + ({suite_callbacks,SCBs}) when is_list(SCBs) -> + io:format(user,"suite_callbacks: ~p",[SCBs]), + Strs = lists:flatmap( + fun({SCB,Arg}) -> + [atom_to_list(SCB), + lists:flatten( + io_lib:format("~p",[Arg])), + "and"]; + (SCB) when is_atom(SCB) -> + [atom_to_list(SCB),"and"] + end,SCBs), + [_LastAnd|StrsR] = lists:reverse(Strs), + io:format(user,"return: ~p",[lists:reverse(StrsR)]), + [{suite_callbacks,lists:reverse(StrsR)}]; ({Opt,As=[A|_]}) when is_atom(A) -> [{Opt,[atom_to_list(Atom) || Atom <- As]}]; ({Opt,Strs=[S|_]}) when is_list(S) -> |