aboutsummaryrefslogtreecommitdiffstats
path: root/lib/wx/test/wx_basic_SUITE.erl
diff options
context:
space:
mode:
Diffstat (limited to 'lib/wx/test/wx_basic_SUITE.erl')
-rw-r--r--lib/wx/test/wx_basic_SUITE.erl296
1 files changed, 296 insertions, 0 deletions
diff --git a/lib/wx/test/wx_basic_SUITE.erl b/lib/wx/test/wx_basic_SUITE.erl
new file mode 100644
index 0000000000..599aa371ba
--- /dev/null
+++ b/lib/wx/test/wx_basic_SUITE.erl
@@ -0,0 +1,296 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2008-2009. 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%
+%%%-------------------------------------------------------------------
+%%% File : wx_basic_SUITE.erl
+%%% Author : Dan Gudmundsson <[email protected]>
+%%% Description : Basic SUITE, some simple tests to show that the basics
+%%% are working.
+%%% Created : 3 Nov 2008 by Dan Gudmundsson <[email protected]>
+%%%-------------------------------------------------------------------
+-module(wx_basic_SUITE).
+-export([all/0, init_per_suite/1, end_per_suite/1,
+ init_per_testcase/2, fin_per_testcase/2, end_per_testcase/2]).
+
+-compile(export_all).
+
+-include("wx_test_lib.hrl").
+
+%% Initialization functions.
+init_per_suite(Config) ->
+ wx_test_lib:init_per_suite(Config).
+
+end_per_suite(Config) ->
+ wx_test_lib:end_per_suite(Config).
+
+init_per_testcase(Func,Config) ->
+ wx_test_lib:init_per_testcase(Func,Config).
+end_per_testcase(Func,Config) ->
+ wx_test_lib:end_per_testcase(Func,Config).
+fin_per_testcase(Func,Config) -> %% For test_server
+ wx_test_lib:end_per_testcase(Func,Config).
+
+%% SUITE specification
+all() ->
+ all(suite).
+all(suite) ->
+ [
+ create_window,
+ several_apps,
+ wx_api,
+ wx_misc,
+ data_types
+ ].
+
+%% The test cases
+
+%% create and test creating a window
+create_window(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
+create_window(Config) ->
+ Wx = ?mr(wx_ref, wx:new()),
+ Frame = ?mt(wxFrame, wxFrame:new(Wx, 1, "Hello World")),
+ timer:sleep(1000),
+ ?m(true,wxWindow:show(Frame, [])),
+ wx_test_lib:wx_destroy(Frame, Config).
+
+%% create several windows from independent processes
+%% to simulate several applications and test creating a window
+several_apps(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
+several_apps(Config) ->
+ Parent = self(),
+ Pids = [spawn_link(fun() -> several_apps(Parent, N, Config) end)
+ || N <- lists:seq(1,4)],
+ process_flag(trap_exit,true),
+ ?m_multi_receive([{complete,Pid} || Pid <- Pids]),
+ case wx_test_lib:user_available(Config) of
+ true ->
+ receive {'EXIT',_,foo} -> ok end;
+ false ->
+ ok
+ end.
+
+several_apps(Parent, N, Config) ->
+ Wx = ?mr(wx_ref, wx:new()),
+ Frame = ?mt(wxFrame, wxFrame:new(Wx, 1, "Hello World No:" ++
+ integer_to_list(N))),
+ create_menus(Frame),
+ wxFrame:connect(Frame,size),
+ ?m(true,wxWindow:show(Frame, [])),
+ receive
+ #wx{obj=Frame, event=#wxSize{}} ->
+ Parent ! {complete, self()}
+ end,
+ wx_test_lib:wx_destroy(Frame, Config),
+ exit(foo).
+
+
+%% Test the wx.erl api functionality.
+wx_api(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
+wx_api(Config) ->
+ Wx = ?mr(wx_ref, wx:new()),
+ ?m(true, wx:is_null(Wx)),
+ Null = ?mr(wx_ref, wx:null()),
+ ?m(true, wx:is_null(Null)),
+ Frame = ?mt(wxFrame, wxFrame:new(Wx, 1, "WX API: " ++ unicode:characters_to_list("������"))),
+ ?m(false, wx:is_null(Frame)),
+ ?m(wxFrame, wx:getObjectType(Frame)),
+ Env = ?mr(wx_env, wx:get_env()),
+ %% Test some error cases
+ erase(wx_env),
+ ?m({'EXIT', {{wxe,unknown_port},_}},wxWindow:show(Frame, [])),
+ ?m({'EXIT', {{wxe,unknown_port},_}},wx:debug(2)),
+
+ ?m(ok,wx:set_env(Env)),
+ ?m(ok,wx:debug(1)),
+ ?m(ok,wx:debug(2)),
+ ?m(ok,wx:debug(0)),
+ ?m(ok,wx:debug(none)),
+ ?m(ok,wx:debug(verbose)),
+ ?m(ok,wx:debug(trace)),
+
+ Mem = ?mr(wx_mem, wx:create_memory(10)),
+ ?m(true, is_binary(wx:get_memory_bin(Mem))),
+ ?mt(foo, wx:typeCast(Frame, foo)),
+
+ RecBatch = fun() ->
+ wx:batch(fun() -> create_menus(Frame) end)
+ end,
+ ?m(batch_ret, wx:batch(fun() -> RecBatch(), batch_ret end)),
+ ?m(ok, wx:foreach(fun(A) -> true = lists:member(A,[1,2,3,4,5]) end,
+ lists:seq(1,5))),
+ ?m([2,3,4,5,6], wx:map(fun(A) -> A+1 end, lists:seq(1,5))),
+ ?m({5,15}, wx:foldl(fun(A,{_,Acc}) -> {A,A+Acc} end, {0,0},
+ lists:seq(1,5))),
+ ?m({1,15}, wx:foldr(fun(A,{_,Acc}) -> {A,A+Acc} end, {0,0},
+ lists:seq(1,5))),
+ ?m(ok,wx:debug(none)),
+
+ ?m(ball, wx:batch(fun() -> throw(ball), batch_ret end)),
+ ?m({'EXIT', door}, wx:batch(fun() -> exit(door), batch_ret end)),
+ ?m({'EXIT',{message,_ST}},
+ wx:batch(fun() -> erlang:error(message), batch_ret end)),
+
+
+ ?m({'EXIT',_},wxWindow:show(wx:null(), [])),
+ ?m(true,wxWindow:show(Frame, [])),
+ Temp = ?mt(wxButton, wxButton:new(Frame, -1)),
+ ?m(ok,wxButton:setLabel(Temp, "Testing")),
+ ?m(ok,wxButton:destroy(Temp)),
+ ?m({'EXIT',_},wxButton:getLabel(Temp)),
+
+ case wx_test_lib:user_available(Config) of
+ true ->
+ %% Hmm popup doesn't return until mouse is pressed.
+ Menu = wxMenu:new(),
+ wxMenu:append(Menu, 0, "Press", []),
+ wxMenu:append(Menu, 1, "Me", []),
+ ?m(true, wxWindow:popupMenu(Frame, Menu)),
+ %% This didn't work for a while
+ ?m(true, wx:batch(fun() ->
+ wxMenu:append(Menu, 2, "AGAIN", []),
+ wxWindow:popupMenu(Frame, Menu)
+ end)),
+ ok;
+ _ ->
+ ignore
+ end,
+
+%% dbg:tracer(),
+%% {_, _Port, Server, _Dbg} = wx:get_env(),
+%% dbg:p(Server, [m, call]),
+%% dbg:p(new, [m, call]),
+%% dbg:tpl(wxe_server,'_', [{'_', [], [{return_trace}]}]),
+ wx_test_lib:wx_destroy(Frame,Config).
+
+create_menus(Frame) ->
+ MenuBar = ?mt(wxMenuBar, wxMenuBar:new()),
+ File = ?mt(wxMenu, wxMenu:new([])),
+ Help = ?mt(wxMenu, wxMenu:new([])),
+ ?mt(wxMenuItem, wxMenu:append(Help, ?wxID_ABOUT, "&About", [])),
+ ?mt(wxMenuItem, wxMenu:append(Help, ?wxID_HELP, "&Help", [])),
+ ?mt(wxMenuItem, wxMenu:append(File, ?wxID_EXIT, "Exit", [])),
+ ?m(ok,wxFrame:connect(Frame, command_menu_selected)),
+ ?m(true, wxMenuBar:append(MenuBar, File, "&File")),
+ ?m(true, wxMenuBar:append(MenuBar, Help, "&Help")),
+ ?m(ok, wxFrame:setMenuBar(Frame,MenuBar)).
+
+
+%% Test the wx_misc.erl api functionality.
+wx_misc(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
+wx_misc(Config) ->
+ wx:new([{debug, trace}]),
+ put(wx_test_verbose, true),
+ ?m(ok, wx_misc:bell()),
+ ?m(true, length(wx_misc:getUserId()) > 0),
+ ?m(true, is_list(wx_misc:getEmailAddress())),
+ Home = ?m([_|_], wx_misc:getHomeDir()),
+ ?m(true, filelib:is_dir(Home)),
+ ?m(true, length(wx_misc:getOsDescription()) > 0),
+ IsLitte = case <<1:32/native>> of
+ <<1:8, 0:24>> -> true;
+ <<0:24,1:16>> -> false
+ end,
+ ?m(IsLitte, wx_misc:isPlatformLittleEndian()),
+ ?m(true, is_boolean(wx_misc:isPlatform64Bit())),
+
+ ?mr(wxMouseState, wx_misc:getMouseState()),
+ ?m({_,_}, wx_misc:getMousePosition()),
+
+ %% Don't hold home down when testing :-)
+ ?m(false, wx_misc:getKeyState(?WXK_HOME)),
+
+
+ %% wx:shutdown() %% How do you test this?
+
+ case os:type() of
+ {win32, _} -> %% These hangs when running automatic tests
+ skip; %% through ssh on windows. Works otherwise
+ _ ->
+ wx_misc:shell([{command,"echo TESTING close the popup shell"}])
+ end,
+
+ case wx_test_lib:user_available(Config) of
+ true ->
+ wx_misc:shell();
+ false ->
+ %% Don't want to spawn a shell if no user
+ skip %% is available
+ end,
+
+ ?m(false, wx_misc:isBusy()),
+ ?m(ok, wx_misc:beginBusyCursor([])),
+ ?m(true, wx_misc:isBusy()),
+ ?m(ok, wx_misc:endBusyCursor()),
+
+ %%?m(true, is_boolean(wx_misc:setDetectableAutoRepeat(true)),
+ Curr = wx_misc:getCurrentId(),
+ ?m(true, is_integer(Curr)),
+ NewId = wx_misc:newId(),
+ ?m(ok, wx_misc:registerId(NewId+1)),
+ ?m(true, (NewId+1) /= wx_misc:newId()),
+
+ wx:destroy().
+
+
+%% Check that all the data_types works in communication
+%% between erlang and c++ thread.
+data_types(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo);
+data_types(_Config) ->
+ Wx = ?mr(wx_ref, wx:new()),
+
+ Frame = wxFrame:new(Wx, 1, "Data Types"),
+ CDC = wxClientDC:new(Frame),
+
+ %% From wx.erl
+ %% The following classes are implemented directly as erlang types: <br />
+ %% wxPoint={x,y},wxSize={w,h},wxRect={x,y,w,h},wxColour={r,g,b [,a]},wxString=[integer],
+ %% wxGBPosition={r,c},wxGBSpan={rs,cs},wxGridCellCoords={r,c}.
+
+ %% Strings
+ ?m("Data Types", wxFrame:getTitle(Frame)),
+
+ %% Doubles
+ ?m(ok, wxDC:setUserScale(CDC, 123.45, 234.67)),
+ ?m({123.45,234.67}, wxDC:getUserScale(CDC)),
+
+ %% Colors input is 3 or 4 tuple, returns are 4 tuples
+ ?m(ok, wxDC:setTextForeground(CDC, {100,10,1})),
+ ?m({100,10,1,255}, wxDC:getTextForeground(CDC)),
+ ?m(ok, wxDC:setTextForeground(CDC, {100,10,1,43})),
+ ?m({100,10,1,43}, wxDC:getTextForeground(CDC)),
+
+ %% Bool
+ ?m(ok, wxDC:setAxisOrientation(CDC, true, false)),
+ ?m(true, is_boolean(wxDC:isOk(CDC))),
+
+ %% wxCoord
+ ?m(true, is_integer(wxDC:maxX(CDC))),
+
+ %% wxSize
+ ?m({_,_}, wxWindow:getSize(Frame)),
+
+ %% DateTime
+ DateTime = calendar:now_to_datetime(erlang:now()),
+ io:format("DateTime ~p ~n",[DateTime]),
+ Cal = ?mt(wxCalendarCtrl, wxCalendarCtrl:new(Frame, ?wxID_ANY, [{date,DateTime}])),
+ ?m(DateTime, wxCalendarCtrl:getDate(Cal)),
+ ?m(true, is_boolean(wxCalendarCtrl:setDate(Cal,DateTime))),
+ ?m(DateTime, wxCalendarCtrl:getDate(Cal)),
+
+ wxClientDC:destroy(CDC),
+ %%wx_test_lib:wx_destroy(Frame,Config).
+ wx:destroy().