aboutsummaryrefslogblamecommitdiffstats
path: root/lib/reltool/test/reltool_wx_SUITE.erl
blob: 13d71f4fd6e16eba070d2fe10327ffe289ebb339 (plain) (tree)
1
2
3
4


                   
                                                        















                                                                         

                                                                   
                                                   















                                                    

                      
                                         
 
         
                        




                                     
           

                                    
           
 







                                                                       
                                   
                                                                            





                                                                             





                                                                    

                         
                                 

                                                             
       






















                                                                      
%%
%% %CopyrightBegin%
%% 
%% Copyright Ericsson AB 2009-2012. All Rights Reserved.
%% 
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
%% 
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%% 
%% %CopyrightEnd%

-module(reltool_wx_SUITE).

-export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2, 
	 init_per_suite/1, end_per_suite/1, 
	 init_per_testcase/2, end_per_testcase/2]).

-compile(export_all).

-include("reltool_test_lib.hrl").

%% Initialization functions.
init_per_suite(Config) ->
    reltool_test_lib:wx_init_per_suite(Config).

end_per_suite(Config) ->
    reltool_test_lib:wx_end_per_suite(Config).

init_per_testcase(Func,Config) ->
    reltool_test_lib:init_per_testcase(Func,Config).
end_per_testcase(Func,Config) -> 
    reltool_test_lib:end_per_testcase(Func,Config).

%% SUITE specification
suite() -> [{ct_hooks,[ts_install_cth]}].

all() -> 
    [start_all_windows].

groups() -> 
    [].

init_per_group(_GroupName, Config) ->
    Config.

end_per_group(_GroupName, Config) ->
    Config.


%% The test cases

%% Display all windows and see if something crashes
start_all_windows(TestInfo) when is_atom(TestInfo) ->
    reltool_test_lib:tc_info(TestInfo);
start_all_windows(_Config) ->
    {ok, SysPid} = ?msym({ok, _}, reltool:start([{trap_exit, false}])),
    erlang:monitor(process,SysPid),
    {ok, AppPid} = ?msym({ok, _}, reltool_sys_win:open_app(SysPid, stdlib)),
    erlang:monitor(process,AppPid),
    {ok, ModPid} = ?msym({ok, _}, reltool_app_win:open_mod(AppPid, escript)),
    erlang:monitor(process,ModPid),

    %% Let all windows get started
    timer:sleep(timer:seconds(10)),

    %% Test that server pid can be fetched, and that server is alive
    {ok, Server} = ?msym({ok,_}, reltool:get_server(SysPid)),
    ?m(true, erlang:is_process_alive(Server)),
    ?m({ok,{sys,[]}}, reltool:get_config(Server)),

    %% Terminate
    check_no_win_crash(),
    ?m(ok, reltool:stop(SysPid)),
    wait_terminate([{sys,SysPid},{app,AppPid},{mod,ModPid}]),

    ok.


%%%-----------------------------------------------------------------
%%% Internal functions
check_no_win_crash() ->
    receive {'DOWN',_,_,_,_} = Down ->
	    ct:log("Unexpected termination of window:~n~p",[Down]),
	    ct:fail("window crashed")
    after 0 ->
	    ok
    end.

wait_terminate([]) ->
    ok;
wait_terminate([{Win,P}|Rest]) ->
    receive
	{'DOWN',_,process,P,shutdown} ->
	    wait_terminate(Rest);
	{'DOWN',_,process,P,Reason} ->
	    ct:log("~p window terminated with unexpected reason:~n~p",
		   [Win,Reason]),
	    ct:fail("unexpected exit reason from window")
    end.