1: %%
    2: %% %CopyrightBegin%
    3: %% 
    4: %% Copyright Ericsson AB 2009-2012. All Rights Reserved.
    5: %% 
    6: %% The contents of this file are subject to the Erlang Public License,
    7: %% Version 1.1, (the "License"); you may not use this file except in
    8: %% compliance with the License. You should have received a copy of the
    9: %% Erlang Public License along with this software. If not, it can be
   10: %% retrieved online at http://www.erlang.org/.
   11: %% 
   12: %% Software distributed under the License is distributed on an "AS IS"
   13: %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
   14: %% the License for the specific language governing rights and limitations
   15: %% under the License.
   16: %% 
   17: %% %CopyrightEnd%
   18: 
   19: -module(reltool_wx_SUITE).
   20: 
   21: -export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2, 
   22: 	 init_per_suite/1, end_per_suite/1, 
   23: 	 init_per_testcase/2, end_per_testcase/2]).
   24: 
   25: -compile(export_all).
   26: 
   27: -include("reltool_test_lib.hrl").
   28: 
   29: %% Initialization functions.
   30: init_per_suite(Config) ->
   31:     reltool_test_lib:wx_init_per_suite(Config).
   32: 
   33: end_per_suite(Config) ->
   34:     reltool_test_lib:wx_end_per_suite(Config).
   35: 
   36: init_per_testcase(Func,Config) ->
   37:     reltool_test_lib:init_per_testcase(Func,Config).
   38: end_per_testcase(Func,Config) -> 
   39:     reltool_test_lib:end_per_testcase(Func,Config).
   40: 
   41: %% SUITE specification
   42: suite() -> [{ct_hooks,[ts_install_cth]}].
   43: 
   44: all() -> 
   45:     [start_all_windows].
   46: 
   47: groups() -> 
   48:     [].
   49: 
   50: init_per_group(_GroupName, Config) ->
   51:     Config.
   52: 
   53: end_per_group(_GroupName, Config) ->
   54:     Config.
   55: 
   56: 
   57: %% The test cases
   58: 
   59: %% Display all windows and see if something crashes
   60: start_all_windows(TestInfo) when is_atom(TestInfo) ->
   61:     reltool_test_lib:tc_info(TestInfo);
   62: start_all_windows(_Config) ->
   63:     {ok, SysPid} = ?msym({ok, _}, reltool:start([{trap_exit, false}])),
   64:     erlang:monitor(process,SysPid),
   65:     {ok, AppPid} = ?msym({ok, _}, reltool_sys_win:open_app(SysPid, stdlib)),
   66:     erlang:monitor(process,AppPid),
   67:     {ok, ModPid} = ?msym({ok, _}, reltool_app_win:open_mod(AppPid, escript)),
   68:     erlang:monitor(process,ModPid),
   69: 
   70:     %% Let all windows get started
   71:     timer:sleep(timer:seconds(10)),
   72: 
   73:     %% Test that server pid can be fetched, and that server is alive
   74:     {ok, Server} = ?msym({ok,_}, reltool:get_server(SysPid)),
   75:     ?m(true, erlang:is_process_alive(Server)),
   76:     ?m({ok,{sys,[]}}, reltool:get_config(Server)),
   77: 
   78:     %% Terminate
   79:     check_no_win_crash(),
   80:     ?m(ok, reltool:stop(SysPid)),
   81:     wait_terminate([{sys,SysPid},{app,AppPid},{mod,ModPid}]),
   82: 
   83:     ok.
   84: 
   85: 
   86: %%%-----------------------------------------------------------------
   87: %%% Internal functions
   88: check_no_win_crash() ->
   89:     receive {'DOWN',_,_,_,_} = Down ->
   90: 	    ct:log("Unexpected termination of window:~n~p",[Down]),
   91: 	    ct:fail("window crashed")
   92:     after 0 ->
   93: 	    ok
   94:     end.
   95: 
   96: wait_terminate([]) ->
   97:     ok;
   98: wait_terminate([{Win,P}|Rest]) ->
   99:     receive
  100: 	{'DOWN',_,process,P,shutdown} ->
  101: 	    wait_terminate(Rest);
  102: 	{'DOWN',_,process,P,Reason} ->
  103: 	    ct:log("~p window terminated with unexpected reason:~n~p",
  104: 		   [Win,Reason]),
  105: 	    ct:fail("unexpected exit reason from window")
  106:     end.