diff options
author | Dan Gudmundsson <[email protected]> | 2010-01-19 14:15:31 +0000 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2010-01-19 14:15:31 +0000 |
commit | b0b1c57b2256c0081b8e43b0c8799c71e30016fe (patch) | |
tree | ce71e3c8046bb2fcb72814a0f17c569ccc90cbe1 /lib/wx/test | |
parent | 9ef7d5424fee7cd703f6fad30786358ec36a3749 (diff) | |
download | otp-b0b1c57b2256c0081b8e43b0c8799c71e30016fe.tar.gz otp-b0b1c57b2256c0081b8e43b0c8799c71e30016fe.tar.bz2 otp-b0b1c57b2256c0081b8e43b0c8799c71e30016fe.zip |
Fixed a memory reference bug which caused unexplained {badarg, Int} exits.
You could get a reference to another applications memory, if wx had
deleted that applications memory without the drivers knowledge about
it, typically memory allocated by wx and not the application using
classes where wx-driver can't override the desctructors.
When wx allocated new memory and got a pointer to that memory, the
wx-driver detected the same pointer and forwarded the old ref to
erlang.
Diffstat (limited to 'lib/wx/test')
-rw-r--r-- | lib/wx/test/wx_xtra_SUITE.erl | 67 |
1 files changed, 61 insertions, 6 deletions
diff --git a/lib/wx/test/wx_xtra_SUITE.erl b/lib/wx/test/wx_xtra_SUITE.erl index 2ce1d18039..6f21c60d14 100644 --- a/lib/wx/test/wx_xtra_SUITE.erl +++ b/lib/wx/test/wx_xtra_SUITE.erl @@ -1,19 +1,19 @@ %% %% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2009. All Rights Reserved. -%% +%% +%% Copyright Ericsson AB 2009-2010. 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 @@ -51,7 +51,8 @@ all(suite) -> [ destroy_app, multiple_add_in_sizer, - app_dies + app_dies, + menu_item_debug ]. %% The test cases @@ -174,3 +175,57 @@ multiple_add_in_sizer(Config) -> wxWindow:show(Frame), wx_test_lib:wx_destroy(Frame, Config). +menu_item_debug(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo); +menu_item_debug(Config) -> + %% Debugging a menu entry problem + %% Run it with: lists:map(fun(_) -> [{0,{ok,_,_}}] = wxt:t() end, lists:seq(1,50)), ok. + Wx = wx:new(), + wx:debug(trace), + Frame = wxFrame:new(Wx, -1, "Button Fix"), + wxFrame:connect(Frame, close_window), + + FramePanel = wxPanel:new(Frame), + create_menus(Frame), + wxWindow:show(Frame), + 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", [])), + T1 = ?mt(wxMenu, wxMenu:new([])), + [wxMenuItem:getId(wxMenu:append(T1, Id, integer_to_list(Id), [])) + || Id <- lists:seq(100, 120)], + T2 = ?mt(wxMenu, wxMenu:new([])), + [wxMenuItem:getId(wxMenu:append(T2, Id, integer_to_list(Id), [])) + || Id <- lists:seq(200, 220)], + T3 = ?mt(wxMenu, wxMenu:new([])), + [wxMenuItem:getId(wxMenu:append(T3, Id, integer_to_list(Id), [])) + || Id <- lists:seq(300, 320)], + T4 = ?mt(wxMenu, wxMenu:new([])), + [wxMenuItem:getId(wxMenu:append(T4, Id, integer_to_list(Id), [])) + || Id <- lists:seq(400, 420)], + T5 = ?mt(wxMenu, wxMenu:new([])), + [wxMenuItem:getId(wxMenu:append(T5, Id, integer_to_list(Id), [])) + || Id <- lists:seq(500, 520)], + T6 = ?mt(wxMenu, wxMenu:new([])), + [wxMenuItem:getId(wxMenu:append(T6, Id, integer_to_list(Id), [])) + || Id <- lists:seq(600, 620)], + + ?m(ok,wxFrame:connect(Frame, command_menu_selected)), + ?m(true, wxMenuBar:append(MenuBar, File, "&File")), + ?m(true, wxMenuBar:append(MenuBar, Help, "&Help")), + ?m(true, wxMenuBar:append(MenuBar, T1, "T1")), + ?m(true, wxMenuBar:append(MenuBar, T2, "T2")), + ?m(true, wxMenuBar:append(MenuBar, T3, "T3")), + ?m(true, wxMenuBar:append(MenuBar, T4, "T4")), + ?m(true, wxMenuBar:append(MenuBar, T5, "T5")), + ?m(true, wxMenuBar:append(MenuBar, T6, "T6")), + + + ?m(ok, wxFrame:setMenuBar(Frame,MenuBar)). |