wxruby3 0.9.0.pre.rc.1-x64-mingw-ucrt → 0.9.0.pre.rc.2-x64-mingw-ucrt
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 +51 -22
- data/README.md +38 -6
- data/assets/hello_button-macos.png +0 -0
- data/assets/hello_button-msw.png +0 -0
- data/assets/hello_button_clicked-macos.png +0 -0
- data/assets/hello_button_clicked-msw.png +0 -0
- data/assets/hello_button_clicked_combi.png +0 -0
- data/assets/hello_world-macos.png +0 -0
- data/assets/hello_world-msw.png +0 -0
- data/assets/hello_world_combi.png +0 -0
- data/ext/wxbase32u_gcc_custom.dll +0 -0
- data/ext/wxbase32u_net_gcc_custom.dll +0 -0
- data/ext/wxbase32u_xml_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_aui_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_core_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_gl_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_html_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_media_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_propgrid_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_qa_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_ribbon_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_richtext_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_stc_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_webview_gcc_custom.dll +0 -0
- data/ext/wxmsw32u_xrc_gcc_custom.dll +0 -0
- data/lib/wx/core/brush.rb +6 -0
- data/lib/wx/core/events/evt_list.rb +7 -0
- data/lib/wx/core/evthandler.rb +12 -2
- data/lib/wx/core/font.rb +22 -14
- data/lib/wx/core/helpprovider.rb +2 -2
- data/lib/wx/core/menu.rb +5 -0
- data/lib/wx/core/pen.rb +6 -0
- data/lib/wx/core/window.rb +28 -1
- data/lib/wx/doc/app.rb +40 -0
- data/lib/wx/doc/brush.rb +17 -0
- data/lib/wx/doc/font.rb +27 -0
- data/lib/wx/doc/gen/activity_indicator.rb +65 -0
- data/lib/wx/doc/gen/aui/aui_tool_bar.rb +2 -2
- data/lib/wx/doc/gen/context_help_button.rb +48 -0
- data/lib/wx/doc/gen/core.rb +2 -2
- data/lib/wx/doc/gen/event_blocker.rb +18 -16
- data/lib/wx/doc/gen/event_filter.rb +38 -45
- data/lib/wx/doc/gen/event_list.rb +7 -0
- data/lib/wx/doc/gen/file_dialog.rb +48 -49
- data/lib/wx/doc/gen/font.rb +9 -0
- data/lib/wx/doc/gen/hyperlink_ctrl.rb +147 -0
- data/lib/wx/doc/gen/hyperlink_event.rb +43 -0
- data/lib/wx/doc/gen/menu_bar.rb +0 -6
- data/lib/wx/doc/gen/radio_box.rb +0 -8
- data/lib/wx/doc/pen.rb +17 -0
- data/lib/wx/doc/radio_box.rb +20 -0
- data/lib/wx/doc/window.rb +27 -0
- data/lib/wx/keyword_defs.rb +77 -76
- data/lib/wx/prt/keyword_defs.rb +5 -1
- data/lib/wx/version.rb +1 -1
- data/lib/wxruby_aui.so +0 -0
- data/lib/wxruby_core.so +0 -0
- data/lib/wxruby_grid.so +0 -0
- data/lib/wxruby_html.so +0 -0
- data/lib/wxruby_pg.so +0 -0
- data/lib/wxruby_prt.so +0 -0
- data/lib/wxruby_rbn.so +0 -0
- data/lib/wxruby_rtc.so +0 -0
- data/lib/wxruby_stc.so +0 -0
- data/rakelib/install.rb +17 -6
- data/rakelib/lib/config/linux.rb +4 -2
- data/rakelib/lib/config/macosx.rb +120 -1
- data/rakelib/lib/config/mingw.rb +6 -1
- data/rakelib/lib/config/unixish.rb +26 -11
- data/rakelib/lib/config.rb +15 -6
- data/samples/aui/aui.rb +432 -363
- data/samples/propgrid/propgrid.rb +3 -0
- data/samples/sampler/editor.rb +33 -25
- data/samples/sampler/sample.rb +2 -2
- data/samples/sampler/stc_editor.rb +4 -2
- data/tests/lib/item_container_tests.rb +82 -0
- data/tests/lib/text_entry_tests.rb +80 -0
- data/tests/lib/wxapp_runner.rb +12 -0
- data/tests/lib/wxframe_runner.rb +89 -4
- data/tests/test_ext_controls.rb +28 -0
- data/tests/test_font.rb +239 -0
- data/tests/test_intl.rb +5 -1
- data/tests/test_std_controls.rb +263 -37
- data/tests/test_window.rb +340 -0
- metadata +25 -2
@@ -603,6 +603,9 @@ class FormMain < Wx::Frame
|
|
603
603
|
menuHelp = Wx::Menu.new
|
604
604
|
|
605
605
|
menuHelp.append(ID::ABOUT, '&About', 'Show about dialog')
|
606
|
+
if Wx::PLATFORM == 'WXOSX'
|
607
|
+
Wx.get_app.mac_about_menu_itemid = ID::ABOUT
|
608
|
+
end
|
606
609
|
|
607
610
|
menuTools1.append(ID::APPENDPROP, 'Append New Property')
|
608
611
|
menuTools1.append(ID::APPENDCAT, "Append New Category\tCtrl-S")
|
data/samples/sampler/editor.rb
CHANGED
@@ -34,8 +34,8 @@ module WxRuby
|
|
34
34
|
end
|
35
35
|
|
36
36
|
class SampleEditPanel
|
37
|
-
def initialize(parent, sample)
|
38
|
-
@frame =
|
37
|
+
def initialize(frame, parent, sample)
|
38
|
+
@frame = frame
|
39
39
|
@sample = sample
|
40
40
|
@splitter = Wx::SplitterWindow.new(parent, Wx::ID_ANY)
|
41
41
|
|
@@ -67,6 +67,8 @@ module WxRuby
|
|
67
67
|
@edt_book.set_selection(0)
|
68
68
|
end
|
69
69
|
|
70
|
+
attr_reader :splitter
|
71
|
+
|
70
72
|
def add_editor_page(filename, pgnr)
|
71
73
|
panel = Wx::Panel.new(@edt_book, Wx::ID_ANY)
|
72
74
|
edt_sizer = Wx::HBoxSizer.new
|
@@ -306,30 +308,36 @@ module WxRuby
|
|
306
308
|
menuBar.append(menuHelp, "&Help")
|
307
309
|
set_menu_bar(menuBar)
|
308
310
|
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
311
|
+
panel = Wx::Panel.new(self)
|
312
|
+
panel_szr = Wx::VBoxSizer.new
|
313
|
+
@tbar = Wx::ToolBar.new(panel, style: Wx::TB_HORIZONTAL | Wx::NO_BORDER | Wx::TB_FLAT)
|
314
|
+
@tbar.tool_bitmap_size = [ 16, 16 ]
|
315
|
+
@tbar.add_tool(ID::SAVE, 'Save', bitmap(:filesave), 'Save the sample to a local folder')
|
316
|
+
@tbar.add_tool(ID::RUN, 'Run', bitmap(:play), 'Run the (changed) sample')
|
317
|
+
@tbar.add_separator
|
318
|
+
@tbar.add_tool(ID::UNDO, 'Undo', bitmap(:undo), 'Undo change')
|
319
|
+
@tbar.add_tool(ID::REDO, 'Redo', bitmap(:redo), 'Redo change')
|
320
|
+
@tbar.add_separator
|
321
|
+
@tbar.add_tool(ID::COPY, 'Copy', bitmap(:copy), 'Copy selection')
|
322
|
+
@tbar.add_tool(ID::CUT, 'Cut', bitmap(:cut), 'Cut selection')
|
323
|
+
@tbar.add_tool(ID::PASTE, 'Paste', bitmap(:paste), 'Paste selection')
|
324
|
+
@tbar.add_separator
|
325
|
+
@tbar.add_tool(ID::FIND, 'Find', bitmap(:find), 'Show Find Dialog')
|
326
|
+
@tbar.add_tool(ID::FIND_NEXT, 'FindNext', bitmap(:forward), 'Find next occurrence of the search phrase')
|
327
|
+
@tbar.add_tool(ID::FIND_PREV, 'FindPrev', bitmap(:back), 'Find previous occurrence of the search phrase')
|
328
|
+
@tbar.add_tool(ID::REPLACE, 'Replace', bitmap(:findrepl), 'Show Replace Dialog')
|
329
|
+
@tbar.realize
|
330
|
+
panel_szr.add(@tbar)
|
331
|
+
|
332
|
+
# Create the editor panel
|
333
|
+
@editors = SampleEditPanel.new(self, panel, @sample)
|
334
|
+
panel_szr.add(@editors.splitter, 1, Wx::GROW, 0)
|
335
|
+
|
336
|
+
panel.set_sizer(panel_szr)
|
326
337
|
|
327
338
|
create_status_bar(1)
|
328
339
|
set_status_text("Welcome to wxRuby Sample editor.")
|
329
340
|
|
330
|
-
# Create the editor panel
|
331
|
-
@editors = SampleEditPanel.new(self, @sample)
|
332
|
-
|
333
341
|
evt_idle(:on_idle)
|
334
342
|
|
335
343
|
evt_update_editor_ui(:on_update_editor_ui)
|
@@ -382,15 +390,15 @@ module WxRuby
|
|
382
390
|
def update_undo_redo(f_undo, f_redo)
|
383
391
|
@m_undo.enable(f_undo)
|
384
392
|
@m_redo.enable(f_redo)
|
385
|
-
|
386
|
-
|
393
|
+
@tbar.enable_tool(ID::UNDO, f_undo)
|
394
|
+
@tbar.enable_tool(ID::REDO, f_redo)
|
387
395
|
set_status_text('')
|
388
396
|
end
|
389
397
|
private :update_undo_redo
|
390
398
|
|
391
399
|
def update_paste(f_paste)
|
392
400
|
@m_paste.enable(f_paste)
|
393
|
-
|
401
|
+
@tbar.enable_tool(ID::PASTE, f_paste)
|
394
402
|
set_status_text('')
|
395
403
|
end
|
396
404
|
|
data/samples/sampler/sample.rb
CHANGED
@@ -293,7 +293,7 @@ module WxRuby
|
|
293
293
|
category.modulize!
|
294
294
|
Dir[File.join(entry, '*.rb')].each do |rb|
|
295
295
|
# only if this is a file (paranoia check) and contains 'include WxRuby::Sample'
|
296
|
-
if File.file?(rb) && (sample_lns = File.readlines(rb)).any? { |ln| /\s+include\s+WxRuby::Sample/ =~ ln }
|
296
|
+
if File.file?(rb) && (sample_lns = File.readlines(rb, encoding: 'utf-8')).any? { |ln| /\s+include\s+WxRuby::Sample/ =~ ln }
|
297
297
|
# register currently required files
|
298
298
|
cur_loaded = ::Set.new($LOADED_FEATURES)
|
299
299
|
@loading_sample = rb
|
@@ -302,7 +302,7 @@ module WxRuby
|
|
302
302
|
# in the class/module scope in which the dialog class is defined working from the dialog class name;
|
303
303
|
# this will fail for anonymous modules as these cannot be identified by name)
|
304
304
|
sample_mod = Sample.const_set("SampleLoader_#{File.basename(rb, '.*').modulize!}", Module.new)
|
305
|
-
sample_mod.module_eval File.read(rb), rb, 1
|
305
|
+
sample_mod.module_eval File.read(rb, encoding: 'utf-8'), rb, 1
|
306
306
|
# determine additionally required files
|
307
307
|
new_loaded = ::Set.new($LOADED_FEATURES) - cur_loaded
|
308
308
|
sample_captures.each do |mod|
|
@@ -114,8 +114,9 @@ module WxRuby
|
|
114
114
|
|
115
115
|
def default_theme
|
116
116
|
c_maroon = Wx::Colour.new('Maroon')
|
117
|
-
style_set_foreground(Wx::STC::STC_STYLE_DEFAULT, Wx::BLACK)
|
118
|
-
style_set_background(Wx::STC::STC_STYLE_DEFAULT, Wx::WHITE)
|
117
|
+
style_set_foreground(Wx::STC::STC_STYLE_DEFAULT, Wx::BLACK)
|
118
|
+
style_set_background(Wx::STC::STC_STYLE_DEFAULT, Wx::WHITE)
|
119
|
+
set_caret_foreground(Wx::BLACK)
|
119
120
|
style_clear_all
|
120
121
|
style_set_foreground(Wx::STC::STC_STYLE_LINENUMBER, Wx::Colour.new('Dark Grey'))
|
121
122
|
style_set_background(Wx::STC::STC_STYLE_LINENUMBER, Wx::WHITE);
|
@@ -160,6 +161,7 @@ module WxRuby
|
|
160
161
|
c_str = Wx::Colour.new('Lime Green')
|
161
162
|
style_set_background(Wx::STC::STC_STYLE_DEFAULT, bg)
|
162
163
|
style_set_foreground(Wx::STC::STC_STYLE_DEFAULT, Wx::WHITE)
|
164
|
+
set_caret_foreground(Wx::WHITE)
|
163
165
|
style_clear_all
|
164
166
|
style_set_background(Wx::STC::STC_STYLE_LINENUMBER, bg)
|
165
167
|
style_set_foreground(Wx::STC::STC_STYLE_LINENUMBER, Wx::WHITE)
|
@@ -0,0 +1,82 @@
|
|
1
|
+
|
2
|
+
module ItemContainerTests
|
3
|
+
|
4
|
+
def test_ic_append
|
5
|
+
container.append("item 0")
|
6
|
+
|
7
|
+
assert_equal("item 0", container.get_string(0))
|
8
|
+
|
9
|
+
container.append(['item 1', 'item 2'])
|
10
|
+
|
11
|
+
assert_equal("item 1", container.get_string(1))
|
12
|
+
assert_equal("item 2", container.get_string(2))
|
13
|
+
|
14
|
+
container.append(['item 3', 'item 4'])
|
15
|
+
|
16
|
+
assert_equal("item 3", container.get_string(3))
|
17
|
+
assert_equal("item 4", container.get_string(4))
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_ic_insert
|
21
|
+
assert_equal(0, container.insert("item 0", 0))
|
22
|
+
assert_equal("item 0", container.get_string(0))
|
23
|
+
|
24
|
+
assert_equal(1, container.insert(['item 1', 'item 2'], 0))
|
25
|
+
|
26
|
+
assert_equal("item 1", container.get_string(0))
|
27
|
+
assert_equal("item 2", container.get_string(1))
|
28
|
+
|
29
|
+
assert_equal(2, container.insert(['item 3', 'item 4'], 1))
|
30
|
+
assert_equal("item 3", container.get_string(1))
|
31
|
+
assert_equal("item 4", container.get_string(2))
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_ic_count
|
35
|
+
assert(container.empty?)
|
36
|
+
assert_with_assertion_failure { container.get_string(0) }
|
37
|
+
|
38
|
+
container.append(['item 0', 'item 1', 'item 2', 'item 3'])
|
39
|
+
|
40
|
+
assert(!container.empty?)
|
41
|
+
assert_equal(4, container.count)
|
42
|
+
|
43
|
+
container.delete(0)
|
44
|
+
|
45
|
+
assert_equal(3, container.count)
|
46
|
+
|
47
|
+
container.delete(0)
|
48
|
+
container.delete(0)
|
49
|
+
|
50
|
+
assert_equal(1, container.count)
|
51
|
+
|
52
|
+
container.insert(['item 0', 'item 1', 'item 2', 'item 3'], 1)
|
53
|
+
|
54
|
+
assert_equal(5, container.count)
|
55
|
+
assert_with_assertion_failure { container.get_string(10) }
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_ic_item_selection
|
59
|
+
container.append(['item 0', 'item 1', 'item 2', 'ITEM 2'])
|
60
|
+
|
61
|
+
container.set_selection(Wx::NOT_FOUND)
|
62
|
+
assert_equal(Wx::NOT_FOUND, container.get_selection)
|
63
|
+
assert_equal("", container.get_string_selection)
|
64
|
+
|
65
|
+
container.set_selection(1)
|
66
|
+
assert_equal(1, container.get_selection)
|
67
|
+
assert_equal("item 1", container.get_string_selection)
|
68
|
+
|
69
|
+
assert(container.set_string_selection("item 2"))
|
70
|
+
assert_equal(2, container.get_selection)
|
71
|
+
assert_equal("item 2", container.get_string_selection)
|
72
|
+
|
73
|
+
# Check that selecting a non-existent item fails.
|
74
|
+
assert(!container.set_string_selection("bloordyblop"))
|
75
|
+
|
76
|
+
# Check that SetStringSelection() is case-insensitive.
|
77
|
+
assert(container.set_string_selection("ITEM 2"))
|
78
|
+
assert_equal(2, container.get_selection)
|
79
|
+
assert_equal("item 2", container.get_string_selection)
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
|
2
|
+
module TextEntryTests
|
3
|
+
|
4
|
+
def test_te_set_value
|
5
|
+
text_entry.set_focus # removes the 'Hint' test which in GTK2 causes problems
|
6
|
+
assert(text_entry.empty?)
|
7
|
+
|
8
|
+
text_entry.value = 'foo'
|
9
|
+
assert_equal('foo', text_entry.value)
|
10
|
+
|
11
|
+
text_entry.value = ''
|
12
|
+
assert(text_entry.empty?)
|
13
|
+
|
14
|
+
text_entry.value = 'hi'
|
15
|
+
assert_equal('hi', text_entry.value)
|
16
|
+
|
17
|
+
text_entry.value = 'bye'
|
18
|
+
assert_equal('bye', text_entry.value)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_te_text_change_events
|
22
|
+
updates = count_events(text_entry, :evt_text) do |c_upd|
|
23
|
+
|
24
|
+
# WXQT only sends event when text changes
|
25
|
+
unless Wx::PLATFORM == 'WXQT'
|
26
|
+
text_entry.value = ''
|
27
|
+
assert_equal(1, c_upd.count)
|
28
|
+
c_upd.count = 0
|
29
|
+
end
|
30
|
+
|
31
|
+
text_entry.value = 'foo'
|
32
|
+
assert_equal(1, c_upd.count)
|
33
|
+
c_upd.count = 0
|
34
|
+
|
35
|
+
# WXQT only sends event when text changes
|
36
|
+
unless Wx::PLATFORM == 'WXQT'
|
37
|
+
text_entry.value = 'foo'
|
38
|
+
assert_equal(1, c_upd.count)
|
39
|
+
c_upd.count = 0
|
40
|
+
end
|
41
|
+
|
42
|
+
text_entry.value = ''
|
43
|
+
assert_equal(1, c_upd.count)
|
44
|
+
c_upd.count = 0
|
45
|
+
|
46
|
+
text_entry.change_value('bar')
|
47
|
+
assert_equal(0, c_upd.count)
|
48
|
+
|
49
|
+
text_entry.append_text('bar')
|
50
|
+
assert_equal(1, c_upd.count)
|
51
|
+
c_upd.count = 0
|
52
|
+
|
53
|
+
text_entry.replace(3, 6, 'baz')
|
54
|
+
assert_equal(1, c_upd.count)
|
55
|
+
c_upd.count = 0
|
56
|
+
|
57
|
+
text_entry.remove(0, 3)
|
58
|
+
assert_equal(1, c_upd.count)
|
59
|
+
c_upd.count = 0
|
60
|
+
|
61
|
+
text_entry.write_text('foo')
|
62
|
+
assert_equal(1, c_upd.count)
|
63
|
+
c_upd.count = 0
|
64
|
+
|
65
|
+
text_entry.clear
|
66
|
+
assert_equal(1, c_upd.count)
|
67
|
+
c_upd.count = 0
|
68
|
+
|
69
|
+
text_entry.change_value('')
|
70
|
+
assert_equal(0, c_upd.count)
|
71
|
+
|
72
|
+
text_entry.change_value('non-empty')
|
73
|
+
assert_equal(0, c_upd.count)
|
74
|
+
|
75
|
+
text_entry.change_value('')
|
76
|
+
assert_equal(0, c_upd.count)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
data/tests/lib/wxapp_runner.rb
CHANGED
data/tests/lib/wxframe_runner.rb
CHANGED
@@ -6,7 +6,27 @@ module WxRuby
|
|
6
6
|
module Test
|
7
7
|
|
8
8
|
class App < Wx::App
|
9
|
+
|
10
|
+
Assert = Struct.new(:file, :line, :func, :condition, :message)
|
11
|
+
|
12
|
+
class AssertFailureSink
|
13
|
+
def initialize
|
14
|
+
@asserts = []
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_reader :asserts
|
18
|
+
|
19
|
+
def asserts?
|
20
|
+
!@asserts.empty?
|
21
|
+
end
|
22
|
+
|
23
|
+
def <<(assert)
|
24
|
+
@asserts << assert
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
9
28
|
def on_init
|
29
|
+
@assert_sink = nil
|
10
30
|
@tests_have_run = false
|
11
31
|
evt_idle :on_idle
|
12
32
|
@frame = Wx::Frame.new(nil, size: [600,400])
|
@@ -21,6 +41,30 @@ module WxRuby
|
|
21
41
|
end
|
22
42
|
|
23
43
|
attr_reader :frame
|
44
|
+
|
45
|
+
def open_assert_sink
|
46
|
+
@assert_sink = AssertFailureSink.new
|
47
|
+
end
|
48
|
+
|
49
|
+
def close_assert_sink
|
50
|
+
@assert_sink = nil
|
51
|
+
end
|
52
|
+
|
53
|
+
def asserts
|
54
|
+
@assert_sink.asserts
|
55
|
+
end
|
56
|
+
|
57
|
+
def asserts?
|
58
|
+
@assert_sink.asserts?
|
59
|
+
end
|
60
|
+
|
61
|
+
def on_assert_failure(file, line, func, condition, message)
|
62
|
+
if @assert_sink
|
63
|
+
@assert_sink << Assert.new(file, line, func, condition, message)
|
64
|
+
else
|
65
|
+
super
|
66
|
+
end
|
67
|
+
end
|
24
68
|
end
|
25
69
|
|
26
70
|
class GUITests < ::Test::Unit::TestCase
|
@@ -38,20 +82,61 @@ module WxRuby
|
|
38
82
|
def inc
|
39
83
|
@count +=1
|
40
84
|
end
|
85
|
+
|
86
|
+
def wait_event(msec)
|
87
|
+
start = Time.now
|
88
|
+
msec /= 1000.0
|
89
|
+
while (Time.now - start) < msec
|
90
|
+
Wx.get_app.yield
|
91
|
+
if @count > 0
|
92
|
+
raise StandardError.new("Too many events. Expected a single one.") unless @count == 1
|
93
|
+
@count = 0
|
94
|
+
return true
|
95
|
+
end
|
96
|
+
sleep(50.0/1000.0)
|
97
|
+
end
|
98
|
+
false
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.has_ui_simulator?
|
103
|
+
Wx.has_feature?(:USE_UIACTIONSIMULATOR) && (Wx::PLATFORM != 'WXOSX' || Wx::WXWIDGETS_VERSION >= '3.3')
|
104
|
+
end
|
105
|
+
|
106
|
+
def has_ui_simulator?
|
107
|
+
GUITests.has_ui_simulator?
|
41
108
|
end
|
42
109
|
|
43
110
|
def count_events(win, evt, id1=Wx::ID_ANY, id2=nil)
|
44
111
|
return 0 unless block_given?
|
45
112
|
evt_count = EventCounter.new
|
46
|
-
if
|
47
|
-
win.event_handler.send(evt.to_sym,
|
113
|
+
if Wx::EvtHandler.event_type_arity(evt) == 0
|
114
|
+
win.event_handler.send(evt.to_sym, ->(evt){ evt_count.inc; evt.skip if !evt.command_event? })
|
115
|
+
elsif id2.nil?
|
116
|
+
win.event_handler.send(evt.to_sym, id1, ->(evt){ evt_count.inc; evt.skip if !evt.command_event? })
|
48
117
|
else
|
49
|
-
win.event_handler.send(evt.to_sym, id1, id2, ->(
|
118
|
+
win.event_handler.send(evt.to_sym, id1, id2, ->(evt){ evt_count.inc; evt.skip if !evt.command_event? })
|
119
|
+
end
|
120
|
+
begin
|
121
|
+
yield evt_count
|
122
|
+
ensure
|
123
|
+
win.event_handler.disconnect(id1, id2 || Wx::ID_ANY, evt.to_sym)
|
50
124
|
end
|
51
|
-
yield evt_count
|
52
125
|
evt_count.count
|
53
126
|
end
|
54
127
|
|
128
|
+
def assert_with_assertion_failure(max_asserts: nil, func: nil, &block)
|
129
|
+
Wx.get_app.open_assert_sink
|
130
|
+
begin
|
131
|
+
block.call
|
132
|
+
raise StandardError.new('No Wx assertion failure captured!') unless Wx.get_app.asserts?
|
133
|
+
raise StandardError.new("Too many assertion failures captures! Expected max #{max_asserts}, captured #{Wx.get_app.asserts.size}") if max_asserts && max_asserts < Wx.get_app.asserts.size
|
134
|
+
raise StandardError.new("Unexpected assertions failures. Expected assertion failure from #{func} but captured assertions from #{Wx.get_app.asserts.collect {|a| a.func } }") if func && !Wx.get_app.asserts.any? { |a| a.func == func }
|
135
|
+
ensure
|
136
|
+
Wx.get_app.close_assert_sink
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
55
140
|
end
|
56
141
|
|
57
142
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
require_relative './lib/wxframe_runner'
|
3
|
+
require_relative './lib/text_entry_tests'
|
4
|
+
|
5
|
+
class SearchCtrlTests < WxRuby::Test::GUITests
|
6
|
+
|
7
|
+
include TextEntryTests
|
8
|
+
|
9
|
+
def setup
|
10
|
+
super
|
11
|
+
@search = Wx::SearchCtrl.new(test_frame, name: 'SearchCtrl')
|
12
|
+
Wx.get_app.yield
|
13
|
+
end
|
14
|
+
|
15
|
+
def cleanup
|
16
|
+
@search.destroy
|
17
|
+
Wx.get_app.yield
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_reader :search
|
22
|
+
alias :text_entry :search
|
23
|
+
|
24
|
+
def test_search
|
25
|
+
assert_equal('', search.get_value)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|