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.
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