wxruby3 0.9.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (153) 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/swig/common.i +1 -1
  6. data/lib/wx/aui/aui_tab_ctrl.rb +18 -0
  7. data/lib/wx/aui/auinotebook.rb +6 -2
  8. data/lib/wx/aui/require.rb +1 -0
  9. data/lib/wx/core/app.rb +2 -2
  10. data/lib/wx/core/collapsible_pane.rb +1 -1
  11. data/lib/wx/core/controlwithitems.rb +8 -6
  12. data/lib/wx/core/menu.rb +10 -0
  13. data/lib/wx/core/notebook.rb +6 -2
  14. data/lib/wx/core/sizer.rb +11 -0
  15. data/lib/wx/core/task_bar_button.rb +19 -0
  16. data/lib/wx/core/textctrl.rb +11 -1
  17. data/lib/wx/core/{treectrl.rb → tree_ctrl.rb} +31 -12
  18. data/lib/wx/core/window.rb +10 -0
  19. data/lib/wx/doc/app.rb +48 -38
  20. data/lib/wx/doc/art_locator.rb +47 -43
  21. data/lib/wx/doc/aui/auimanager.rb +16 -8
  22. data/lib/wx/doc/aui/auinotebook.rb +20 -5
  23. data/lib/wx/doc/clipboard.rb +11 -7
  24. data/lib/wx/doc/colour_dialog.rb +14 -10
  25. data/lib/wx/doc/controlwithitems.rb +17 -7
  26. data/lib/wx/doc/data_object.rb +2 -2
  27. data/lib/wx/doc/evthandler.rb +113 -108
  28. data/lib/wx/doc/font.rb +1 -0
  29. data/lib/wx/doc/gc_dc.rb +6 -1
  30. data/lib/wx/doc/graphics_context.rb +1 -0
  31. data/lib/wx/doc/grid/grid.rb +22 -1
  32. data/lib/wx/doc/help_controller.rb +11 -7
  33. data/lib/wx/doc/html/html_help_controller.rb +12 -4
  34. data/lib/wx/doc/list_ctrl.rb +33 -29
  35. data/lib/wx/doc/menu.rb +20 -0
  36. data/lib/wx/doc/notebook.rb +21 -0
  37. data/lib/wx/doc/pg/events.rb +13 -9
  38. data/lib/wx/doc/pg/pg_property.rb +18 -0
  39. data/lib/wx/doc/progress_dialog.rb +36 -32
  40. data/lib/wx/doc/prt/page_setup_dialog.rb +20 -12
  41. data/lib/wx/doc/prt/print_data.rb +13 -5
  42. data/lib/wx/doc/prt/print_dialog.rb +31 -23
  43. data/lib/wx/doc/prt/printer.rb +20 -12
  44. data/lib/wx/doc/radio_box.rb +19 -15
  45. data/lib/wx/doc/rbn/ribbon_bar.rb +13 -5
  46. data/lib/wx/doc/rbn/ribbon_button_bar.rb +13 -5
  47. data/lib/wx/doc/rbn/ribbon_gallery.rb +13 -5
  48. data/lib/wx/doc/rbn/ribbon_tool_bar.rb +13 -5
  49. data/lib/wx/doc/region_iterator.rb +32 -28
  50. data/lib/wx/doc/rtc/rich_text_composite_object.rb +24 -0
  51. data/lib/wx/doc/rtc/rich_text_ctrl.rb +24 -0
  52. data/lib/wx/doc/rtc/rich_text_paragraph.rb +24 -0
  53. data/lib/wx/doc/rtc/richtext_buffer.rb +27 -19
  54. data/lib/wx/doc/rtc/richtext_printing.rb +17 -9
  55. data/lib/wx/doc/rtc/richtext_style_sheet.rb +17 -9
  56. data/lib/wx/doc/sizer.rb +20 -0
  57. data/lib/wx/doc/stc/styled_text_ctrl.rb +24 -0
  58. data/lib/wx/doc/stream.rb +39 -35
  59. data/lib/wx/doc/system_settings.rb +30 -26
  60. data/lib/wx/doc/text_validator.rb +12 -8
  61. data/lib/wx/doc/textctrl.rb +16 -0
  62. data/lib/wx/doc/tree_ctrl.rb +95 -0
  63. data/lib/wx/doc/treebook.rb +9 -5
  64. data/lib/wx/doc/v_list_box.rb +9 -5
  65. data/lib/wx/doc/variant.rb +164 -160
  66. data/lib/wx/doc/window.rb +57 -47
  67. data/lib/wx/doc/window_disabler.rb +10 -6
  68. data/lib/wx/grid/grid.rb +27 -4
  69. data/lib/wx/pg/pg_property.rb +22 -0
  70. data/lib/wx/rtc/require.rb +3 -0
  71. data/lib/wx/rtc/rich_text_composite_object.rb +25 -0
  72. data/lib/wx/rtc/rich_text_ctrl.rb +25 -0
  73. data/lib/wx/rtc/rich_text_paragraph.rb +25 -0
  74. data/lib/wx/stc/require.rb +1 -0
  75. data/lib/wx/stc/styled_text_ctrl.rb +25 -0
  76. data/lib/wx/version.rb +1 -1
  77. data/rakelib/lib/config/linux.rb +0 -3
  78. data/rakelib/lib/config/macosx.rb +2 -2
  79. data/rakelib/lib/config/mingw.rb +1 -1
  80. data/rakelib/lib/config/unixish.rb +1 -1
  81. data/rakelib/lib/config.rb +14 -4
  82. data/rakelib/lib/core/package.rb +14 -7
  83. data/rakelib/lib/core/spec.rb +6 -1
  84. data/rakelib/lib/director/accelerator.rb +2 -3
  85. data/rakelib/lib/director/accessible.rb +47 -0
  86. data/rakelib/lib/director/app.rb +12 -319
  87. data/rakelib/lib/director/app_traits.rb +10 -12
  88. data/rakelib/lib/director/ctrl_with_items.rb +17 -5
  89. data/rakelib/lib/director/data_format.rb +1 -1
  90. data/rakelib/lib/director/derived_dc.rb +1 -1
  91. data/rakelib/lib/director/dialog.rb +1 -0
  92. data/rakelib/lib/director/drag_image.rb +2 -3
  93. data/rakelib/lib/director/event.rb +2 -2
  94. data/rakelib/lib/director/frame.rb +1 -3
  95. data/rakelib/lib/director/gdicommon.rb +8 -10
  96. data/rakelib/lib/director/graphics_context.rb +2 -4
  97. data/rakelib/lib/director/grid_ctrl.rb +34 -3
  98. data/rakelib/lib/director/icon.rb +5 -2
  99. data/rakelib/lib/director/list_ctrl.rb +5 -6
  100. data/rakelib/lib/director/locale.rb +1 -3
  101. data/rakelib/lib/director/log.rb +1 -4
  102. data/rakelib/lib/director/media_ctrl.rb +54 -0
  103. data/rakelib/lib/director/menu.rb +16 -1
  104. data/rakelib/lib/director/menu_item.rb +2 -2
  105. data/rakelib/lib/director/pgproperties.rb +1 -1
  106. data/rakelib/lib/director/pgproperty.rb +24 -1
  107. data/rakelib/lib/director/property_grid_interface.rb +5 -10
  108. data/rakelib/lib/director/richtext_composite_object.rb +25 -0
  109. data/rakelib/lib/director/richtext_ctrl.rb +14 -4
  110. data/rakelib/lib/director/richtext_formatting_dialog.rb +7 -5
  111. data/rakelib/lib/director/richtext_paragraph_layout_box.rb +9 -7
  112. data/rakelib/lib/director/sizer.rb +15 -0
  113. data/rakelib/lib/director/static_box.rb +4 -5
  114. data/rakelib/lib/director/styled_text_ctrl.rb +12 -0
  115. data/rakelib/lib/director/task_bar_button.rb +30 -0
  116. data/rakelib/lib/director/task_bar_icon.rb +5 -13
  117. data/rakelib/lib/director/textctrl.rb +12 -1
  118. data/rakelib/lib/director/tool_tip.rb +1 -1
  119. data/rakelib/lib/director/top_level_window.rb +4 -5
  120. data/rakelib/lib/director/tree_ctrl.rb +5 -6
  121. data/rakelib/lib/director/variant.rb +1 -1
  122. data/rakelib/lib/director/window.rb +24 -5
  123. data/rakelib/lib/director.rb +4 -4
  124. data/rakelib/lib/extractor/function.rb +6 -6
  125. data/rakelib/lib/extractor.rb +34 -5
  126. data/rakelib/lib/generate/analyzer.rb +8 -3
  127. data/rakelib/lib/generate/doc/busy_info.yaml +0 -2
  128. data/rakelib/lib/generate/doc/clipboard.yaml +0 -2
  129. data/rakelib/lib/generate/doc/cursor.yaml +0 -2
  130. data/rakelib/lib/generate/doc/panel.yaml +7 -0
  131. data/rakelib/lib/generate/doc.rb +76 -14
  132. data/rakelib/lib/specs/interfaces.rb +161 -160
  133. data/rakelib/lib/typemap/common.rb +30 -1
  134. data/rakelib/yard/templates/default/fulldoc/html/css/wxruby3.css +74 -2
  135. data/rakelib/yard/templates/default/fulldoc/html/full_list.erb +38 -0
  136. data/rakelib/yard/templates/default/fulldoc/html/setup.rb +39 -0
  137. data/rakelib/yard/templates/default/tags/html/wxrb_require.erb +10 -0
  138. data/rakelib/yard/templates/default/tags/setup.rb +16 -0
  139. data/rakelib/yard/yard-custom-templates.rb +3 -0
  140. data/samples/treectrl/treectrl.rb +1 -1
  141. data/tests/media/beep_lo.wav +0 -0
  142. data/tests/test_list_ctrl.rb +1 -1
  143. data/tests/test_media_ctrl.rb +38 -0
  144. data/tests/test_menu.rb +69 -0
  145. data/tests/test_pg.rb +27 -0
  146. data/tests/test_richtext.rb +45 -0
  147. data/tests/test_sizer.rb +16 -0
  148. data/tests/test_std_controls.rb +42 -1
  149. data/tests/test_styled_text_ctrl.rb +46 -0
  150. data/tests/test_tree_ctrl.rb +138 -0
  151. data/tests/test_window.rb +12 -0
  152. data/tests/testapp_noframe.rb +1 -1
  153. metadata +31 -3
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ def init
4
+ # It seems YARD messes things up so that a number of classes are not properly
5
+ # registered in their enclosing namespaces.
6
+ # This hack makes sure that if that is the case we fix that here.
7
+ all_classes = Registry.all(:class)
8
+ all_classes.each do |c|
9
+ if (ns = c.namespace)
10
+ unless ns.children.any? { |nsc| nsc.path == c.path }
11
+ ns.children << c # class missing from child list of enclosing namespace -> add here
12
+ end
13
+ end
14
+ if (ns = Registry[c.namespace.path])
15
+ unless ns.children.any? { |nsc| nsc.path == c.path }
16
+ ns.children << c # class missing from child list of enclosing namespace -> add here
17
+ end
18
+ end
19
+ end
20
+ super
21
+ end
22
+
23
+ def stylesheets_full_list
24
+ super + %w(css/wxruby3.css)
25
+ end
26
+
27
+ def logo_and_version
28
+ wxver = Registry['Wx::WXRUBY_VERSION']
29
+ wxwver = Registry['Wx::WXWIDGETS_VERSION']
30
+ <<~__HTML
31
+ <div class='wxrb-logo'>
32
+ <img src='assets/logo.png' height='38'/>
33
+ <table><tbody>
34
+ <tr><td><span class='wxrb-name'><a href="https://github.com/mcorino/wxRuby3">wxRuby3</a></span></td><td><span class='wxrb-version'>Version: #{::Kernel.eval(wxver.value)}</span></td></tr>
35
+ <tr><td></td><td><span class="wxrb-wxver">(wxWidgets: #{::Kernel.eval(wxwver.value)})</span></td></tr>
36
+ </tbody></table>
37
+ </div>
38
+ __HTML
39
+ end
@@ -0,0 +1,10 @@
1
+ <% if object.has_tag?(:wxrb_require) %>
2
+ <p class="tag_title">Requires:</p>
3
+ <ul class="wxrb-require">
4
+ <% wxruby_requires.each do |req| %>
5
+ <li><div class='inline'>
6
+ <%= req.join(' or ') %>
7
+ </div></li>
8
+ <% end %>
9
+ </ul>
10
+ <% end %>
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ def wxrb_require
4
+ erb('wxrb_require')
5
+ end
6
+
7
+ def wxruby_requires
8
+ object.tags(:wxrb_require).inject([]) do |list, tag|
9
+ tag.text.split(',').each do |feature|
10
+ list << feature.split('|').collect do |s|
11
+ s.split('&').collect { |ss| %Q[<span class="wxrb-require">#{ss.strip}</span>] }.join('&amp;')
12
+ end
13
+ end
14
+ list
15
+ end
16
+ end
@@ -1,2 +1,5 @@
1
1
 
2
+ YARD::Tags::Library.define_tag("Requirements", :wxrb_require)
3
+ YARD::Tags::Library.visible_tags.place(:wxrb_require).before(:author)
4
+
2
5
  YARD::Templates::Engine.register_template_path File.join(__dir__, 'templates')
@@ -369,7 +369,7 @@ class MyTreeCtrl < Wx::TreeCtrl
369
369
  set_item_font(root_id, Wx::ITALIC_FONT)
370
370
  end
371
371
 
372
- ids = get_children(root_id)
372
+ ids = get_item_children(root_id)
373
373
 
374
374
  # make the first item blue
375
375
  set_item_text_colour(ids[0], Wx::BLUE)
Binary file
@@ -4,7 +4,7 @@
4
4
 
5
5
  require_relative './lib/wxframe_runner'
6
6
 
7
- class ButtonTests < WxRuby::Test::GUITests
7
+ class ListCtrlTests < WxRuby::Test::GUITests
8
8
 
9
9
  def setup
10
10
  super
@@ -0,0 +1,38 @@
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
+ # test seems to deadlock for WXGTK
8
+ if Wx.has_feature?(:USE_MEDIACTRL)
9
+
10
+ require 'uri'
11
+
12
+ class MediaCtrlTests < WxRuby::Test::GUITests
13
+
14
+ def setup
15
+ super
16
+ @media = Wx::MediaCtrl.new(frame_win)
17
+ end
18
+
19
+ def cleanup
20
+ @media.destroy
21
+ super
22
+ end
23
+
24
+ attr_reader :media
25
+
26
+ def test_uri
27
+ # just checking if Ruby URI is properly mapped
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
+ uri = URI("file://#{File.join(__dir__, 'media/beep_lo.wav')}")
31
+ assert_boolean(media.load(uri))
32
+ uri = URI("file://#{File.join(__dir__, 'art/test_art/image/wxruby.png')}")
33
+ assert_boolean(media.load(uri))
34
+ end
35
+
36
+ end
37
+
38
+ end
@@ -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)
data/tests/test_sizer.rb CHANGED
@@ -40,4 +40,20 @@ class SizerTests < WxRuby::Test::GUITests
40
40
  assert_not_nil(frame_win.get_sizer.prepend(szr))
41
41
  end
42
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
+
43
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
@@ -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