wxruby3 0.9.0 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +1 -0
  3. data/ext/wxruby3/include/wxRubyApp.h +338 -0
  4. data/ext/wxruby3/include/wxruby-Config.h +6 -6
  5. data/ext/wxruby3/include/wxruby-runtime.h +3 -0
  6. data/ext/wxruby3/swig/common.i +22 -0
  7. data/ext/wxruby3/swig/custom/director.swg +296 -0
  8. data/ext/wxruby3/swig/custom/rubyapi.swg +19 -0
  9. data/ext/wxruby3/swig/custom/rubyerrors.swg +45 -0
  10. data/ext/wxruby3/swig/custom/rubyhead.swg +192 -0
  11. data/ext/wxruby3/swig/custom/rubyrun.swg +187 -0
  12. data/ext/wxruby3/swig/custom/swigrun.swg +363 -0
  13. data/ext/wxruby3/swig/custom/typemaps/swigtypemaps.swg +173 -0
  14. data/ext/wxruby3/swig/wx.i +50 -30
  15. data/lib/wx/aui/aui_tab_ctrl.rb +18 -0
  16. data/lib/wx/aui/auinotebook.rb +6 -2
  17. data/lib/wx/aui/require.rb +1 -0
  18. data/lib/wx/core/app.rb +2 -2
  19. data/lib/wx/core/collapsible_pane.rb +1 -1
  20. data/lib/wx/core/const.rb +83 -0
  21. data/lib/wx/core/controlwithitems.rb +8 -6
  22. data/lib/wx/core/menu.rb +10 -0
  23. data/lib/wx/core/notebook.rb +6 -2
  24. data/lib/wx/core/sizer.rb +11 -0
  25. data/lib/wx/core/task_bar_button.rb +19 -0
  26. data/lib/wx/core/textctrl.rb +11 -1
  27. data/lib/wx/core/{treectrl.rb → tree_ctrl.rb} +31 -12
  28. data/lib/wx/core/window.rb +10 -0
  29. data/lib/wx/doc/app.rb +48 -38
  30. data/lib/wx/doc/art_locator.rb +47 -43
  31. data/lib/wx/doc/aui/auimanager.rb +16 -8
  32. data/lib/wx/doc/aui/auinotebook.rb +20 -5
  33. data/lib/wx/doc/clipboard.rb +11 -7
  34. data/lib/wx/doc/colour_dialog.rb +14 -10
  35. data/lib/wx/doc/const.rb +66 -66
  36. data/lib/wx/doc/controlwithitems.rb +17 -7
  37. data/lib/wx/doc/data_object.rb +2 -2
  38. data/lib/wx/doc/event.rb +0 -6
  39. data/lib/wx/doc/evthandler.rb +113 -108
  40. data/lib/wx/doc/font.rb +1 -0
  41. data/lib/wx/doc/functions.rb +9 -9
  42. data/lib/wx/doc/gc_dc.rb +6 -1
  43. data/lib/wx/doc/graphics_context.rb +1 -0
  44. data/lib/wx/doc/grid/grid.rb +22 -1
  45. data/lib/wx/doc/help_controller.rb +11 -7
  46. data/lib/wx/doc/html/html_help_controller.rb +12 -4
  47. data/lib/wx/doc/list_ctrl.rb +33 -29
  48. data/lib/wx/doc/menu.rb +20 -0
  49. data/lib/wx/doc/notebook.rb +21 -0
  50. data/lib/wx/doc/pg/events.rb +13 -9
  51. data/lib/wx/doc/pg/pg_property.rb +18 -0
  52. data/lib/wx/doc/progress_dialog.rb +36 -32
  53. data/lib/wx/doc/prt/page_setup_dialog.rb +20 -12
  54. data/lib/wx/doc/prt/print_data.rb +13 -5
  55. data/lib/wx/doc/prt/print_dialog.rb +31 -23
  56. data/lib/wx/doc/prt/printer.rb +20 -12
  57. data/lib/wx/doc/radio_box.rb +19 -15
  58. data/lib/wx/doc/rbn/ribbon_bar.rb +13 -5
  59. data/lib/wx/doc/rbn/ribbon_button_bar.rb +13 -5
  60. data/lib/wx/doc/rbn/ribbon_gallery.rb +13 -5
  61. data/lib/wx/doc/rbn/ribbon_tool_bar.rb +13 -5
  62. data/lib/wx/doc/region_iterator.rb +32 -28
  63. data/lib/wx/doc/rtc/rich_text_composite_object.rb +24 -0
  64. data/lib/wx/doc/rtc/rich_text_ctrl.rb +24 -0
  65. data/lib/wx/doc/rtc/rich_text_paragraph.rb +24 -0
  66. data/lib/wx/doc/rtc/richtext_buffer.rb +27 -19
  67. data/lib/wx/doc/rtc/richtext_printing.rb +17 -9
  68. data/lib/wx/doc/rtc/richtext_style_sheet.rb +17 -9
  69. data/lib/wx/doc/sizer.rb +20 -0
  70. data/lib/wx/doc/stc/styled_text_ctrl.rb +24 -0
  71. data/lib/wx/doc/stream.rb +39 -35
  72. data/lib/wx/doc/system_settings.rb +30 -26
  73. data/lib/wx/doc/text_validator.rb +12 -8
  74. data/lib/wx/doc/textctrl.rb +16 -0
  75. data/lib/wx/doc/tree_ctrl.rb +95 -0
  76. data/lib/wx/doc/treebook.rb +9 -5
  77. data/lib/wx/doc/v_list_box.rb +9 -5
  78. data/lib/wx/doc/variant.rb +164 -160
  79. data/lib/wx/doc/window.rb +57 -42
  80. data/lib/wx/doc/window_disabler.rb +10 -6
  81. data/lib/wx/grid/grid.rb +27 -4
  82. data/lib/wx/keyword_defs.rb +43 -6
  83. data/lib/wx/pg/pg_property.rb +22 -0
  84. data/lib/wx/rtc/require.rb +3 -0
  85. data/lib/wx/rtc/rich_text_composite_object.rb +25 -0
  86. data/lib/wx/rtc/rich_text_ctrl.rb +25 -0
  87. data/lib/wx/rtc/rich_text_paragraph.rb +25 -0
  88. data/lib/wx/stc/require.rb +1 -0
  89. data/lib/wx/stc/styled_text_ctrl.rb +25 -0
  90. data/lib/wx/version.rb +1 -1
  91. data/rakelib/lib/config/linux.rb +0 -3
  92. data/rakelib/lib/config/macosx.rb +1 -1
  93. data/rakelib/lib/config/mingw.rb +1 -1
  94. data/rakelib/lib/config/unixish.rb +1 -1
  95. data/rakelib/lib/config.rb +14 -4
  96. data/rakelib/lib/core/include/funcall.inc +33 -14
  97. data/rakelib/lib/core/include/swigdirector.inc +384 -0
  98. data/rakelib/lib/core/include/swigrubyerrors.inc +161 -0
  99. data/{ext/wxruby3/swig/custom/swig4/rubyrun.swg → rakelib/lib/core/include/swigrubyrun.inc} +245 -120
  100. data/rakelib/lib/core/include/swigrun.inc +700 -0
  101. data/rakelib/lib/core/package.rb +19 -9
  102. data/rakelib/lib/core/parameter.rb +3 -0
  103. data/rakelib/lib/core/spec.rb +6 -1
  104. data/rakelib/lib/director/accelerator.rb +3 -4
  105. data/rakelib/lib/director/accessible.rb +47 -0
  106. data/rakelib/lib/director/animation.rb +1 -1
  107. data/rakelib/lib/director/animation_ctrl.rb +20 -0
  108. data/rakelib/lib/director/app.rb +15 -304
  109. data/rakelib/lib/director/app_traits.rb +10 -12
  110. data/rakelib/lib/director/art_provider.rb +1 -1
  111. data/rakelib/lib/director/ctrl_with_items.rb +17 -5
  112. data/rakelib/lib/director/data_format.rb +1 -1
  113. data/rakelib/lib/director/data_object_simple_base.rb +1 -2
  114. data/rakelib/lib/director/derived_dc.rb +1 -1
  115. data/rakelib/lib/director/dialog.rb +6 -0
  116. data/rakelib/lib/director/dialup_event.rb +44 -0
  117. data/rakelib/lib/director/dialup_manager.rb +45 -0
  118. data/rakelib/lib/director/drag_image.rb +2 -3
  119. data/rakelib/lib/director/event.rb +22 -4
  120. data/rakelib/lib/director/file_ctrl.rb +35 -0
  121. data/rakelib/lib/director/file_ctrl_event.rb +26 -0
  122. data/rakelib/lib/director/frame.rb +1 -3
  123. data/rakelib/lib/director/gdicommon.rb +27 -11
  124. data/rakelib/lib/director/graphics_context.rb +2 -4
  125. data/rakelib/lib/director/grid_cell_editor.rb +6 -6
  126. data/rakelib/lib/director/grid_ctrl.rb +34 -3
  127. data/rakelib/lib/director/help_controller.rb +1 -1
  128. data/rakelib/lib/director/icon.rb +5 -2
  129. data/rakelib/lib/director/list_ctrl.rb +5 -6
  130. data/rakelib/lib/director/locale.rb +1 -3
  131. data/rakelib/lib/director/log.rb +1 -4
  132. data/rakelib/lib/director/media_ctrl.rb +54 -0
  133. data/rakelib/lib/director/menu.rb +16 -1
  134. data/rakelib/lib/director/menu_item.rb +2 -2
  135. data/rakelib/lib/director/pgarray_editor_dialog.rb +0 -6
  136. data/rakelib/lib/director/pgeditor.rb +2 -2
  137. data/rakelib/lib/director/pgproperties.rb +3 -3
  138. data/rakelib/lib/director/pgproperty.rb +24 -1
  139. data/rakelib/lib/director/property_grid_interface.rb +5 -10
  140. data/rakelib/lib/director/richtext_buffer.rb +1 -1
  141. data/rakelib/lib/director/richtext_composite_object.rb +25 -0
  142. data/rakelib/lib/director/richtext_ctrl.rb +15 -5
  143. data/rakelib/lib/director/richtext_formatting_dialog.rb +7 -5
  144. data/rakelib/lib/director/richtext_paragraph_layout_box.rb +9 -7
  145. data/rakelib/lib/director/sash_event.rb +42 -0
  146. data/rakelib/lib/director/sizer.rb +79 -1
  147. data/rakelib/lib/director/sizer_item.rb +22 -0
  148. data/rakelib/lib/director/static_box.rb +4 -5
  149. data/rakelib/lib/director/styled_text_ctrl.rb +12 -0
  150. data/rakelib/lib/director/task_bar_button.rb +30 -0
  151. data/rakelib/lib/director/task_bar_icon.rb +6 -14
  152. data/rakelib/lib/director/textctrl.rb +12 -1
  153. data/rakelib/lib/director/tool_tip.rb +1 -1
  154. data/rakelib/lib/director/top_level_window.rb +4 -5
  155. data/rakelib/lib/director/tree_ctrl.rb +24 -50
  156. data/rakelib/lib/director/variant.rb +1 -1
  157. data/rakelib/lib/director/window.rb +24 -5
  158. data/rakelib/lib/director.rb +4 -4
  159. data/rakelib/lib/extractor/function.rb +6 -6
  160. data/rakelib/lib/extractor.rb +34 -5
  161. data/rakelib/lib/generate/analyzer.rb +8 -3
  162. data/rakelib/lib/generate/doc/animation_ctrl.yaml +15 -0
  163. data/rakelib/lib/generate/doc/busy_info.yaml +0 -2
  164. data/rakelib/lib/generate/doc/clipboard.yaml +0 -2
  165. data/rakelib/lib/generate/doc/cursor.yaml +0 -2
  166. data/rakelib/lib/generate/doc/events.yaml +10 -4
  167. data/rakelib/lib/generate/doc/panel.yaml +7 -0
  168. data/rakelib/lib/generate/doc/static_box.yaml +8 -0
  169. data/rakelib/lib/generate/doc/xml_resource.yaml +3 -0
  170. data/rakelib/lib/generate/doc.rb +89 -16
  171. data/rakelib/lib/generate/interface.rb +4 -3
  172. data/rakelib/lib/specs/interfaces.rb +161 -156
  173. data/rakelib/lib/swig_runner.rb +4 -50
  174. data/rakelib/lib/typemap/common.rb +54 -10
  175. data/rakelib/lib/typemap/data_format.rb +1 -1
  176. data/rakelib/lib/typemap/data_object_data.rb +2 -2
  177. data/rakelib/lib/typemap/pgprop_arg.rb +7 -2
  178. data/rakelib/lib/typemap/points_list.rb +5 -7
  179. data/rakelib/lib/util/string.rb +10 -8
  180. data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +74 -2
  181. data/rakelib/yard/templates/default/fulldoc/html/full_list.erb +38 -0
  182. data/rakelib/yard/templates/default/fulldoc/html/setup.rb +39 -0
  183. data/rakelib/yard/templates/default/tags/html/wxrb_require.erb +10 -0
  184. data/rakelib/yard/templates/default/tags/setup.rb +16 -0
  185. data/rakelib/yard/yard-custom-templates.rb +3 -0
  186. data/samples/text/richtext.rb +0 -30
  187. data/samples/treectrl/treectrl.rb +1 -1
  188. data/tests/media/beep_lo.wav +0 -0
  189. data/tests/test_app_exit_exception.rb +36 -0
  190. data/tests/test_app_init_exception.rb +20 -0
  191. data/tests/test_book_controls.rb +29 -0
  192. data/tests/test_exceptions.rb +41 -0
  193. data/tests/test_list_ctrl.rb +1 -1
  194. data/tests/test_media_ctrl.rb +38 -0
  195. data/tests/test_menu.rb +69 -0
  196. data/tests/test_pg.rb +27 -0
  197. data/tests/test_richtext.rb +45 -0
  198. data/tests/test_sizer.rb +59 -0
  199. data/tests/test_std_controls.rb +78 -1
  200. data/tests/test_styled_text_ctrl.rb +46 -0
  201. data/tests/test_tree_ctrl.rb +138 -0
  202. data/tests/test_window.rb +12 -0
  203. data/tests/testapp_noframe.rb +1 -1
  204. metadata +54 -5
  205. data/ext/wxruby3/swig/custom/swig3/rubyrun.swg +0 -456
@@ -0,0 +1,69 @@
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 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
+ frame_win.menu_bar = Wx::MenuBar.new
21
+ frame_win.menu_bar.append(@menu, "&Test")
22
+ end
23
+
24
+ def cleanup
25
+ frame_win.menu_bar = nil
26
+ super
27
+ end
28
+
29
+ attr_reader :menu
30
+
31
+ def test_basic
32
+ assert_equal(8, menu.get_menu_item_count)
33
+ check, pos = menu.find_child_item(Wx::ID_HIGHEST+3)
34
+ assert_not_nil(check)
35
+ assert_equal(3, pos)
36
+ assert_equal('Check 3', check.item_label)
37
+ assert_false(check.checked?)
38
+ check.check
39
+ assert_true(check.checked?)
40
+ radio, pos = menu.find_child_item(Wx::ID_HIGHEST+5)
41
+ assert_not_nil(radio)
42
+ assert_equal(6, pos)
43
+ assert_equal('Radio 5', radio.item_label)
44
+ assert_false(radio.checked?)
45
+ radio.check
46
+ assert_true(radio.checked?)
47
+ radio, pos = menu.find_child_item(Wx::ID_HIGHEST+4)
48
+ assert_false(radio.checked?)
49
+ radio, pos = menu.find_child_item(Wx::ID_HIGHEST+6)
50
+ assert_false(radio.checked?)
51
+ radio.check
52
+ assert_true(radio.checked?)
53
+ radio, pos = menu.find_child_item(Wx::ID_HIGHEST+5)
54
+ assert_false(radio.checked?)
55
+ end
56
+
57
+ def test_enumerate
58
+ radio, pos = menu.find_child_item(Wx::ID_HIGHEST+4)
59
+ assert_true(radio.checked?) # first by default checked
60
+ menu.each_item do |mi|
61
+ mi.check if mi.id == (Wx::ID_HIGHEST+5)
62
+ end
63
+ radio, pos = menu.find_child_item(Wx::ID_HIGHEST+4)
64
+ assert_false(radio.checked?)
65
+ radio = menu.each_item.detect { |mi| mi.id == (Wx::ID_HIGHEST+5) }
66
+ assert_true(radio.checked?)
67
+ end
68
+
69
+ end
data/tests/test_pg.rb ADDED
@@ -0,0 +1,27 @@
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 PGChoicesTests < WxRuby::Test::GUITests
8
+
9
+ def test_enum_labels
10
+ texts = %w[Red Blue Green Yellow Black White]
11
+ choices = Wx::PG::PGChoices.new(texts)
12
+ choices.each_label { |lbl| assert_equal(texts.shift, lbl) }
13
+ end
14
+
15
+ def test_enum_entries
16
+ texts = %w[Flag1 Flag2 Flag3 Flag4]
17
+ choices = Wx::PG::PGChoices.new
18
+ texts.each_with_index do |s, i|
19
+ choices.add(s, 1 << i)
20
+ end
21
+ choices.each_entry.each_with_index do |entry, ix|
22
+ assert_equal(1 << ix, entry.value)
23
+ assert_equal(texts[ix], entry.get_text)
24
+ end
25
+ end
26
+
27
+ end
@@ -67,6 +67,51 @@ class RichTextCtrlWriteTests < WxRuby::Test::GUITests
67
67
  assert_equal('Second Line', richtext.get_line_text(1))
68
68
  end
69
69
 
70
+ def test_enumerate_lines
71
+ richtext.write_text <<~__HEREDOC
72
+ This is line 1.
73
+ This is line 2.
74
+ This is line 3.
75
+ __HEREDOC
76
+ assert_equal(4, richtext.get_number_of_lines)
77
+ richtext.each_line.each_with_index do |txt, lnr|
78
+ if lnr < 3
79
+ assert("This is line #{lnr+1}.", txt)
80
+ else
81
+ assert('', txt)
82
+ end
83
+ end
84
+ line_enum = richtext.each_line
85
+ txt = line_enum.detect { |l| l.index('2') }
86
+ assert_equal('This is line 2.', txt)
87
+ para = richtext.buffer.get_child_at_position(0)
88
+ assert_kind_of(Wx::RTC::RichTextParagraph, para)
89
+ assert_equal(1, para.get_lines.size)
90
+ para.each_line do |rtl|
91
+ txt = para.get_text_for_range(rtl.get_range)
92
+ assert("This is line 1.", txt)
93
+ end
94
+ end
95
+
96
+ def test_enumerate_children
97
+ richtext.write_text <<~__HEREDOC
98
+ This is line 1.
99
+ This is line 2.
100
+ This is line 3.
101
+ __HEREDOC
102
+ richtext.write_image(Wx.Bitmap(:wxruby, Wx::BitmapType::BITMAP_TYPE_PNG, art_section: 'test_art'))
103
+ assert_equal(4, richtext.buffer.get_child_count)
104
+ richtext.buffer.each_child.each_with_index do |c, i|
105
+ if i<3
106
+ assert_kind_of(Wx::RTC::RichTextParagraph, c)
107
+ assert_equal(1, c.get_lines.size)
108
+ else
109
+ assert_equal(1, c.get_child_count)
110
+ c.each_child { |cc| assert_kind_of(Wx::RTC::RichTextImage, cc) }
111
+ end
112
+ end
113
+ end
114
+
70
115
  def test_write_image
71
116
  assert_nothing_raised { richtext.write_image(Wx.Bitmap(:wxruby, Wx::BitmapType::BITMAP_TYPE_PNG, art_section: 'test_art')) }
72
117
  img_obj = richtext.buffer.get_leaf_object_at_position(0)
@@ -0,0 +1,59 @@
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 SizerTests < WxRuby::Test::GUITests
8
+
9
+ def setup
10
+ super
11
+ frame_win.set_sizer(Wx::VBoxSizer.new)
12
+ end
13
+
14
+ def cleanup
15
+ super
16
+ GC.start
17
+ end
18
+
19
+ def test_detach
20
+ frame_win.get_sizer.add(Wx::HBoxSizer.new)
21
+ frame_win.get_sizer.add_spacer(5)
22
+ # detaches HBoxSizer transferring ownership to Ruby; should not cause segfaults at GC
23
+ frame_win.get_sizer.detach(0)
24
+ end
25
+
26
+ def test_sizer_item_detach_and_re_attach
27
+ frame_win.get_sizer.add(Wx::HBoxSizer.new)
28
+ frame_win.get_sizer.add_spacer(5)
29
+ # get and detach
30
+ szr_itm = frame_win.get_sizer.get_item(0)
31
+ assert_not_nil(szr_itm)
32
+ assert_true(szr_itm.is_sizer)
33
+ szr = szr_itm.get_sizer
34
+ assert_not_nil(szr)
35
+ szr_itm.detach_sizer
36
+ assert_nil(szr_itm.get_sizer)
37
+ # remove sizer item
38
+ assert_true(frame_win.get_sizer.remove(0))
39
+ # re-attach detached sizer (should not cause segfaults at close due to incorrect ownership transfers)
40
+ assert_not_nil(frame_win.get_sizer.prepend(szr))
41
+ end
42
+
43
+ def test_children
44
+ frame_win.get_sizer.add(Wx::HBoxSizer.new)
45
+ frame_win.get_sizer.add_spacer(5)
46
+ frame_win.get_sizer.add(Wx::VBoxSizer.new)
47
+
48
+ assert_equal(3, frame_win.sizer.item_count)
49
+ children = frame_win.sizer.get_children
50
+ assert_equal(3, children.size)
51
+ assert_true(children[0].sizer?)
52
+ assert_true(children[1].spacer?)
53
+ assert_true(children[2].sizer?)
54
+ frame_win.sizer.each_child do |si|
55
+ assert_equal(children.shift, si)
56
+ end
57
+ end
58
+
59
+ end
@@ -111,6 +111,34 @@ class TextCtrlTests < WxRuby::Test::GUITests
111
111
  assert_equal('', text.get_value)
112
112
  end
113
113
 
114
+ def test_stream_append
115
+ text << 'This is the number ' << 101 << '.'
116
+ assert_equal('This is the number 101.', text.get_value)
117
+ end
118
+
119
+ def test_enumerate_lines
120
+ text.destroy
121
+ @text = Wx::TextCtrl.new(frame_win, style: Wx::TE_MULTILINE, name: 'Text')
122
+ text << <<~__HEREDOC
123
+ This is line 1.
124
+ This is line 2.
125
+ This is line 3.
126
+ __HEREDOC
127
+ assert_equal(4, text.get_number_of_lines)
128
+ text.each_line.each_with_index do |txt, lnr|
129
+ if lnr < 3
130
+ assert("This is line #{lnr+1}.", txt)
131
+ else
132
+ assert('', txt)
133
+ end
134
+ end
135
+ txt = text.each_line { |l| break l if l.index('2')}
136
+ assert_equal('This is line 2.', txt)
137
+ line_enum = text.each_line
138
+ txt = line_enum.detect { |l| l.index('3') }
139
+ assert_equal('This is line 3.', txt)
140
+ end
141
+
114
142
  if has_ui_simulator?
115
143
  def test_max_length
116
144
  sim = get_ui_simulator
@@ -165,7 +193,7 @@ class ComboBoxTests < WxRuby::Test::GUITests
165
193
  def setup
166
194
  super
167
195
  @combo = Wx::ComboBox.new(frame_win, name: 'ComboBox', choices: %w[One Two Three])
168
- @combo.clear
196
+ @combo.value = '' # don't use #clear as that also clears the choices
169
197
  end
170
198
 
171
199
  def cleanup
@@ -180,6 +208,19 @@ class ComboBoxTests < WxRuby::Test::GUITests
180
208
  assert_equal('', combo.get_value)
181
209
  end
182
210
 
211
+ def test_enumerate
212
+ strings = combo.get_strings
213
+ combo.each_string.each_with_index do |str, ix|
214
+ assert_equal(strings[ix], str)
215
+ end
216
+ combo.each_string { |s| assert_equal(strings.shift, s)}
217
+ str_enum = combo.each_string
218
+ assert_kind_of(::Enumerator, str_enum)
219
+ assert_true(str_enum.any? { |s| s == 'Three'})
220
+ assert_true(combo.each_string.none? { |s| s == 'Four'})
221
+ assert_equal('BREAK', combo.each_string { |_| break 'BREAK' })
222
+ end
223
+
183
224
  end
184
225
 
185
226
  class CheckBoxTests < WxRuby::Test::GUITests
@@ -439,3 +480,39 @@ class GaugeTests < WxRuby::Test::GUITests
439
480
  assert_equal(100, gauge.value)
440
481
  end
441
482
  end
483
+
484
+ class StaticBoxTests < WxRuby::Test::GUITests
485
+
486
+ def setup
487
+ super
488
+ @box = nil
489
+ end
490
+
491
+ def cleanup
492
+ @box.destroy if @box
493
+ super
494
+ end
495
+
496
+ attr_reader :box
497
+
498
+ def test_basic
499
+ @box = Wx::StaticBox.new(frame_win, label: 'Box')
500
+
501
+ txt = Wx::StaticText.new(box, Wx::ID_ANY, "This window is a child of the staticbox")
502
+ assert_equal(box, txt.parent)
503
+ end
504
+
505
+ unless Wx::PLATFORM == 'WXOSX'
506
+
507
+ def test_label_window
508
+ check = Wx::CheckBox.new(frame_win, Wx::ID_ANY, 'Enable')
509
+ @box = Wx::StaticBox.new(frame_win, label: check)
510
+
511
+ button = Wx::Button.new(box, label: 'Button')
512
+ box.enable(false)
513
+ assert_false(button.is_enabled)
514
+ end
515
+
516
+ end
517
+
518
+ end
@@ -0,0 +1,46 @@
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 StyledTextCtrlTests < WxRuby::Test::GUITests
8
+
9
+ def setup
10
+ super
11
+ @text = Wx::STC::StyledTextCtrl.new(frame_win, name: 'StyledText')
12
+ end
13
+
14
+ def cleanup
15
+ @text.destroy
16
+ super
17
+ end
18
+
19
+ attr_reader :text
20
+
21
+ def test_text
22
+ assert_equal('', text.get_value)
23
+ end
24
+
25
+ def test_enumerate_lines
26
+ text.write_text <<~__HEREDOC
27
+ This is line 1.
28
+ This is line 2.
29
+ This is line 3.
30
+ __HEREDOC
31
+ assert_equal(4, text.get_number_of_lines)
32
+ text.each_line.each_with_index do |txt, lnr|
33
+ if lnr < 3
34
+ assert("This is line #{lnr+1}.", txt)
35
+ else
36
+ assert('', txt)
37
+ end
38
+ end
39
+ txt = text.each_line { |l| break l if l.index('2')}
40
+ assert_equal('This is line 2.', txt)
41
+ line_enum = text.each_line
42
+ txt = line_enum.detect { |l| l.index('3') }
43
+ assert_equal('This is line 3.', txt)
44
+ end
45
+
46
+ end
@@ -0,0 +1,138 @@
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 TreeCtrlTests < WxRuby::Test::GUITests
8
+
9
+ def setup
10
+ super
11
+ @tree = Wx::TreeCtrl.new(frame_win, name: 'TreeCtrl')
12
+ end
13
+
14
+ def cleanup
15
+ @tree.destroy
16
+ super
17
+ end
18
+
19
+ attr_reader :tree
20
+
21
+ def tog_style(flag)
22
+ style = tree.get_window_style ^ flag
23
+
24
+ if Wx.has_feature?(:WXMSW)
25
+ # treectrl styles can't be changed on the fly using the native
26
+ # control and the tree must be recreated
27
+ tree.destroy
28
+ @tree = Wx::TreeCtrl.new(frame_win, style: style, name: 'TreeCtrl')
29
+ else
30
+ tree.set_window_style(style)
31
+ end
32
+ end
33
+ private :tog_style
34
+
35
+ ITEMS = [
36
+ ['Cat1', [
37
+ 'Item1.1',
38
+ 'Item1.2',
39
+ 'Item1.3'
40
+ ]
41
+ ],
42
+ ['Cat2', [
43
+ ['Cat2.1', %w[Item2.1.1 Item2.1.2] ],
44
+ 'Item2.2',
45
+ 'Item2.3'
46
+ ]
47
+ ],
48
+ 'Item3',
49
+ 'Item4'
50
+ ]
51
+
52
+ def add_tree_items(parent, items)
53
+ items.each do |itm|
54
+ if ::Array === itm
55
+ cat = tree.append_item(parent, itm.first.to_s)
56
+ add_tree_items(cat, itm.last)
57
+ else
58
+ tree.append_item(parent, itm.to_s)
59
+ end
60
+ end
61
+ end
62
+ private :add_tree_items
63
+
64
+ def build_tree
65
+ root = tree.add_root('root')
66
+ add_tree_items(root, ITEMS)
67
+ end
68
+ private :build_tree
69
+
70
+ def test_tree
71
+ build_tree
72
+
73
+ assert_equal(4, tree.get_item_children(tree.get_root_item).size)
74
+ cat1 = tree.get_item_children(tree.get_root_item)[0]
75
+ assert_equal(3, tree.get_item_children(cat1).size)
76
+ cat2 = tree.get_item_children(tree.get_root_item)[1]
77
+ assert_equal(3, tree.get_item_children(cat2).size)
78
+ cat21 = tree.get_item_children(cat2)[0]
79
+ assert_equal(2, tree.get_item_children(cat21).size)
80
+ end
81
+
82
+ def test_hidden_root
83
+ tog_style(Wx::TR_HIDE_ROOT)
84
+ build_tree
85
+
86
+ assert_equal(4, tree.get_root_items.size)
87
+ cat1 = tree.get_root_items[0]
88
+ assert_equal(3, tree.get_item_children(cat1).size)
89
+ cat2 = tree.get_root_items[1]
90
+ assert_equal(3, tree.get_item_children(cat2).size)
91
+ cat21 = tree.get_item_children(cat2)[0]
92
+ assert_equal(2, tree.get_item_children(cat21).size)
93
+ end
94
+
95
+ def test_enumerable
96
+ build_tree
97
+
98
+ item211 = tree.detect { |itmid| tree.item_text(itmid) == 'Item2.1.1'}
99
+ assert_not_nil(item211)
100
+ assert_true(item211.ok?)
101
+ end
102
+
103
+ def test_enumerate
104
+ build_tree
105
+
106
+ tree.each_item_child(tree.get_root_item) do |itmid|
107
+ if tree.item_text(itmid) == 'Cat2'
108
+ tree.each_item_child(itmid) do |sub_itmid|
109
+ if tree.item_text(sub_itmid) == 'Cat2.1'
110
+ new_itm = tree.append_item(sub_itmid, 'Another Item')
111
+ assert_not_nil(new_itm)
112
+ assert_true(new_itm.ok?)
113
+ end
114
+ end
115
+ end
116
+ end
117
+ assert_equal(4, tree.get_item_children(tree.get_root_item).size)
118
+ cat1 = tree.get_item_children(tree.get_root_item)[0]
119
+ assert_equal(3, tree.get_item_children(cat1).size)
120
+ cat2 = tree.get_item_children(tree.get_root_item)[1]
121
+ assert_equal(3, tree.get_item_children(cat2).size)
122
+ cat21 = tree.get_item_children(cat2)[0]
123
+ assert_equal(3, tree.get_item_children(cat21).size)
124
+ end
125
+
126
+ def test_enumerator
127
+ build_tree
128
+
129
+ root_enum = tree.each_item_child(tree.get_root_item)
130
+ assert_kind_of(::Enumerator, root_enum)
131
+ cat2 = root_enum.detect { |itmid| tree.item_text(itmid) == 'Cat2' }
132
+ assert_not_nil(cat2)
133
+ assert_true(cat2.ok?)
134
+ cat2_enum = tree.each_item_child(cat2)
135
+ assert_equal(3, cat2_enum.to_a.size)
136
+ end
137
+
138
+ end
data/tests/test_window.rb CHANGED
@@ -229,6 +229,18 @@ class WindowTests < WxRuby::Test::GUITests
229
229
  assert_equal(child1, window.find_window_by_id(Wx::ID_HIGHEST + 1))
230
230
  assert_equal(child1, window.find_window_by_name("child1"))
231
231
 
232
+ child1 = Wx::Window.new(window, Wx::ID_HIGHEST + 2)
233
+
234
+ children = window.get_children
235
+ window.each_child do |child|
236
+ assert_equal(child, children.shift)
237
+ end
238
+
239
+ children = window.get_children
240
+ enum = window.each_child
241
+ assert_equal(children.first, enum.find { |c| c.get_id == Wx::ID_HIGHEST + 1})
242
+ assert_equal(children.last, enum.find { |c| c.get_id == Wx::ID_HIGHEST + 2})
243
+
232
244
  window.destroy_children
233
245
 
234
246
  assert_equal(0, window.get_children.count)
@@ -21,7 +21,7 @@ class TestApp < Test::Unit::TestCase
21
21
  o = AppReturnsFalseFromInit.new
22
22
  o.run
23
23
  assert(o.did_call_on_init, "didn't call on_init?")
24
- assert_equal("wxruby", o.the_app_name)
24
+ assert_equal("testapp_noframe", o.the_app_name)
25
25
  end
26
26
 
27
27
  end