teek-ui 0.1.0

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 (127) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +41 -0
  3. data/README.md +452 -0
  4. data/lib/teek/ui/canvas_item.rb +270 -0
  5. data/lib/teek/ui/component_handle.rb +32 -0
  6. data/lib/teek/ui/document.rb +185 -0
  7. data/lib/teek/ui/errors.rb +41 -0
  8. data/lib/teek/ui/event_binding.rb +22 -0
  9. data/lib/teek/ui/event_bus.rb +53 -0
  10. data/lib/teek/ui/grid_validator.rb +89 -0
  11. data/lib/teek/ui/handle.rb +585 -0
  12. data/lib/teek/ui/image.rb +58 -0
  13. data/lib/teek/ui/keysyms.rb +72 -0
  14. data/lib/teek/ui/menu_builder.rb +130 -0
  15. data/lib/teek/ui/menu_entry_addressing.rb +62 -0
  16. data/lib/teek/ui/modal_stack.rb +99 -0
  17. data/lib/teek/ui/mouse_events.rb +31 -0
  18. data/lib/teek/ui/node.rb +141 -0
  19. data/lib/teek/ui/option_dump_parsing.rb +31 -0
  20. data/lib/teek/ui/overlay_anchors.rb +29 -0
  21. data/lib/teek/ui/overlay_validator.rb +33 -0
  22. data/lib/teek/ui/pane_validator.rb +30 -0
  23. data/lib/teek/ui/realized_node.rb +25 -0
  24. data/lib/teek/ui/realizer.rb +577 -0
  25. data/lib/teek/ui/scope.rb +40 -0
  26. data/lib/teek/ui/screens.rb +141 -0
  27. data/lib/teek/ui/session.rb +417 -0
  28. data/lib/teek/ui/tab_validator.rb +30 -0
  29. data/lib/teek/ui/text_content.rb +321 -0
  30. data/lib/teek/ui/tree_inspector.rb +97 -0
  31. data/lib/teek/ui/validator.rb +131 -0
  32. data/lib/teek/ui/var.rb +98 -0
  33. data/lib/teek/ui/version.rb +7 -0
  34. data/lib/teek/ui/widget_addressing.rb +47 -0
  35. data/lib/teek/ui/widget_dsl.rb +512 -0
  36. data/lib/teek/ui/widget_type.rb +242 -0
  37. data/lib/teek/ui/widget_types/button.rb +7 -0
  38. data/lib/teek/ui/widget_types/canvas.rb +15 -0
  39. data/lib/teek/ui/widget_types/checkbox.rb +7 -0
  40. data/lib/teek/ui/widget_types/column.rb +14 -0
  41. data/lib/teek/ui/widget_types/context_menu.rb +15 -0
  42. data/lib/teek/ui/widget_types/divider.rb +10 -0
  43. data/lib/teek/ui/widget_types/dropdown.rb +7 -0
  44. data/lib/teek/ui/widget_types/grid.rb +12 -0
  45. data/lib/teek/ui/widget_types/group.rb +7 -0
  46. data/lib/teek/ui/widget_types/label.rb +7 -0
  47. data/lib/teek/ui/widget_types/list.rb +7 -0
  48. data/lib/teek/ui/widget_types/menu_bar.rb +26 -0
  49. data/lib/teek/ui/widget_types/menu_checkbox.rb +14 -0
  50. data/lib/teek/ui/widget_types/menu_item.rb +20 -0
  51. data/lib/teek/ui/widget_types/menu_radio.rb +14 -0
  52. data/lib/teek/ui/widget_types/number_box.rb +7 -0
  53. data/lib/teek/ui/widget_types/pane.rb +37 -0
  54. data/lib/teek/ui/widget_types/panel.rb +7 -0
  55. data/lib/teek/ui/widget_types/progress.rb +7 -0
  56. data/lib/teek/ui/widget_types/radio.rb +7 -0
  57. data/lib/teek/ui/widget_types/row.rb +14 -0
  58. data/lib/teek/ui/widget_types/scrollable.rb +17 -0
  59. data/lib/teek/ui/widget_types/slider.rb +7 -0
  60. data/lib/teek/ui/widget_types/spacer.rb +14 -0
  61. data/lib/teek/ui/widget_types/split.rb +17 -0
  62. data/lib/teek/ui/widget_types/tab.rb +35 -0
  63. data/lib/teek/ui/widget_types/table.rb +9 -0
  64. data/lib/teek/ui/widget_types/tabs.rb +10 -0
  65. data/lib/teek/ui/widget_types/text_area.rb +7 -0
  66. data/lib/teek/ui/widget_types/text_box.rb +7 -0
  67. data/lib/teek/ui/widget_types/tree.rb +9 -0
  68. data/lib/teek/ui/widget_types/window.rb +50 -0
  69. data/lib/teek/ui/widget_types.rb +121 -0
  70. data/lib/teek/ui/widget_validators.rb +62 -0
  71. data/lib/teek/ui.rb +54 -0
  72. data/teek-ui.gemspec +24 -0
  73. data/test/support/fake_app.rb +57 -0
  74. data/test/test_busy.rb +82 -0
  75. data/test/test_canvas_items.rb +551 -0
  76. data/test/test_clipboard.rb +87 -0
  77. data/test/test_close_handling.rb +118 -0
  78. data/test/test_component.rb +151 -0
  79. data/test/test_component_realtk.rb +120 -0
  80. data/test/test_debug_info.rb +158 -0
  81. data/test/test_document.rb +317 -0
  82. data/test/test_event_bus.rb +163 -0
  83. data/test/test_events.rb +164 -0
  84. data/test/test_fake_app_contract.rb +62 -0
  85. data/test/test_grid.rb +97 -0
  86. data/test/test_handle.rb +386 -0
  87. data/test/test_handle_destroy_realtk.rb +344 -0
  88. data/test/test_helper.rb +20 -0
  89. data/test/test_image.rb +24 -0
  90. data/test/test_image_realtk.rb +146 -0
  91. data/test/test_incremental_realize.rb +203 -0
  92. data/test/test_keysyms.rb +76 -0
  93. data/test/test_layout.rb +185 -0
  94. data/test/test_lazy_realize.rb +128 -0
  95. data/test/test_managed_window.rb +304 -0
  96. data/test/test_menu_dsl.rb +230 -0
  97. data/test/test_menu_entry_addressing.rb +73 -0
  98. data/test/test_menu_realize.rb +296 -0
  99. data/test/test_modal_handle.rb +147 -0
  100. data/test/test_modal_stack.rb +219 -0
  101. data/test/test_modal_stack_realtk.rb +131 -0
  102. data/test/test_native_scrollable.rb +250 -0
  103. data/test/test_node.rb +193 -0
  104. data/test/test_overlay.rb +139 -0
  105. data/test/test_raw.rb +58 -0
  106. data/test/test_reactive_vars.rb +118 -0
  107. data/test/test_realizer.rb +264 -0
  108. data/test/test_scope.rb +38 -0
  109. data/test/test_screens.rb +260 -0
  110. data/test/test_screens_realtk.rb +314 -0
  111. data/test/test_scrollable.rb +185 -0
  112. data/test/test_scrollable_wheel.rb +172 -0
  113. data/test/test_scrollbar_auto_hide.rb +127 -0
  114. data/test/test_split.rb +145 -0
  115. data/test/test_tabs.rb +201 -0
  116. data/test/test_text_content.rb +664 -0
  117. data/test/test_toast.rb +126 -0
  118. data/test/test_tree_inspector.rb +183 -0
  119. data/test/test_ui.rb +428 -0
  120. data/test/test_validator.rb +209 -0
  121. data/test/test_var.rb +32 -0
  122. data/test/test_widget_dsl.rb +621 -0
  123. data/test/test_widget_introspection.rb +126 -0
  124. data/test/test_widget_types.rb +429 -0
  125. data/test/test_widget_types_realtk.rb +82 -0
  126. data/test/test_widget_validators.rb +82 -0
  127. metadata +207 -0
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'test_helper'
4
+ require 'teek/ui/widget_validators'
5
+ require 'teek/ui/session'
6
+ require 'teek/ui/validator'
7
+
8
+ class TestWidgetValidators < Minitest::Test
9
+ def build_session
10
+ Teek::UI::Session.new(title: 'Widget Validators Test')
11
+ end
12
+
13
+ def test_for_type_returns_an_empty_array_for_an_unregistered_type
14
+ assert_equal [], Teek::UI::WidgetValidators.for_type(:__never_registered__)
15
+ end
16
+
17
+ def test_register_and_for_type_round_trip
18
+ calls = []
19
+ Teek::UI::WidgetValidators.register(:__test_widget_validators_round_trip__) { |*args| calls << args }
20
+
21
+ Teek::UI::WidgetValidators.for_type(:__test_widget_validators_round_trip__).each { |v| v.call(:node, :parent, :document, :errors) }
22
+
23
+ assert_equal [[:node, :parent, :document, :errors]], calls
24
+ end
25
+
26
+ def test_for_type_accepts_a_string_type_too
27
+ Teek::UI::WidgetValidators.register(:__test_widget_validators_string_type__) { }
28
+
29
+ refute_empty Teek::UI::WidgetValidators.for_type('__test_widget_validators_string_type__')
30
+ end
31
+
32
+ def test_describe_formats_a_named_node
33
+ document = Teek::UI::Document.new
34
+ node = document.create(type: :button, name: :go)
35
+
36
+ assert_equal '#button(:go)', Teek::UI::WidgetValidators.describe(node)
37
+ end
38
+
39
+ def test_describe_formats_an_unnamed_node
40
+ document = Teek::UI::Document.new
41
+ node = document.create(type: :button)
42
+
43
+ assert_equal 'an unnamed #button', Teek::UI::WidgetValidators.describe(node)
44
+ end
45
+
46
+ def test_describe_of_nil_is_the_document_root
47
+ assert_equal 'the document root', Teek::UI::WidgetValidators.describe(nil)
48
+ end
49
+
50
+ def test_a_custom_registered_validator_is_dispatched_during_validate_without_editing_validator
51
+ document = Teek::UI::Document.new
52
+ custom = document.create(type: :__test_widget_validators_custom_widget__, name: :thing)
53
+ document.root.add_child(custom)
54
+
55
+ seen = []
56
+ Teek::UI::WidgetValidators.register(:__test_widget_validators_custom_widget__) { |node, parent, doc, errors|
57
+ seen << [node, parent, doc, errors]
58
+ }
59
+
60
+ capture_io { Teek::UI::Validator.validate!(document) }
61
+
62
+ assert_equal 1, seen.length
63
+ node, parent, doc, errors = seen.first
64
+ assert_same custom, node
65
+ assert_same document.root, parent
66
+ assert_same document, doc
67
+ assert_kind_of Array, errors
68
+ end
69
+
70
+ def test_a_custom_registered_validator_can_append_an_error_that_surfaces_through_validate
71
+ document = Teek::UI::Document.new
72
+ custom = document.create(type: :__test_widget_validators_erroring_widget__, name: :thing)
73
+ document.root.add_child(custom)
74
+
75
+ Teek::UI::WidgetValidators.register(:__test_widget_validators_erroring_widget__) { |_n, _p, _d, errors|
76
+ errors << 'a custom widget validator problem'
77
+ }
78
+
79
+ error = assert_raises(Teek::UI::ValidationError) { Teek::UI::Validator.validate!(document) }
80
+ assert_match(/a custom widget validator problem/, error.message)
81
+ end
82
+ end
metadata ADDED
@@ -0,0 +1,207 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: teek-ui
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Cook
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: teek
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '0.3'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '0.3'
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '13.0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '13.0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: minitest
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '6.0'
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '6.0'
54
+ description: Declarative widgets, layout, events, and reactive state on top of teek
55
+ email:
56
+ - jcook.rubyist@gmail.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - CHANGELOG.md
62
+ - README.md
63
+ - lib/teek/ui.rb
64
+ - lib/teek/ui/canvas_item.rb
65
+ - lib/teek/ui/component_handle.rb
66
+ - lib/teek/ui/document.rb
67
+ - lib/teek/ui/errors.rb
68
+ - lib/teek/ui/event_binding.rb
69
+ - lib/teek/ui/event_bus.rb
70
+ - lib/teek/ui/grid_validator.rb
71
+ - lib/teek/ui/handle.rb
72
+ - lib/teek/ui/image.rb
73
+ - lib/teek/ui/keysyms.rb
74
+ - lib/teek/ui/menu_builder.rb
75
+ - lib/teek/ui/menu_entry_addressing.rb
76
+ - lib/teek/ui/modal_stack.rb
77
+ - lib/teek/ui/mouse_events.rb
78
+ - lib/teek/ui/node.rb
79
+ - lib/teek/ui/option_dump_parsing.rb
80
+ - lib/teek/ui/overlay_anchors.rb
81
+ - lib/teek/ui/overlay_validator.rb
82
+ - lib/teek/ui/pane_validator.rb
83
+ - lib/teek/ui/realized_node.rb
84
+ - lib/teek/ui/realizer.rb
85
+ - lib/teek/ui/scope.rb
86
+ - lib/teek/ui/screens.rb
87
+ - lib/teek/ui/session.rb
88
+ - lib/teek/ui/tab_validator.rb
89
+ - lib/teek/ui/text_content.rb
90
+ - lib/teek/ui/tree_inspector.rb
91
+ - lib/teek/ui/validator.rb
92
+ - lib/teek/ui/var.rb
93
+ - lib/teek/ui/version.rb
94
+ - lib/teek/ui/widget_addressing.rb
95
+ - lib/teek/ui/widget_dsl.rb
96
+ - lib/teek/ui/widget_type.rb
97
+ - lib/teek/ui/widget_types.rb
98
+ - lib/teek/ui/widget_types/button.rb
99
+ - lib/teek/ui/widget_types/canvas.rb
100
+ - lib/teek/ui/widget_types/checkbox.rb
101
+ - lib/teek/ui/widget_types/column.rb
102
+ - lib/teek/ui/widget_types/context_menu.rb
103
+ - lib/teek/ui/widget_types/divider.rb
104
+ - lib/teek/ui/widget_types/dropdown.rb
105
+ - lib/teek/ui/widget_types/grid.rb
106
+ - lib/teek/ui/widget_types/group.rb
107
+ - lib/teek/ui/widget_types/label.rb
108
+ - lib/teek/ui/widget_types/list.rb
109
+ - lib/teek/ui/widget_types/menu_bar.rb
110
+ - lib/teek/ui/widget_types/menu_checkbox.rb
111
+ - lib/teek/ui/widget_types/menu_item.rb
112
+ - lib/teek/ui/widget_types/menu_radio.rb
113
+ - lib/teek/ui/widget_types/number_box.rb
114
+ - lib/teek/ui/widget_types/pane.rb
115
+ - lib/teek/ui/widget_types/panel.rb
116
+ - lib/teek/ui/widget_types/progress.rb
117
+ - lib/teek/ui/widget_types/radio.rb
118
+ - lib/teek/ui/widget_types/row.rb
119
+ - lib/teek/ui/widget_types/scrollable.rb
120
+ - lib/teek/ui/widget_types/slider.rb
121
+ - lib/teek/ui/widget_types/spacer.rb
122
+ - lib/teek/ui/widget_types/split.rb
123
+ - lib/teek/ui/widget_types/tab.rb
124
+ - lib/teek/ui/widget_types/table.rb
125
+ - lib/teek/ui/widget_types/tabs.rb
126
+ - lib/teek/ui/widget_types/text_area.rb
127
+ - lib/teek/ui/widget_types/text_box.rb
128
+ - lib/teek/ui/widget_types/tree.rb
129
+ - lib/teek/ui/widget_types/window.rb
130
+ - lib/teek/ui/widget_validators.rb
131
+ - teek-ui.gemspec
132
+ - test/support/fake_app.rb
133
+ - test/test_busy.rb
134
+ - test/test_canvas_items.rb
135
+ - test/test_clipboard.rb
136
+ - test/test_close_handling.rb
137
+ - test/test_component.rb
138
+ - test/test_component_realtk.rb
139
+ - test/test_debug_info.rb
140
+ - test/test_document.rb
141
+ - test/test_event_bus.rb
142
+ - test/test_events.rb
143
+ - test/test_fake_app_contract.rb
144
+ - test/test_grid.rb
145
+ - test/test_handle.rb
146
+ - test/test_handle_destroy_realtk.rb
147
+ - test/test_helper.rb
148
+ - test/test_image.rb
149
+ - test/test_image_realtk.rb
150
+ - test/test_incremental_realize.rb
151
+ - test/test_keysyms.rb
152
+ - test/test_layout.rb
153
+ - test/test_lazy_realize.rb
154
+ - test/test_managed_window.rb
155
+ - test/test_menu_dsl.rb
156
+ - test/test_menu_entry_addressing.rb
157
+ - test/test_menu_realize.rb
158
+ - test/test_modal_handle.rb
159
+ - test/test_modal_stack.rb
160
+ - test/test_modal_stack_realtk.rb
161
+ - test/test_native_scrollable.rb
162
+ - test/test_node.rb
163
+ - test/test_overlay.rb
164
+ - test/test_raw.rb
165
+ - test/test_reactive_vars.rb
166
+ - test/test_realizer.rb
167
+ - test/test_scope.rb
168
+ - test/test_screens.rb
169
+ - test/test_screens_realtk.rb
170
+ - test/test_scrollable.rb
171
+ - test/test_scrollable_wheel.rb
172
+ - test/test_scrollbar_auto_hide.rb
173
+ - test/test_split.rb
174
+ - test/test_tabs.rb
175
+ - test/test_text_content.rb
176
+ - test/test_toast.rb
177
+ - test/test_tree_inspector.rb
178
+ - test/test_ui.rb
179
+ - test/test_validator.rb
180
+ - test/test_var.rb
181
+ - test/test_widget_dsl.rb
182
+ - test/test_widget_introspection.rb
183
+ - test/test_widget_types.rb
184
+ - test/test_widget_types_realtk.rb
185
+ - test/test_widget_validators.rb
186
+ homepage: https://github.com/jamescook/teek
187
+ licenses:
188
+ - MIT
189
+ metadata: {}
190
+ rdoc_options: []
191
+ require_paths:
192
+ - lib
193
+ required_ruby_version: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: '3.2'
198
+ required_rubygems_version: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ requirements: []
204
+ rubygems_version: 4.0.3
205
+ specification_version: 4
206
+ summary: The friendly way to build Tk apps in Ruby
207
+ test_files: []