wxruby3 0.9.0.pre.rc.1-x64-mingw-ucrt → 0.9.0.pre.rc.2-x64-mingw-ucrt

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/INSTALL.md +51 -22
  3. data/README.md +38 -6
  4. data/assets/hello_button-macos.png +0 -0
  5. data/assets/hello_button-msw.png +0 -0
  6. data/assets/hello_button_clicked-macos.png +0 -0
  7. data/assets/hello_button_clicked-msw.png +0 -0
  8. data/assets/hello_button_clicked_combi.png +0 -0
  9. data/assets/hello_world-macos.png +0 -0
  10. data/assets/hello_world-msw.png +0 -0
  11. data/assets/hello_world_combi.png +0 -0
  12. data/ext/wxbase32u_gcc_custom.dll +0 -0
  13. data/ext/wxbase32u_net_gcc_custom.dll +0 -0
  14. data/ext/wxbase32u_xml_gcc_custom.dll +0 -0
  15. data/ext/wxmsw32u_aui_gcc_custom.dll +0 -0
  16. data/ext/wxmsw32u_core_gcc_custom.dll +0 -0
  17. data/ext/wxmsw32u_gl_gcc_custom.dll +0 -0
  18. data/ext/wxmsw32u_html_gcc_custom.dll +0 -0
  19. data/ext/wxmsw32u_media_gcc_custom.dll +0 -0
  20. data/ext/wxmsw32u_propgrid_gcc_custom.dll +0 -0
  21. data/ext/wxmsw32u_qa_gcc_custom.dll +0 -0
  22. data/ext/wxmsw32u_ribbon_gcc_custom.dll +0 -0
  23. data/ext/wxmsw32u_richtext_gcc_custom.dll +0 -0
  24. data/ext/wxmsw32u_stc_gcc_custom.dll +0 -0
  25. data/ext/wxmsw32u_webview_gcc_custom.dll +0 -0
  26. data/ext/wxmsw32u_xrc_gcc_custom.dll +0 -0
  27. data/lib/wx/core/brush.rb +6 -0
  28. data/lib/wx/core/events/evt_list.rb +7 -0
  29. data/lib/wx/core/evthandler.rb +12 -2
  30. data/lib/wx/core/font.rb +22 -14
  31. data/lib/wx/core/helpprovider.rb +2 -2
  32. data/lib/wx/core/menu.rb +5 -0
  33. data/lib/wx/core/pen.rb +6 -0
  34. data/lib/wx/core/window.rb +28 -1
  35. data/lib/wx/doc/app.rb +40 -0
  36. data/lib/wx/doc/brush.rb +17 -0
  37. data/lib/wx/doc/font.rb +27 -0
  38. data/lib/wx/doc/gen/activity_indicator.rb +65 -0
  39. data/lib/wx/doc/gen/aui/aui_tool_bar.rb +2 -2
  40. data/lib/wx/doc/gen/context_help_button.rb +48 -0
  41. data/lib/wx/doc/gen/core.rb +2 -2
  42. data/lib/wx/doc/gen/event_blocker.rb +18 -16
  43. data/lib/wx/doc/gen/event_filter.rb +38 -45
  44. data/lib/wx/doc/gen/event_list.rb +7 -0
  45. data/lib/wx/doc/gen/file_dialog.rb +48 -49
  46. data/lib/wx/doc/gen/font.rb +9 -0
  47. data/lib/wx/doc/gen/hyperlink_ctrl.rb +147 -0
  48. data/lib/wx/doc/gen/hyperlink_event.rb +43 -0
  49. data/lib/wx/doc/gen/menu_bar.rb +0 -6
  50. data/lib/wx/doc/gen/radio_box.rb +0 -8
  51. data/lib/wx/doc/pen.rb +17 -0
  52. data/lib/wx/doc/radio_box.rb +20 -0
  53. data/lib/wx/doc/window.rb +27 -0
  54. data/lib/wx/keyword_defs.rb +77 -76
  55. data/lib/wx/prt/keyword_defs.rb +5 -1
  56. data/lib/wx/version.rb +1 -1
  57. data/lib/wxruby_aui.so +0 -0
  58. data/lib/wxruby_core.so +0 -0
  59. data/lib/wxruby_grid.so +0 -0
  60. data/lib/wxruby_html.so +0 -0
  61. data/lib/wxruby_pg.so +0 -0
  62. data/lib/wxruby_prt.so +0 -0
  63. data/lib/wxruby_rbn.so +0 -0
  64. data/lib/wxruby_rtc.so +0 -0
  65. data/lib/wxruby_stc.so +0 -0
  66. data/rakelib/install.rb +17 -6
  67. data/rakelib/lib/config/linux.rb +4 -2
  68. data/rakelib/lib/config/macosx.rb +120 -1
  69. data/rakelib/lib/config/mingw.rb +6 -1
  70. data/rakelib/lib/config/unixish.rb +26 -11
  71. data/rakelib/lib/config.rb +15 -6
  72. data/samples/aui/aui.rb +432 -363
  73. data/samples/propgrid/propgrid.rb +3 -0
  74. data/samples/sampler/editor.rb +33 -25
  75. data/samples/sampler/sample.rb +2 -2
  76. data/samples/sampler/stc_editor.rb +4 -2
  77. data/tests/lib/item_container_tests.rb +82 -0
  78. data/tests/lib/text_entry_tests.rb +80 -0
  79. data/tests/lib/wxapp_runner.rb +12 -0
  80. data/tests/lib/wxframe_runner.rb +89 -4
  81. data/tests/test_ext_controls.rb +28 -0
  82. data/tests/test_font.rb +239 -0
  83. data/tests/test_intl.rb +5 -1
  84. data/tests/test_std_controls.rb +263 -37
  85. data/tests/test_window.rb +340 -0
  86. 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")
@@ -34,8 +34,8 @@ module WxRuby
34
34
  end
35
35
 
36
36
  class SampleEditPanel
37
- def initialize(parent, sample)
38
- @frame = parent
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
- tb = create_tool_bar(Wx::TB_HORIZONTAL | Wx::NO_BORDER | Wx::TB_FLAT)
310
- tb.tool_bitmap_size = [ 16, 16 ]
311
- tb.add_tool(ID::SAVE, 'Save', bitmap(:filesave), 'Save the sample to a local folder')
312
- tb.add_tool(ID::RUN, 'Run', bitmap(:play), 'Run the (changed) sample')
313
- tb.add_separator
314
- tb.add_tool(ID::UNDO, 'Undo', bitmap(:undo), 'Undo change')
315
- tb.add_tool(ID::REDO, 'Redo', bitmap(:redo), 'Redo change')
316
- tb.add_separator
317
- tb.add_tool(ID::COPY, 'Copy', bitmap(:copy), 'Copy selection')
318
- tb.add_tool(ID::CUT, 'Cut', bitmap(:cut), 'Cut selection')
319
- tb.add_tool(ID::PASTE, 'Paste', bitmap(:paste), 'Paste selection')
320
- tb.add_separator
321
- tb.add_tool(ID::FIND, 'Find', bitmap(:find), 'Show Find Dialog')
322
- tb.add_tool(ID::FIND_NEXT, 'FindNext', bitmap(:forward), 'Find next occurrence of the search phrase')
323
- tb.add_tool(ID::FIND_PREV, 'FindPrev', bitmap(:back), 'Find previous occurrence of the search phrase')
324
- tb.add_tool(ID::REPLACE, 'Replace', bitmap(:findrepl), 'Show Replace Dialog')
325
- tb.realize
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
- self.tool_bar.enable_tool(ID::UNDO, f_undo)
386
- self.tool_bar.enable_tool(ID::REDO, f_redo)
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
- self.tool_bar.enable_tool(ID::PASTE, f_paste)
401
+ @tbar.enable_tool(ID::PASTE, f_paste)
394
402
  set_status_text('')
395
403
  end
396
404
 
@@ -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
@@ -60,5 +60,17 @@ module Test
60
60
  end
61
61
  end
62
62
  end
63
+
64
+ class TestCase
65
+
66
+ def self.is_ci_build?
67
+ !!ENV['GITHUB_ACTION']
68
+ end
69
+
70
+ def is_ci_build?
71
+ TestCase.is_ci_build?
72
+ end
73
+
74
+ end
63
75
  end
64
76
  end
@@ -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 id2.nil?
47
- win.event_handler.send(evt.to_sym, id1, ->(_evt){ evt_count.inc })
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, ->(_evt){ evt_count.inc })
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