wxruby3 1.7.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/INSTALL.md +27 -2
- data/README.md +15 -15
- data/ext/wxruby3/include/wxRubyApp.h +145 -46
- data/ext/wxruby3/include/wxruby-ComboPopup.h +25 -8
- data/ext/wxruby3/include/wxruby-GCTracking.h +262 -0
- data/ext/wxruby3/include/wxruby-MBConv.h +190 -0
- data/ext/wxruby3/include/wxruby-SharedEventHandler.h +183 -0
- data/ext/wxruby3/include/wxruby-SharedPtr.h +104 -0
- data/ext/wxruby3/include/wxruby-runtime.h +29 -0
- data/ext/wxruby3/swig/custom/rubytracking.swg +8 -22
- data/ext/wxruby3/swig/custom/wx_ruby_shared_ptr.i +434 -0
- data/ext/wxruby3/swig/custom/wx_shared_ptr.i +431 -0
- data/ext/wxruby3/swig/mark_free_impl.i +7 -132
- data/ext/wxruby3/swig/memory_management.i +8 -44
- data/ext/wxruby3/swig/wx.i +46 -73
- data/lib/wx/core/const.rb +0 -1
- data/lib/wx/core/context_help.rb +17 -0
- data/lib/wx/core/cursor.rb +1 -0
- data/lib/wx/core/helpcontrollerhelpprovider.rb +10 -2
- data/lib/wx/core/mbconv.rb +11 -0
- data/lib/wx/core/media_ctrl.rb +31 -0
- data/lib/wx/core/top_level_window.rb +7 -0
- data/lib/wx/core.rb +6 -0
- data/lib/wx/doc/art_provider.rb +17 -0
- data/lib/wx/doc/context_help.rb +42 -0
- data/lib/wx/doc/core.rb +0 -5
- data/lib/wx/doc/functions.rb +10 -0
- data/lib/wx/doc/gen/affine_matrix2d.rb +2 -0
- data/lib/wx/doc/gen/art_provider.rb +12 -0
- data/lib/wx/doc/gen/aui/aui_notebook_event.rb +15 -15
- data/lib/wx/doc/gen/aui/aui_pane_info.rb +8 -8
- data/lib/wx/doc/gen/aui/aui_tool_bar_event.rb +5 -5
- data/lib/wx/doc/gen/book_ctrl_base.rb +2 -1
- data/lib/wx/doc/gen/calendar_event.rb +5 -5
- data/lib/wx/doc/gen/choicebook.rb +2 -2
- data/lib/wx/doc/gen/collapsible_pane.rb +1 -1
- data/lib/wx/doc/gen/colour_dialog.rb +1 -1
- data/lib/wx/doc/gen/colour_picker_event.rb +3 -3
- data/lib/wx/doc/gen/context_help_button.rb +0 -53
- data/lib/wx/doc/gen/core.rb +4 -4
- data/lib/wx/doc/gen/credential_entry_dialog.rb +2 -2
- data/lib/wx/doc/gen/date_event.rb +2 -2
- data/lib/wx/doc/gen/dial_up_event.rb +2 -2
- data/lib/wx/doc/gen/dir_filter_list_ctrl.rb +2 -2
- data/lib/wx/doc/gen/event.rb +58 -58
- data/lib/wx/doc/gen/ext_help_controller.rb +62 -16
- data/lib/wx/doc/gen/file_ctrl.rb +4 -4
- data/lib/wx/doc/gen/file_dir_picker_event.rb +2 -2
- data/lib/wx/doc/gen/file_system.rb +1 -1
- data/lib/wx/doc/gen/find_dialog_event.rb +5 -5
- data/lib/wx/doc/gen/font_picker_event.rb +1 -1
- data/lib/wx/doc/gen/grid/grid_ctrl.rb +67 -32
- data/lib/wx/doc/gen/header_ctrl_event.rb +13 -13
- data/lib/wx/doc/gen/help_controller.rb +45 -2
- data/lib/wx/doc/gen/html/html_help_controller.rb +74 -32
- data/lib/wx/doc/gen/html/html_help_window.rb +3 -3
- data/lib/wx/doc/gen/html/html_window.rb +4 -4
- data/lib/wx/doc/gen/hyperlink_ctrl.rb +1 -1
- data/lib/wx/doc/gen/list_ctrl.rb +22 -22
- data/lib/wx/doc/gen/listbook.rb +2 -2
- data/lib/wx/doc/gen/mb_conv.rb +10 -0
- data/lib/wx/doc/gen/media_event.rb +6 -6
- data/lib/wx/doc/gen/notebook.rb +2 -2
- data/lib/wx/doc/gen/pg/pg_validation_info.rb +14 -14
- data/lib/wx/doc/gen/pg/property_grid_interface.rb +2 -2
- data/lib/wx/doc/gen/rbn/ribbon_art_provider.rb +19 -9
- data/lib/wx/doc/gen/rbn/ribbon_button_bar.rb +2 -2
- data/lib/wx/doc/gen/rbn/ribbon_gallery.rb +3 -3
- data/lib/wx/doc/gen/rbn/ribbon_panel.rb +2 -2
- data/lib/wx/doc/gen/rbn/ribbon_tool_bar.rb +2 -2
- data/lib/wx/doc/gen/rt/event_list.rb +17 -0
- data/lib/wx/doc/gen/rt/shared_evt_handler.rb +14 -0
- data/lib/wx/doc/gen/rt/thread_event.rb +71 -0
- data/lib/wx/doc/gen/rtc/rich_text_ctrl.rb +19 -19
- data/lib/wx/doc/gen/sash_event.rb +2 -2
- data/lib/wx/doc/gen/sash_layout_window.rb +2 -2
- data/lib/wx/doc/gen/search_ctrl.rb +2 -2
- data/lib/wx/doc/gen/spin_ctrl.rb +2 -2
- data/lib/wx/doc/gen/splitter_window.rb +6 -6
- data/lib/wx/doc/gen/stc/styled_text_event.rb +34 -34
- data/lib/wx/doc/gen/task_bar_icon_event.rb +10 -10
- data/lib/wx/doc/gen/text_ctrl.rb +4 -4
- data/lib/wx/doc/gen/toggle_button.rb +1 -1
- data/lib/wx/doc/gen/toolbook.rb +2 -2
- data/lib/wx/doc/gen/top_level_window.rb +19 -0
- data/lib/wx/doc/gen/tree_ctrl.rb +21 -21
- data/lib/wx/doc/gen/treebook.rb +4 -4
- data/lib/wx/doc/gen/utils.rb +2 -2
- data/lib/wx/doc/gen/web/event_list.rb +95 -0
- data/lib/wx/doc/gen/web/web_view.rb +1136 -0
- data/lib/wx/doc/gen/web/web_view_event.rb +210 -0
- data/lib/wx/doc/gen/web/web_view_handler.rb +318 -0
- data/lib/wx/doc/gen/window.rb +1 -1
- data/lib/wx/doc/gen/wizard_event.rb +7 -7
- data/lib/wx/doc/html/html_help_controller.rb +23 -1
- data/lib/wx/doc/mbconv.rb +108 -0
- data/lib/wx/doc/rt/shared_event_handler.rb +49 -0
- data/lib/wx/doc/rt/thread_event.rb +28 -0
- data/lib/wx/doc/webview.rb +40 -0
- data/lib/wx/helpers.rb +1 -1
- data/lib/wx/html/htmlhelpcontroller.rb +10 -0
- data/lib/wx/keyword_defs.rb +11 -0
- data/lib/wx/rt/events/evt_list.rb +8 -0
- data/lib/wx/rt/require.rb +8 -0
- data/lib/wx/rt/thread_event.rb +14 -0
- data/lib/wx/rt.rb +16 -0
- data/lib/wx/version.rb +1 -1
- data/lib/wx/web/events/evt_list.rb +74 -0
- data/lib/wx/web/require.rb +8 -0
- data/lib/wx/web/webview.rb +106 -0
- data/lib/wx/web.rb +17 -0
- data/lib/wx/wxruby/cmd/setup.rb +15 -0
- data/lib/wx.rb +2 -0
- data/rakelib/configure.rb +24 -0
- data/rakelib/gem.rb +3 -2
- data/rakelib/install.rb +54 -27
- data/rakelib/lib/config/macosx.rb +7 -5
- data/rakelib/lib/config/mingw.rb +66 -5
- data/rakelib/lib/config/pkgman/mingw.rb +1 -1
- data/rakelib/lib/config/unixish.rb +4 -2
- data/rakelib/lib/config.rb +37 -3
- data/rakelib/lib/core/include/client_data.inc +38 -17
- data/rakelib/lib/core/include/funcall.inc +1 -1
- data/rakelib/lib/core/include/swigdirector.inc +3 -3
- data/rakelib/lib/core/include/swigrubyrun.inc +14 -26
- data/rakelib/lib/core/package.rb +0 -2
- data/rakelib/lib/director/app.rb +1 -8
- data/rakelib/lib/director/art_provider.rb +7 -3
- data/rakelib/lib/director/comboctrl.rb +0 -7
- data/rakelib/lib/director/context_help_button.rb +35 -2
- data/rakelib/lib/director/event_handler.rb +32 -28
- data/rakelib/lib/director/fs_file.rb +15 -10
- data/rakelib/lib/director/functions.rb +8 -0
- data/rakelib/lib/director/grid_cell_attr.rb +1 -3
- data/rakelib/lib/director/grid_cell_editor.rb +14 -12
- data/rakelib/lib/director/grid_cell_renderer.rb +11 -8
- data/rakelib/lib/director/grid_ctrl.rb +140 -121
- data/rakelib/lib/director/help_controller.rb +70 -2
- data/rakelib/lib/director/mb_conv.rb +30 -0
- data/rakelib/lib/director/menu.rb +92 -42
- data/rakelib/lib/director/menu_bar.rb +84 -45
- data/rakelib/lib/director/menu_item.rb +2 -2
- data/rakelib/lib/director/persistence_manager.rb +3 -2
- data/rakelib/lib/director/preview_frame.rb +2 -2
- data/rakelib/lib/director/richtext_buffer.rb +5 -2
- data/rakelib/lib/director/shared_evt_handler.rb +30 -0
- data/rakelib/lib/director/sizer.rb +8 -17
- data/rakelib/lib/director/sizer_item.rb +3 -4
- data/rakelib/lib/director/task_bar_icon.rb +7 -7
- data/rakelib/lib/director/thread_event.rb +33 -0
- data/rakelib/lib/director/validator.rb +3 -1
- data/rakelib/lib/director/variant.rb +16 -12
- data/rakelib/lib/director/webview.rb +166 -0
- data/rakelib/lib/director/webview_event.rb +37 -0
- data/rakelib/lib/director/webview_handler.rb +63 -0
- data/rakelib/lib/generate/doc/thread_event.yaml +20 -0
- data/rakelib/lib/generate/doc/web_view.yaml +135 -0
- data/rakelib/lib/generate/doc/web_view_event.yaml +38 -0
- data/rakelib/lib/generate/doc/web_view_handler.yaml +58 -0
- data/rakelib/lib/specs/interfaces.rb +12 -0
- data/rakelib/lib/typemap/common.rb +34 -1
- data/rakelib/lib/typemap/mb_conv.rb +58 -0
- data/rakelib/prepost.rake +23 -31
- data/rakelib/prepost.rb +20 -0
- data/samples/event/threaded.rb +295 -42
- data/samples/event/tn_threaded.png +0 -0
- data/samples/help/doc/back.gif +0 -0
- data/samples/help/doc/contents.gif +0 -0
- data/samples/help/doc/cshelp.txt +9 -0
- data/samples/help/doc/doc.chm +0 -0
- data/samples/help/doc/doc.cnt +8 -0
- data/samples/help/doc/doc.h +7 -0
- data/samples/help/doc/doc.hhc +40 -0
- data/samples/help/doc/doc.hhk +31 -0
- data/samples/help/doc/doc.hhp +33 -0
- data/samples/help/doc/doc.hpj +21 -0
- data/samples/help/doc/doc.htm +27 -0
- data/samples/help/doc/doc1.htm +24 -0
- data/samples/help/doc/doc2.htm +12 -0
- data/samples/help/doc/doc3.htm +12 -0
- data/samples/help/doc/doc4.htm +12 -0
- data/samples/help/doc/doc5.htm +14 -0
- data/samples/help/doc/forward.gif +0 -0
- data/samples/help/doc/up.gif +0 -0
- data/samples/help/doc.chm +0 -0
- data/samples/help/doc.chw +0 -0
- data/samples/help/doc.zip +0 -0
- data/samples/help/help.rb +352 -0
- data/samples/help/tn_help.png +0 -0
- data/samples/webview/handler_advanced.html +55 -0
- data/samples/webview/tn_webview.png +0 -0
- data/samples/webview/webview.rb +1264 -0
- data/tests/assets/handler_advanced.html +55 -0
- data/tests/assets/test.css +1 -0
- data/tests/assets/test.html +9 -0
- data/tests/assets/test.zip +0 -0
- data/tests/lib/text_entry_tests.rb +2 -2
- data/tests/lib/wxapp_runner.rb +40 -0
- data/tests/lib/wxframe_runner.rb +17 -2
- data/tests/test_art.rb +8 -8
- data/tests/test_clipboard.rb +4 -4
- data/tests/test_config.rb +6 -6
- data/tests/test_exceptions.rb +8 -6
- data/tests/test_ext_controls.rb +3 -3
- data/tests/test_file_dialog.rb +5 -5
- data/tests/test_font.rb +7 -7
- data/tests/test_grid_ctrl.rb +133 -0
- data/tests/test_help.rb +88 -0
- data/tests/test_intl.rb +1 -1
- data/tests/test_media_ctrl.rb +14 -6
- data/tests/test_menu.rb +94 -86
- data/tests/test_persistence.rb +1 -1
- data/tests/test_proof_check.rb +5 -5
- data/tests/test_propgrid.rb +1 -1
- data/tests/test_shared_event_handler.rb +141 -0
- data/tests/test_std_controls.rb +5 -5
- data/tests/test_webview.rb +492 -0
- data/tests/test_window.rb +3 -3
- metadata +78 -2
data/tests/test_media_ctrl.rb
CHANGED
|
@@ -13,7 +13,9 @@ class MediaCtrlTests < WxRuby::Test::GUITests
|
|
|
13
13
|
|
|
14
14
|
def setup
|
|
15
15
|
super
|
|
16
|
+
@media_loaded = false
|
|
16
17
|
@media = Wx::MediaCtrl.new(frame_win)
|
|
18
|
+
frame_win.evt_media_loaded(@media) {|_| @media_loaded = true }
|
|
17
19
|
end
|
|
18
20
|
|
|
19
21
|
def teardown
|
|
@@ -22,15 +24,21 @@ class MediaCtrlTests < WxRuby::Test::GUITests
|
|
|
22
24
|
end
|
|
23
25
|
|
|
24
26
|
attr_reader :media
|
|
27
|
+
attr_accessor :media_loaded
|
|
25
28
|
|
|
26
29
|
def test_uri
|
|
27
|
-
|
|
28
|
-
# it doesn't seem the mediactrl returns a very consistent result whether the resource is not a media file
|
|
29
|
-
# or if it is a non-existing file so only check whether it is a boolean return.
|
|
30
|
+
self.media_loaded = false
|
|
30
31
|
uri = URI("file://#{File.join(__dir__, 'media/beep_lo.wav')}")
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
assert_true(media.load(uri))
|
|
33
|
+
yield_and_wait_for_test(5000) { self.media_loaded }
|
|
34
|
+
assert_true(self.media_loaded) unless is_msw?
|
|
35
|
+
unless is_macos? || is_msw?
|
|
36
|
+
self.media_loaded = false
|
|
37
|
+
uri = URI("file://#{File.join(__dir__, 'art/test_art/image/wxruby.png')}")
|
|
38
|
+
assert_true(media.load(uri))
|
|
39
|
+
yield_and_wait_for_test(5000) { self.media_loaded }
|
|
40
|
+
assert_true(self.media_loaded)
|
|
41
|
+
end
|
|
34
42
|
end
|
|
35
43
|
|
|
36
44
|
end
|
data/tests/test_menu.rb
CHANGED
|
@@ -4,92 +4,98 @@
|
|
|
4
4
|
|
|
5
5
|
require_relative './lib/wxframe_runner'
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
7
|
+
class MenuTests < WxRuby::Test::GUITests
|
|
8
|
+
|
|
9
|
+
def setup
|
|
10
|
+
super
|
|
11
|
+
@menu = Wx::Menu.new
|
|
12
|
+
@menu.append(Wx::ID_HIGHEST+1, 'Item 1', 'Test menuitem 1')
|
|
13
|
+
@menu.append(Wx::ID_HIGHEST+2, 'Item 2', 'Test menuitem 2')
|
|
14
|
+
@menu.append_separator
|
|
15
|
+
@menu.append_check_item(Wx::ID_HIGHEST+3, 'Check 3', 'Test menuitem 3')
|
|
16
|
+
@menu.append_separator
|
|
17
|
+
@menu.append_radio_item(Wx::ID_HIGHEST+4, 'Radio 4', 'Test menuitem 4')
|
|
18
|
+
@menu.append_radio_item(Wx::ID_HIGHEST+5, 'Radio 5', 'Test menuitem 5')
|
|
19
|
+
@menu.append_radio_item(Wx::ID_HIGHEST+6, 'Radio 6', 'Test menuitem 6')
|
|
20
|
+
submenu = Wx::Menu.new
|
|
21
|
+
submenu.append_radio_item(Wx::ID_HIGHEST+8, 'Circle', 'Circle')
|
|
22
|
+
submenu.append_radio_item(Wx::ID_HIGHEST+9, 'Rectangle', 'Rectangle')
|
|
23
|
+
submenu.append_radio_item(Wx::ID_HIGHEST+10, 'Square', 'Square')
|
|
24
|
+
mi = Wx::MenuItem.new(@menu, Wx::ID_HIGHEST+7, 'Submenu', 'Open submenu', Wx::ITEM_NORMAL, submenu)
|
|
25
|
+
@menu.append(mi)
|
|
26
|
+
frame_win.menu_bar = Wx::MenuBar.new
|
|
27
|
+
frame_win.menu_bar.append(@menu, "&Test")
|
|
28
|
+
GC.start
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def teardown
|
|
32
|
+
frame_win.menu_bar = nil
|
|
33
|
+
super
|
|
34
|
+
GC.start
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
attr_reader :menu
|
|
38
|
+
|
|
39
|
+
def test_basic
|
|
40
|
+
assert_equal(9, menu.get_menu_item_count)
|
|
41
|
+
check, pos = menu.find_child_item(Wx::ID_HIGHEST+3)
|
|
42
|
+
assert_not_nil(check)
|
|
43
|
+
assert_equal(3, pos)
|
|
44
|
+
assert_equal('Check 3', check.item_label)
|
|
45
|
+
assert_false(check.checked?)
|
|
46
|
+
check.check
|
|
47
|
+
assert_true(check.checked?)
|
|
48
|
+
radio, pos = menu.find_child_item(Wx::ID_HIGHEST+5)
|
|
49
|
+
assert_not_nil(radio)
|
|
50
|
+
assert_equal(6, pos)
|
|
51
|
+
assert_equal('Radio 5', radio.item_label)
|
|
52
|
+
assert_false(radio.checked?)
|
|
53
|
+
radio.check
|
|
54
|
+
assert_true(radio.checked?)
|
|
55
|
+
radio, pos = menu.find_child_item(Wx::ID_HIGHEST+4)
|
|
56
|
+
assert_false(radio.checked?)
|
|
57
|
+
radio, pos = menu.find_child_item(Wx::ID_HIGHEST+6)
|
|
58
|
+
assert_false(radio.checked?)
|
|
59
|
+
radio.check
|
|
60
|
+
assert_true(radio.checked?)
|
|
61
|
+
radio, pos = menu.find_child_item(Wx::ID_HIGHEST+5)
|
|
62
|
+
assert_false(radio.checked?)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def test_enumerate
|
|
66
|
+
radio, pos = menu.find_child_item(Wx::ID_HIGHEST+4)
|
|
67
|
+
assert_true(radio.checked?) # first by default checked
|
|
68
|
+
menu.each_item do |mi|
|
|
69
|
+
mi.check if mi.id == (Wx::ID_HIGHEST+5)
|
|
70
|
+
end
|
|
71
|
+
radio, pos = menu.find_child_item(Wx::ID_HIGHEST+4)
|
|
72
|
+
assert_false(radio.checked?)
|
|
73
|
+
radio = menu.each_item.detect { |mi| mi.id == (Wx::ID_HIGHEST+5) }
|
|
74
|
+
assert_true(radio.checked?)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def test_accelerators
|
|
78
|
+
if Wx.has_feature?(:USE_ACCEL)
|
|
79
|
+
10.times do
|
|
80
|
+
accel_keys = { "Z" => Wx::ID_UNDO,
|
|
81
|
+
"Y" => Wx::ID_REDO,
|
|
82
|
+
"C" => Wx::ID_COPY,
|
|
83
|
+
"X" => Wx::ID_CUT,
|
|
84
|
+
"V" => Wx::ID_PASTE }
|
|
85
|
+
accel_table = accel_keys.keys.map do | key |
|
|
86
|
+
[ Wx::MOD_CMD, key, accel_keys[key] ]
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
accel_table = Wx::AcceleratorTable[ *accel_table ]
|
|
90
|
+
frame_win.accelerator_table = accel_table
|
|
91
|
+
assert_true(accel_table.ok?)
|
|
92
|
+
assert_true(frame_win.accelerator_table.ok?)
|
|
93
|
+
GC.start
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|
|
93
99
|
|
|
94
100
|
class UnattachedMenuTests < WxRuby::Test::GUITests
|
|
95
101
|
|
|
@@ -127,9 +133,11 @@ class UnattachedMenuTests < WxRuby::Test::GUITests
|
|
|
127
133
|
yield_for_a_while(200)
|
|
128
134
|
GC.start
|
|
129
135
|
@menu_bar.append(@menu, "&Test")
|
|
136
|
+
@menu = nil
|
|
130
137
|
yield_for_a_while(200)
|
|
131
138
|
GC.start
|
|
132
139
|
frame_win.menu_bar = @menu_bar
|
|
140
|
+
@menu_bar = nil
|
|
133
141
|
yield_for_a_while(200)
|
|
134
142
|
GC.start
|
|
135
143
|
frame_win.menu_bar = nil
|
data/tests/test_persistence.rb
CHANGED
|
@@ -53,7 +53,7 @@ class TopLevelPersistenceTests < WxRuby::Test::GUITests
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
# default registry based config does not seem to do well in CI build env
|
|
56
|
-
unless is_ci_build? &&
|
|
56
|
+
unless is_ci_build? && is_msw?
|
|
57
57
|
|
|
58
58
|
def test_frame_props_default_config
|
|
59
59
|
# force creation of default C++ config instance
|
data/tests/test_proof_check.rb
CHANGED
|
@@ -27,9 +27,9 @@ class MultilineProofCheckTests < WxRuby::Test::GUITests
|
|
|
27
27
|
Wx.get_app.yield
|
|
28
28
|
proof_opts = text.get_proof_check_options
|
|
29
29
|
assert_instance_of(Wx::TextProofOptions, proof_opts)
|
|
30
|
-
assert_true(proof_opts.is_spell_check_enabled) unless
|
|
30
|
+
assert_true(proof_opts.is_spell_check_enabled) unless is_gtk?
|
|
31
31
|
assert_false(proof_opts.is_grammar_check_enabled)
|
|
32
|
-
if
|
|
32
|
+
if !is_msw? || Wx::WXWIDGETS_VERSION >= '3.3'
|
|
33
33
|
assert_true(text.enable_proof_check(Wx::TextProofOptions.disable))
|
|
34
34
|
else
|
|
35
35
|
assert_false(text.enable_proof_check(Wx::TextProofOptions.disable)) # incorrect return value for WXMSW
|
|
@@ -37,13 +37,13 @@ class MultilineProofCheckTests < WxRuby::Test::GUITests
|
|
|
37
37
|
Wx.get_app.yield
|
|
38
38
|
proof_opts = text.get_proof_check_options
|
|
39
39
|
assert_instance_of(Wx::TextProofOptions, proof_opts)
|
|
40
|
-
assert_false(proof_opts.is_spell_check_enabled) unless
|
|
40
|
+
assert_false(proof_opts.is_spell_check_enabled) unless is_gtk?
|
|
41
41
|
assert_false(proof_opts.is_grammar_check_enabled)
|
|
42
42
|
assert_true(text.enable_proof_check(Wx::TextProofOptions.default.grammar_check(true)))
|
|
43
43
|
Wx.get_app.yield
|
|
44
44
|
proof_opts = text.get_proof_check_options
|
|
45
|
-
assert_true(proof_opts.is_spell_check_enabled) unless
|
|
46
|
-
assert_true(proof_opts.is_grammar_check_enabled) if
|
|
45
|
+
assert_true(proof_opts.is_spell_check_enabled) unless is_gtk?
|
|
46
|
+
assert_true(proof_opts.is_grammar_check_enabled) if is_macos?
|
|
47
47
|
|
|
48
48
|
end
|
|
49
49
|
|
data/tests/test_propgrid.rb
CHANGED
|
@@ -180,7 +180,7 @@ class PropGridTests < WxRuby::Test::GUITests
|
|
|
180
180
|
prop.set_attribute(Wx::PG::PG_DIALOG_TITLE,"Custom File Dialog Title")
|
|
181
181
|
prop.set_attribute(Wx::PG::PG_FILE_SHOW_FULL_PATH,false)
|
|
182
182
|
|
|
183
|
-
if
|
|
183
|
+
if is_msw?
|
|
184
184
|
prop.set_attribute(Wx::PG::PG_FILE_SHOW_RELATIVE_PATH,"C:\\Windows")
|
|
185
185
|
pg.set_property_value(prop,"C:\\Windows\\System32\\msvcrt71.dll")
|
|
186
186
|
end
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Copyright (c) 2023 M.J.N. Corino, The Netherlands
|
|
2
|
+
#
|
|
3
|
+
# This software is released under the MIT license.
|
|
4
|
+
|
|
5
|
+
require_relative './lib/wxframe_runner'
|
|
6
|
+
|
|
7
|
+
class TestEvent < Wx::RT::ThreadEvent
|
|
8
|
+
EVT_TEST_EVENT = Wx::EvtHandler.register_class(TestEvent, nil, 'evt_test_event', 0)
|
|
9
|
+
|
|
10
|
+
def initialize(id=0)
|
|
11
|
+
super(EVT_TEST_EVENT, id)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class WindowTests < WxRuby::Test::GUITests
|
|
17
|
+
|
|
18
|
+
def test_shared_handler
|
|
19
|
+
seh = frame_win.make_shared
|
|
20
|
+
assert_kind_of(Wx::RT::SharedEvtHandler, seh)
|
|
21
|
+
assert_true(Ractor.shareable?(seh))
|
|
22
|
+
seh2 = Ractor.make_shareable(seh)
|
|
23
|
+
assert_true(Ractor.shareable?(seh2))
|
|
24
|
+
assert_equal(seh, seh2)
|
|
25
|
+
seh3 = seh2.clone
|
|
26
|
+
assert_true(Ractor.shareable?(seh3))
|
|
27
|
+
assert_kind_of(Wx::RT::SharedEvtHandler, seh3)
|
|
28
|
+
assert_not_equal(seh, seh3)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def test_ractor_shareable
|
|
32
|
+
# unfortunately even in Ruby 4.0 Ractor is not 100% reliable on Windows
|
|
33
|
+
# and the CI builds block here from time to time so exclude this there
|
|
34
|
+
unless is_msw? && is_ci_build?
|
|
35
|
+
if RUBY_VERSION >= '4.0.0'
|
|
36
|
+
pin = Ractor::Port.new
|
|
37
|
+
pmon = Ractor::Port.new
|
|
38
|
+
seh = frame_win.make_shared
|
|
39
|
+
r = Ractor.new(seh, pin) do |seh_, pout|
|
|
40
|
+
pout.send(seh_.class)
|
|
41
|
+
pout.send(Ractor.shareable?(seh_))
|
|
42
|
+
end
|
|
43
|
+
r.monitor(pmon)
|
|
44
|
+
assert_equal(Wx::RT::SharedEvtHandler, pin.receive)
|
|
45
|
+
assert_true(pin.receive)
|
|
46
|
+
assert_equal(:exited, pmon.receive)
|
|
47
|
+
else
|
|
48
|
+
seh = frame_win.make_shared
|
|
49
|
+
r = Ractor.new(seh) do |seh_|
|
|
50
|
+
Ractor.yield(seh_.class)
|
|
51
|
+
Ractor.yield(Ractor.shareable?(seh_))
|
|
52
|
+
:exited
|
|
53
|
+
end
|
|
54
|
+
assert_equal(Wx::RT::SharedEvtHandler, r.take)
|
|
55
|
+
assert_true(r.take)
|
|
56
|
+
assert_equal(:exited, r.take)
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def test_ractor_thread_event
|
|
62
|
+
if RUBY_VERSION >= '4.0.0'
|
|
63
|
+
pin = Ractor::Port.new
|
|
64
|
+
pmon = Ractor::Port.new
|
|
65
|
+
seh = frame_win.make_shared
|
|
66
|
+
data_sent = nil
|
|
67
|
+
frame_win.evt_thread(Wx::ID_ANY) { |evt| data_sent = evt.get_int }
|
|
68
|
+
r = Ractor.new(seh, pin) do |seh_, pout|
|
|
69
|
+
sleep rand(100) / 50.0
|
|
70
|
+
pout.send(1)
|
|
71
|
+
evt = Wx::RT::ThreadEvent.new
|
|
72
|
+
evt.set_int(1)
|
|
73
|
+
seh_.queue_event(evt)
|
|
74
|
+
end
|
|
75
|
+
r.monitor(pmon)
|
|
76
|
+
|
|
77
|
+
yield_and_wait_for_test(3000) { data_sent }
|
|
78
|
+
assert_not_nil(data_sent)
|
|
79
|
+
assert_equal(data_sent, pin.receive)
|
|
80
|
+
assert_equal(:exited, pmon.receive)
|
|
81
|
+
else
|
|
82
|
+
seh = frame_win.make_shared
|
|
83
|
+
data_sent = nil
|
|
84
|
+
frame_win.evt_thread(Wx::ID_ANY) { |evt| data_sent = evt.get_int }
|
|
85
|
+
r = Ractor.new(seh) do |seh_|
|
|
86
|
+
sleep rand(100) / 50.0
|
|
87
|
+
evt = Wx::RT::ThreadEvent.new
|
|
88
|
+
evt.set_int(1)
|
|
89
|
+
seh_.queue_event(evt)
|
|
90
|
+
Ractor.yield(1)
|
|
91
|
+
:exited
|
|
92
|
+
end
|
|
93
|
+
yield_and_wait_for_test(10000) { data_sent }
|
|
94
|
+
r.close_outgoing if data_sent.nil? # prevent blocking on yield if we're not going to take
|
|
95
|
+
assert_not_nil(data_sent)
|
|
96
|
+
assert_equal(data_sent, r.take)
|
|
97
|
+
assert_equal(:exited, r.take)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def test_ractor_derived_thread_event
|
|
102
|
+
if RUBY_VERSION >= '4.0.0'
|
|
103
|
+
pin = Ractor::Port.new
|
|
104
|
+
pmon = Ractor::Port.new
|
|
105
|
+
seh = frame_win.make_shared
|
|
106
|
+
data_sent = nil
|
|
107
|
+
frame_win.evt_test_event { |evt| data_sent = evt.get_int }
|
|
108
|
+
r = Ractor.new(seh, pin) do |seh_, pout|
|
|
109
|
+
sleep rand(100) / 50.0
|
|
110
|
+
pout.send(1)
|
|
111
|
+
evt = TestEvent.new
|
|
112
|
+
evt.set_int(1)
|
|
113
|
+
seh_.queue_event(evt)
|
|
114
|
+
end
|
|
115
|
+
r.monitor(pmon)
|
|
116
|
+
|
|
117
|
+
yield_and_wait_for_test(3000) { data_sent }
|
|
118
|
+
assert_not_nil(data_sent)
|
|
119
|
+
assert_equal(data_sent, pin.receive)
|
|
120
|
+
assert_equal(:exited, pmon.receive)
|
|
121
|
+
else
|
|
122
|
+
seh = frame_win.make_shared
|
|
123
|
+
data_sent = nil
|
|
124
|
+
frame_win.evt_test_event { |evt| data_sent = evt.get_int }
|
|
125
|
+
r = Ractor.new(seh) do |seh_|
|
|
126
|
+
sleep rand(100) / 50.0
|
|
127
|
+
evt = TestEvent.new
|
|
128
|
+
evt.set_int(1)
|
|
129
|
+
seh_.queue_event(evt)
|
|
130
|
+
Ractor.yield(1)
|
|
131
|
+
:exited
|
|
132
|
+
end
|
|
133
|
+
yield_and_wait_for_test(10000) { data_sent }
|
|
134
|
+
r.close_outgoing if data_sent.nil? # prevent blocking on yield if we're not going to take
|
|
135
|
+
assert_not_nil(data_sent)
|
|
136
|
+
assert_equal(data_sent, r.take)
|
|
137
|
+
assert_equal(:exited, r.take)
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
end
|
data/tests/test_std_controls.rb
CHANGED
|
@@ -34,7 +34,7 @@ class ButtonTests < WxRuby::Test::GUITests
|
|
|
34
34
|
|
|
35
35
|
# This test occasionally fails in MSW/OSX CI builds but rarely
|
|
36
36
|
# in local builds
|
|
37
|
-
unless
|
|
37
|
+
unless !is_gtk? && is_ci_build?
|
|
38
38
|
assert_equal(1, count)
|
|
39
39
|
end
|
|
40
40
|
end
|
|
@@ -153,7 +153,7 @@ class TextCtrlTests < WxRuby::Test::GUITests
|
|
|
153
153
|
|
|
154
154
|
# This test occasionally fails in MSW/OSX CI builds but rarely
|
|
155
155
|
# in local builds
|
|
156
|
-
unless
|
|
156
|
+
unless !is_gtk? && is_ci_build?
|
|
157
157
|
assert_equal('Hello', text_entry.get_value)
|
|
158
158
|
assert_equal(5, c_upd.count)
|
|
159
159
|
end
|
|
@@ -163,7 +163,7 @@ class TextCtrlTests < WxRuby::Test::GUITests
|
|
|
163
163
|
|
|
164
164
|
# This test occasionally fails in MSW/OSX CI builds but rarely
|
|
165
165
|
# in local builds
|
|
166
|
-
unless
|
|
166
|
+
unless !is_gtk? && is_ci_build?
|
|
167
167
|
assert_equal('HelloWorld', text_entry.get_value)
|
|
168
168
|
assert_equal(10, c_upd.count)
|
|
169
169
|
assert_equal(0, c_maxlen.count)
|
|
@@ -173,7 +173,7 @@ class TextCtrlTests < WxRuby::Test::GUITests
|
|
|
173
173
|
|
|
174
174
|
# This test occasionally fails in MSW/OSX CI builds but rarely
|
|
175
175
|
# in local builds
|
|
176
|
-
unless
|
|
176
|
+
unless !is_gtk? && is_ci_build?
|
|
177
177
|
assert_equal('HelloWorld', text_entry.get_value)
|
|
178
178
|
assert_equal(10, c_upd.count)
|
|
179
179
|
assert_equal(1, c_maxlen.count)
|
|
@@ -502,7 +502,7 @@ class StaticBoxTests < WxRuby::Test::GUITests
|
|
|
502
502
|
assert_equal(box, txt.parent)
|
|
503
503
|
end
|
|
504
504
|
|
|
505
|
-
unless
|
|
505
|
+
unless is_macos?
|
|
506
506
|
|
|
507
507
|
def test_label_window
|
|
508
508
|
check = Wx::CheckBox.new(frame_win, Wx::ID_ANY, 'Enable')
|