shoes-swt 4.0.0.pre2

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 (238) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG +84 -0
  3. data/Gemfile +24 -0
  4. data/Guardfile +11 -0
  5. data/LICENSE +31 -0
  6. data/README.md +201 -0
  7. data/lib/shoes/swt.rb +118 -0
  8. data/lib/shoes/swt/animation.rb +46 -0
  9. data/lib/shoes/swt/app.rb +314 -0
  10. data/lib/shoes/swt/arc.rb +71 -0
  11. data/lib/shoes/swt/background.rb +41 -0
  12. data/lib/shoes/swt/border.rb +41 -0
  13. data/lib/shoes/swt/button.rb +18 -0
  14. data/lib/shoes/swt/check.rb +14 -0
  15. data/lib/shoes/swt/check_button.rb +19 -0
  16. data/lib/shoes/swt/color.rb +49 -0
  17. data/lib/shoes/swt/color_factory.rb +32 -0
  18. data/lib/shoes/swt/common/child.rb +16 -0
  19. data/lib/shoes/swt/common/clickable.rb +68 -0
  20. data/lib/shoes/swt/common/container.rb +28 -0
  21. data/lib/shoes/swt/common/fill.rb +38 -0
  22. data/lib/shoes/swt/common/painter.rb +92 -0
  23. data/lib/shoes/swt/common/painter_updates_position.rb +12 -0
  24. data/lib/shoes/swt/common/remove.rb +30 -0
  25. data/lib/shoes/swt/common/resource.rb +29 -0
  26. data/lib/shoes/swt/common/selection_listener.rb +14 -0
  27. data/lib/shoes/swt/common/stroke.rb +42 -0
  28. data/lib/shoes/swt/common/update_position.rb +15 -0
  29. data/lib/shoes/swt/common/visibility.rb +13 -0
  30. data/lib/shoes/swt/dialog.rb +90 -0
  31. data/lib/shoes/swt/disposed_protection.rb +23 -0
  32. data/lib/shoes/swt/download.rb +24 -0
  33. data/lib/shoes/swt/font.rb +32 -0
  34. data/lib/shoes/swt/gradient.rb +92 -0
  35. data/lib/shoes/swt/image.rb +128 -0
  36. data/lib/shoes/swt/image_pattern.rb +31 -0
  37. data/lib/shoes/swt/input_box.rb +73 -0
  38. data/lib/shoes/swt/key_listener.rb +145 -0
  39. data/lib/shoes/swt/line.rb +60 -0
  40. data/lib/shoes/swt/link.rb +31 -0
  41. data/lib/shoes/swt/link_segment.rb +111 -0
  42. data/lib/shoes/swt/list_box.rb +48 -0
  43. data/lib/shoes/swt/mouse_move_listener.rb +67 -0
  44. data/lib/shoes/swt/oval.rb +52 -0
  45. data/lib/shoes/swt/progress.rb +35 -0
  46. data/lib/shoes/swt/radio.rb +29 -0
  47. data/lib/shoes/swt/radio_group.rb +54 -0
  48. data/lib/shoes/swt/rect.rb +30 -0
  49. data/lib/shoes/swt/rect_painter.rb +23 -0
  50. data/lib/shoes/swt/redrawing_aspect.rb +123 -0
  51. data/lib/shoes/swt/shape.rb +133 -0
  52. data/lib/shoes/swt/shoes_layout.rb +43 -0
  53. data/lib/shoes/swt/slot.rb +39 -0
  54. data/lib/shoes/swt/sound.rb +119 -0
  55. data/lib/shoes/swt/star.rb +50 -0
  56. data/lib/shoes/swt/support/jl1.0.1.jar +0 -0
  57. data/lib/shoes/swt/support/jogg-0.0.7.jar +0 -0
  58. data/lib/shoes/swt/support/jorbis-0.0.15.jar +0 -0
  59. data/lib/shoes/swt/support/log4j-1.2.16.jar +0 -0
  60. data/lib/shoes/swt/support/mp3spi1.9.5.jar +0 -0
  61. data/lib/shoes/swt/support/tritonus_share.jar +0 -0
  62. data/lib/shoes/swt/support/vorbisspi1.0.3.jar +0 -0
  63. data/lib/shoes/swt/swt_button.rb +56 -0
  64. data/lib/shoes/swt/text_block.rb +124 -0
  65. data/lib/shoes/swt/text_block/centered_text_segment.rb +22 -0
  66. data/lib/shoes/swt/text_block/cursor_painter.rb +53 -0
  67. data/lib/shoes/swt/text_block/fitter.rb +212 -0
  68. data/lib/shoes/swt/text_block/painter.rb +47 -0
  69. data/lib/shoes/swt/text_block/text_font_factory.rb +50 -0
  70. data/lib/shoes/swt/text_block/text_segment.rb +108 -0
  71. data/lib/shoes/swt/text_block/text_segment_collection.rb +160 -0
  72. data/lib/shoes/swt/text_block/text_style_factory.rb +88 -0
  73. data/lib/shoes/swt/timer.rb +19 -0
  74. data/lib/shoes/swt/tooling/leak_hunter.rb +35 -0
  75. data/lib/shoes/swt/version.rb +5 -0
  76. data/manifests/common.rb +34 -0
  77. data/manifests/shoes-swt.rb +29 -0
  78. data/shoes-swt.gemspec +24 -0
  79. data/spec/code_coverage.rb +14 -0
  80. data/spec/shoes/animation_spec.rb +65 -0
  81. data/spec/shoes/app_spec.rb +484 -0
  82. data/spec/shoes/arc_spec.rb +51 -0
  83. data/spec/shoes/background_spec.rb +53 -0
  84. data/spec/shoes/border_spec.rb +47 -0
  85. data/spec/shoes/builtin_methods_spec.rb +110 -0
  86. data/spec/shoes/button_spec.rb +44 -0
  87. data/spec/shoes/check_spec.rb +35 -0
  88. data/spec/shoes/cli_spec.rb +15 -0
  89. data/spec/shoes/color_spec.rb +408 -0
  90. data/spec/shoes/common/inspect_spec.rb +26 -0
  91. data/spec/shoes/common/remove_spec.rb +38 -0
  92. data/spec/shoes/common/style_normalizer_spec.rb +28 -0
  93. data/spec/shoes/common/style_spec.rb +147 -0
  94. data/spec/shoes/configuration_spec.rb +36 -0
  95. data/spec/shoes/constants_spec.rb +38 -0
  96. data/spec/shoes/dialog_spec.rb +163 -0
  97. data/spec/shoes/dimension_spec.rb +407 -0
  98. data/spec/shoes/dimensions_spec.rb +837 -0
  99. data/spec/shoes/download_spec.rb +142 -0
  100. data/spec/shoes/flow_spec.rb +133 -0
  101. data/spec/shoes/font_spec.rb +37 -0
  102. data/spec/shoes/framework_learning_spec.rb +30 -0
  103. data/spec/shoes/gradient_spec.rb +32 -0
  104. data/spec/shoes/helpers/fake_element.rb +17 -0
  105. data/spec/shoes/helpers/inspect_helpers.rb +5 -0
  106. data/spec/shoes/helpers/sample17_helper.rb +66 -0
  107. data/spec/shoes/image_spec.rb +49 -0
  108. data/spec/shoes/images/shoe.jpg +0 -0
  109. data/spec/shoes/input_box_spec.rb +80 -0
  110. data/spec/shoes/integration_spec.rb +20 -0
  111. data/spec/shoes/internal_app_spec.rb +141 -0
  112. data/spec/shoes/keypress_spec.rb +11 -0
  113. data/spec/shoes/keyrelease_spec.rb +12 -0
  114. data/spec/shoes/line_spec.rb +49 -0
  115. data/spec/shoes/link_spec.rb +105 -0
  116. data/spec/shoes/list_box_spec.rb +74 -0
  117. data/spec/shoes/logger/ruby_spec.rb +8 -0
  118. data/spec/shoes/logger_spec.rb +45 -0
  119. data/spec/shoes/oval_spec.rb +24 -0
  120. data/spec/shoes/point_spec.rb +71 -0
  121. data/spec/shoes/progress_spec.rb +54 -0
  122. data/spec/shoes/radio_spec.rb +32 -0
  123. data/spec/shoes/rect_spec.rb +39 -0
  124. data/spec/shoes/renamed_delegate_spec.rb +70 -0
  125. data/spec/shoes/shape_spec.rb +95 -0
  126. data/spec/shoes/shared_examples/button.rb +6 -0
  127. data/spec/shoes/shared_examples/changeable.rb +26 -0
  128. data/spec/shoes/shared_examples/clickable.rb +5 -0
  129. data/spec/shoes/shared_examples/common_methods.rb +35 -0
  130. data/spec/shoes/shared_examples/dimensions.rb +32 -0
  131. data/spec/shoes/shared_examples/dsl.rb +44 -0
  132. data/spec/shoes/shared_examples/dsl/animate.rb +29 -0
  133. data/spec/shoes/shared_examples/dsl/arc.rb +45 -0
  134. data/spec/shoes/shared_examples/dsl/background.rb +26 -0
  135. data/spec/shoes/shared_examples/dsl/border.rb +10 -0
  136. data/spec/shoes/shared_examples/dsl/button.rb +5 -0
  137. data/spec/shoes/shared_examples/dsl/cap.rb +6 -0
  138. data/spec/shoes/shared_examples/dsl/check.rb +11 -0
  139. data/spec/shoes/shared_examples/dsl/edit_box.rb +8 -0
  140. data/spec/shoes/shared_examples/dsl/edit_line.rb +8 -0
  141. data/spec/shoes/shared_examples/dsl/editable_element.rb +29 -0
  142. data/spec/shoes/shared_examples/dsl/fill.rb +27 -0
  143. data/spec/shoes/shared_examples/dsl/flow.rb +15 -0
  144. data/spec/shoes/shared_examples/dsl/gradient.rb +62 -0
  145. data/spec/shoes/shared_examples/dsl/image.rb +21 -0
  146. data/spec/shoes/shared_examples/dsl/line.rb +9 -0
  147. data/spec/shoes/shared_examples/dsl/nofill.rb +6 -0
  148. data/spec/shoes/shared_examples/dsl/nostroke.rb +6 -0
  149. data/spec/shoes/shared_examples/dsl/oval.rb +88 -0
  150. data/spec/shoes/shared_examples/dsl/pattern.rb +34 -0
  151. data/spec/shoes/shared_examples/dsl/progress.rb +7 -0
  152. data/spec/shoes/shared_examples/dsl/rect.rb +92 -0
  153. data/spec/shoes/shared_examples/dsl/rgb.rb +26 -0
  154. data/spec/shoes/shared_examples/dsl/shape.rb +21 -0
  155. data/spec/shoes/shared_examples/dsl/star.rb +48 -0
  156. data/spec/shoes/shared_examples/dsl/stroke.rb +30 -0
  157. data/spec/shoes/shared_examples/dsl/strokewidth.rb +19 -0
  158. data/spec/shoes/shared_examples/dsl/style.rb +32 -0
  159. data/spec/shoes/shared_examples/dsl/text_elements.rb +81 -0
  160. data/spec/shoes/shared_examples/dsl/video.rb +5 -0
  161. data/spec/shoes/shared_examples/dsl_app_context.rb +8 -0
  162. data/spec/shoes/shared_examples/hover_leave.rb +11 -0
  163. data/spec/shoes/shared_examples/parent.rb +6 -0
  164. data/spec/shoes/shared_examples/scroll.rb +41 -0
  165. data/spec/shoes/shared_examples/shared_element_method.rb +60 -0
  166. data/spec/shoes/shared_examples/slot.rb +331 -0
  167. data/spec/shoes/shared_examples/state.rb +19 -0
  168. data/spec/shoes/shared_examples/style.rb +82 -0
  169. data/spec/shoes/slot_spec.rb +130 -0
  170. data/spec/shoes/sound_spec.rb +15 -0
  171. data/spec/shoes/span_spec.rb +112 -0
  172. data/spec/shoes/spec_helper.rb +24 -0
  173. data/spec/shoes/stack_spec.rb +79 -0
  174. data/spec/shoes/star_spec.rb +31 -0
  175. data/spec/shoes/text_block_dimensions_spec.rb +75 -0
  176. data/spec/shoes/text_block_spec.rb +270 -0
  177. data/spec/shoes/url_spec.rb +68 -0
  178. data/spec/shoes/widget_spec.rb +70 -0
  179. data/spec/shoes_spec.rb +44 -0
  180. data/spec/spec_helper.rb +18 -0
  181. data/spec/swt_shoes/animation_spec.rb +86 -0
  182. data/spec/swt_shoes/app_spec.rb +84 -0
  183. data/spec/swt_shoes/arc_spec.rb +103 -0
  184. data/spec/swt_shoes/background_spec.rb +67 -0
  185. data/spec/swt_shoes/border_spec.rb +52 -0
  186. data/spec/swt_shoes/button_spec.rb +101 -0
  187. data/spec/swt_shoes/check_spec.rb +28 -0
  188. data/spec/swt_shoes/color_factory_spec.rb +49 -0
  189. data/spec/swt_shoes/color_spec.rb +67 -0
  190. data/spec/swt_shoes/common/painter_spec.rb +49 -0
  191. data/spec/swt_shoes/common/remove_spec.rb +53 -0
  192. data/spec/swt_shoes/configuration_spec.rb +12 -0
  193. data/spec/swt_shoes/dialog_spec.rb +106 -0
  194. data/spec/swt_shoes/disposed_protection_spec.rb +49 -0
  195. data/spec/swt_shoes/flow_spec.rb +36 -0
  196. data/spec/swt_shoes/font_spec.rb +33 -0
  197. data/spec/swt_shoes/gradient_spec.rb +31 -0
  198. data/spec/swt_shoes/image_pattern_spec.rb +35 -0
  199. data/spec/swt_shoes/image_spec.rb +100 -0
  200. data/spec/swt_shoes/input_box_spec.rb +116 -0
  201. data/spec/swt_shoes/integration_spec.rb +27 -0
  202. data/spec/swt_shoes/key_listener_spec.rb +325 -0
  203. data/spec/swt_shoes/line_spec.rb +49 -0
  204. data/spec/swt_shoes/link_segment_spec.rb +120 -0
  205. data/spec/swt_shoes/link_spec.rb +54 -0
  206. data/spec/swt_shoes/list_box_spec.rb +56 -0
  207. data/spec/swt_shoes/minimal.png +0 -0
  208. data/spec/swt_shoes/mouse_move_listener_spec.rb +123 -0
  209. data/spec/swt_shoes/oval_spec.rb +51 -0
  210. data/spec/swt_shoes/progress_spec.rb +44 -0
  211. data/spec/swt_shoes/radio_group_spec.rb +73 -0
  212. data/spec/swt_shoes/radio_spec.rb +56 -0
  213. data/spec/swt_shoes/rect_painter_spec.rb +45 -0
  214. data/spec/swt_shoes/rect_spec.rb +19 -0
  215. data/spec/swt_shoes/shape_spec.rb +84 -0
  216. data/spec/swt_shoes/shared_examples/button.rb +21 -0
  217. data/spec/swt_shoes/shared_examples/clickable.rb +85 -0
  218. data/spec/swt_shoes/shared_examples/movable.rb +36 -0
  219. data/spec/swt_shoes/shared_examples/paintable.rb +7 -0
  220. data/spec/swt_shoes/shared_examples/painter.rb +83 -0
  221. data/spec/swt_shoes/shared_examples/pattern.rb +32 -0
  222. data/spec/swt_shoes/shared_examples/removable.rb +41 -0
  223. data/spec/swt_shoes/shared_examples/swt_app_context.rb +23 -0
  224. data/spec/swt_shoes/shared_examples/visibility.rb +15 -0
  225. data/spec/swt_shoes/shell_control_listener_spec.rb +23 -0
  226. data/spec/swt_shoes/slot_spec.rb +24 -0
  227. data/spec/swt_shoes/sound.rb +10 -0
  228. data/spec/swt_shoes/spec_helper.rb +31 -0
  229. data/spec/swt_shoes/star_spec.rb +47 -0
  230. data/spec/swt_shoes/text_block/centered_text_segment_spec.rb +16 -0
  231. data/spec/swt_shoes/text_block/cursor_painter_spec.rb +120 -0
  232. data/spec/swt_shoes/text_block/fitter_spec.rb +213 -0
  233. data/spec/swt_shoes/text_block/painter_spec.rb +212 -0
  234. data/spec/swt_shoes/text_block/text_font_factory_spec.rb +40 -0
  235. data/spec/swt_shoes/text_block/text_segment_collection_spec.rb +256 -0
  236. data/spec/swt_shoes/text_block/text_segment_spec.rb +135 -0
  237. data/spec/swt_shoes/text_block_spec.rb +199 -0
  238. metadata +496 -0
@@ -0,0 +1,7 @@
1
+ shared_examples_for "paintable" do
2
+ it "registers for painting" do
3
+ expect(swt_app).to receive(:add_paint_listener)
4
+ subject
5
+ end
6
+ end
7
+
@@ -0,0 +1,83 @@
1
+ # Provide `shape` (a double) and `subject` (a Painter)
2
+
3
+ shared_context "painter context" do
4
+ let(:event) { double("event", :gc => gc) }
5
+ let(:gc) { double("gc", :get_line_width => sw).as_null_object }
6
+ let(:fill) { Shoes::Swt::Color.new(Shoes::Color.new(11, 12, 13, fill_alpha)) }
7
+ let(:stroke) { Shoes::Swt::Color.new(Shoes::Color.new(111, 112, 113, stroke_alpha)) }
8
+ let(:fill_alpha) { 70 }
9
+ let(:stroke_alpha) { 110 }
10
+ let(:sw) { 10 }
11
+
12
+ before :each do
13
+ allow(shape).to receive(:fill) { fill }
14
+ allow(shape).to receive(:fill_alpha) { fill_alpha }
15
+ allow(shape).to receive(:stroke) { stroke }
16
+ allow(shape).to receive(:stroke_alpha) { stroke_alpha }
17
+ allow(subject).to receive(:reset_rotate) { double("reset_rotate").as_null_object }
18
+ end
19
+ end
20
+
21
+
22
+ shared_examples_for "movable painter" do
23
+ describe "when moved" do
24
+ let(:transform) { double("transform").as_null_object }
25
+
26
+ before :each do
27
+ allow(::Swt::Transform).to receive(:new) { transform }
28
+ shape.update_position
29
+ end
30
+
31
+ it "applies transform" do
32
+ expect(gc).to receive(:set_transform).with(transform)
33
+ subject.paint_control(event)
34
+ end
35
+ end
36
+ end
37
+
38
+ shared_examples_for "stroke painter" do
39
+ describe "sets stroke" do
40
+ specify "color" do
41
+ expect(gc).to receive(:set_foreground).with(stroke.real)
42
+ subject.paint_control(event)
43
+ end
44
+
45
+ specify "alpha" do
46
+ allow(gc).to receive(:set_alpha)
47
+ expect(gc).to receive(:set_alpha).with(stroke_alpha)
48
+ subject.paint_control(event)
49
+ end
50
+ end
51
+
52
+ it "sets strokewidth" do
53
+ allow(shape).to receive(:strokewidth) { 4 }
54
+ expect(gc).to receive(:set_line_width).with(4)
55
+ subject.paint_control(event)
56
+ end
57
+
58
+ it "sets antialias" do
59
+ expect(gc).to receive(:set_antialias).with(Swt::SWT::ON)
60
+ subject.paint_control(event)
61
+ end
62
+
63
+ it "sets line cap" do
64
+ expect(gc).to receive(:set_line_cap).with(anything)
65
+ subject.paint_control(event)
66
+ end
67
+ end
68
+
69
+ shared_examples_for "fill painter" do
70
+ describe "sets fill" do
71
+ specify "color" do
72
+ expect(gc).to receive(:set_background).with(fill.real)
73
+ subject.paint_control(event)
74
+ end
75
+
76
+ specify "alpha" do
77
+ # Once for stroke, once for fill
78
+ allow(gc).to receive(:set_alpha)
79
+ expect(gc).to receive(:set_alpha).with(fill_alpha)
80
+ subject.paint_control(event)
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,32 @@
1
+ shared_examples_for "an swt pattern" do
2
+ it { is_expected.to respond_to(:apply_as_stroke) }
3
+ it { is_expected.to respond_to(:apply_as_fill) }
4
+
5
+ describe "#apply_as_stroke" do
6
+ let(:gc) { double("graphics context") }
7
+ let(:left) { 0 }
8
+ let(:top) { 0 }
9
+ let(:width) { 10 }
10
+ let(:height) { 10 }
11
+
12
+ it "sets foreground" do
13
+ if subject.is_a? Shoes::Swt::Color
14
+ allow(gc).to receive(:set_alpha)
15
+ expect(gc).to receive(:set_foreground)
16
+ else
17
+ expect(gc).to receive(:set_foreground_pattern)
18
+ end
19
+ subject.apply_as_stroke(gc, left, top, width, height)
20
+ end
21
+
22
+ it "sets alpha" do
23
+ if subject.is_a? Shoes::Swt::Color
24
+ allow(gc).to receive(:set_foreground)
25
+ expect(gc).to receive(:set_alpha)
26
+ else
27
+ expect(gc).to receive(:set_foreground_pattern)
28
+ end
29
+ subject.apply_as_stroke(gc, left, top, width, height)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,41 @@
1
+ shared_examples_for "removable" do
2
+ it "should respond to remove" do
3
+ expect(subject).to respond_to :remove
4
+ end
5
+
6
+ it "should remove paint listener" do
7
+ expect(swt_app).to receive(:remove_paint_listener)
8
+ expect(swt_app).to receive(:remove_listener).at_least(2).times
9
+ subject.remove
10
+ end
11
+
12
+ it "disposes color factory if present" do
13
+ swt_app.as_null_object
14
+
15
+ color_factory = double("color factory")
16
+ expect(color_factory).to receive(:dispose)
17
+ subject.instance_variable_set(:@color_factory, color_factory)
18
+
19
+ subject.remove
20
+ end
21
+ end
22
+
23
+ shared_examples_for "removable native element" do
24
+ it "should respond to remove" do
25
+ expect(subject).to respond_to :remove
26
+ end
27
+
28
+ it "should dispose real when real is not disposed" do
29
+ allow(swt_app).to receive(:remove_listener)
30
+ allow(real).to receive(:disposed?) { false }
31
+ expect(real).to receive(:dispose)
32
+ subject.remove
33
+ end
34
+
35
+ it "should not dispose real when real is already disposed" do
36
+ allow(swt_app).to receive(:remove_listener)
37
+ allow(real).to receive(:disposed?) { true }
38
+ expect(real).not_to receive(:dispose)
39
+ subject.remove
40
+ end
41
+ end
@@ -0,0 +1,23 @@
1
+ # This is a common context for running Shoes::Swt specs.
2
+ # - parent: use for instantiating a Shoes::Swt object
3
+ # - swt_app: use for instantiating a Shoes::Swt object
4
+ # - shoes_app: use for instantiating a Shoes DSL object
5
+ shared_context "swt app" do
6
+ let(:swt_app_real) { double('swt app real', disposed?: false,
7
+ set_visible: true) }
8
+ let(:clickable_element) { double("clickable_element", delete: nil) }
9
+ let(:swt_app) do
10
+ swt_double = double('swt app', real: swt_app_real, disposed?: false,
11
+ add_paint_listener: true, remove_paint_listener: true,
12
+ add_clickable_element: true, add_listener: true, remove_listener: true,
13
+ flush: true, redraw: true, clickable_elements: clickable_element)
14
+ allow(swt_double).to receive(:app).and_return(swt_double)
15
+ swt_double
16
+ end
17
+ let(:shoes_app) { double('shoes app', gui: swt_app, rotate: 0, style: {}, element_styles: {}) }
18
+ let(:parent) { double('parent', app: swt_app, add_child: true, real: true) }
19
+ let(:parent_dsl) {double("parent dsl", add_child: true, contents: [],
20
+ gui: parent, x_dimension: double.as_null_object,
21
+ y_dimension: double.as_null_object)}
22
+ end
23
+
@@ -0,0 +1,15 @@
1
+ shared_examples_for "updating visibility" do
2
+ it "triggers redrawing on the app" do
3
+ with_redraws do
4
+ expect(swt_app).to receive(:redraw)
5
+ subject.update_visibility
6
+ end
7
+ end
8
+
9
+ it "passes visibility to real object" do
10
+ if subject.respond_to?(:gui) && subject.gui.respond_to?(:real)
11
+ expect(subject.gui.real).to receive(:set_visible)
12
+ subject.update_visibility
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,23 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::ShellControlListener do
4
+ let(:app) {double 'SWT App', dsl: dsl_app, shell: shell, real: real}
5
+ let(:shell) {double('Shell').as_null_object}
6
+ let(:resize_callbacks) {[]}
7
+ let(:dsl_app) {double('DSL App', resize_callbacks: resize_callbacks).as_null_object}
8
+ let(:block) {double 'Block', call: nil}
9
+ let(:resize_event) {double'resize_event', widget: shell}
10
+ let(:real) {double('Swt Real').as_null_object}
11
+
12
+ subject {Shoes::Swt::ShellControlListener.new(app)}
13
+ before :each do
14
+ subject.controlResized(resize_event)
15
+ end
16
+
17
+ describe 'resize' do
18
+ let(:resize_callbacks ){[block]}
19
+ it 'calls the resize block' do
20
+ expect(block).to have_received(:call)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::Slot do
4
+ include_context "swt app"
5
+ let(:dsl) {instance_double Shoes::Slot, hidden?: true,
6
+ visible?: false, contents: [content] }
7
+ let(:content) {double 'content', show: true, hide: true}
8
+
9
+ subject {Shoes::Swt::Slot.new dsl, swt_app}
10
+
11
+ describe '#update_visibility' do
12
+ it 'does not set visibility on the parent #904' do
13
+ subject.update_visibility
14
+ expect(swt_app.real).not_to have_received(:set_visible)
15
+ end
16
+
17
+ # spec may be deleted if we can hide slots as a whole and not each element
18
+ # on its own
19
+ it 'tries to hide the content' do
20
+ subject.update_visibility
21
+ expect(content).to have_received :hide
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,10 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::Sound do
4
+ let(:dsl) { double('dsl') }
5
+ let(:filepath) { double('filepath') }
6
+ subject { Shoes::Swt::Sound.new(dsl, filepath) }
7
+
8
+ its(:dsl) { is_expected.to be(parent) }
9
+ its(:filepath) { is_expected.to be(filepath) }
10
+ end
@@ -0,0 +1,31 @@
1
+ require 'code_coverage'
2
+ require "shoes/swt"
3
+ require "spec_helper"
4
+
5
+ RSpec.configure do |config|
6
+ config.before(:each) do
7
+ allow(Swt).to receive(:event_loop)
8
+ allow_any_instance_of(Shoes::Swt::App).to receive_messages(flush: true)
9
+ allow_any_instance_of(Swt::Widgets::Shell).to receive(:open)
10
+ allow_any_instance_of(Swt::Widgets::MessageBox).to receive(:open)
11
+ # stubbed as otherwise all sorts of callbacks are added during certain specs,
12
+ # which then fail because some doubles are not made for the methods called
13
+ allow(Shoes::Swt::RedrawingAspect).to receive_messages new: true
14
+ end
15
+ end
16
+
17
+ # as we do not create real apps most of the time there are no redraws and we
18
+ # we don't really want that during test execution either way as it adds stuff to
19
+ # methods that might break
20
+ def with_redraws(&blk)
21
+ allow(Shoes::Swt::RedrawingAspect).to receive(:new).and_call_original
22
+ aspect = Shoes::Swt::RedrawingAspect.new swt_app, double
23
+ begin
24
+ yield
25
+ ensure
26
+ aspect.remove_redraws
27
+ end
28
+ end
29
+
30
+ shared_examples = File.expand_path('../shared_examples/**/*.rb', __FILE__)
31
+ Dir[shared_examples].each { |f| require f }
@@ -0,0 +1,47 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::Star do
4
+ include_context "swt app"
5
+
6
+ let(:left) { 55 }
7
+ let(:top) { 77 }
8
+ let(:points) { 7 }
9
+ let(:outer) { 100 }
10
+ let(:inner) { 20 }
11
+ let(:dsl) { Shoes::Star.new shoes_app, parent, left, top, points, outer, inner }
12
+
13
+ subject { Shoes::Swt::Star.new dsl, swt_app }
14
+
15
+ context "#initialize" do
16
+ its(:dsl) { is_expected.to be(dsl) }
17
+ end
18
+
19
+ it_behaves_like "paintable"
20
+ it_behaves_like "updating visibility"
21
+ it_behaves_like 'clickable backend'
22
+
23
+ describe "painter" do
24
+ include_context "painter context"
25
+
26
+ let(:corners) { 0 }
27
+ let(:dsl) { double("dsl object", hidden: false, points: points, outer: outer,
28
+ inner: inner, element_width: outer * 2.0,
29
+ element_height: outer * 2.0, element_left: left,
30
+ element_top: top).as_null_object }
31
+ let(:shape) { Shoes::Swt::Star.new dsl, swt_app }
32
+ subject { Shoes::Swt::Star::Painter.new shape }
33
+
34
+ it_behaves_like "fill painter"
35
+ it_behaves_like "stroke painter"
36
+
37
+ it "fills star" do
38
+ expect(gc).to receive(:fillPolygon)
39
+ subject.paint_control(event)
40
+ end
41
+
42
+ it "draws star" do
43
+ expect(gc).to receive(:drawPolygon)
44
+ subject.paint_control(event)
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,16 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::TextBlock::CenteredTextSegment do
4
+ let(:width) { 200 }
5
+ let(:dsl) { double("dsl", text: "boo", font: "", size: 16, style:{}) }
6
+
7
+ subject { Shoes::Swt::TextBlock::CenteredTextSegment.new(dsl, width)}
8
+
9
+ it "takes all the width it can get" do
10
+ expect(subject.width).to eq(width)
11
+ end
12
+
13
+ it "calls last line width the full width" do
14
+ expect(subject.last_line_width).to eq(width)
15
+ end
16
+ end
@@ -0,0 +1,120 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::TextBlock::CursorPainter do
4
+ include_context "swt app"
5
+
6
+ let(:dsl) { double("dsl", app: shoes_app, textcursor: textcursor, has_textcursor?: true) }
7
+ let(:textcursor) { double("textcursor", left:0, top: 0) }
8
+ let(:segment_collection) { double('segment collection',
9
+ cursor_height: 12,
10
+ relative_text_position: 0)}
11
+
12
+ subject { Shoes::Swt::TextBlock::CursorPainter.new(dsl,
13
+ segment_collection) }
14
+
15
+ describe "missing cursor" do
16
+ before(:each) do
17
+ allow(dsl).to receive(:cursor) { nil }
18
+ allow(dsl).to receive(:textcursor=)
19
+ allow(textcursor).to receive(:remove)
20
+ allow(textcursor).to receive(:textcursor=)
21
+ end
22
+
23
+ it "shouldn't do anything without text cursor" do
24
+ allow(dsl).to receive(:has_textcursor?) { nil}
25
+ subject.draw
26
+ expect(dsl).to_not have_received(:textcursor=)
27
+ end
28
+
29
+ it "should remove leftover text cursor" do
30
+ subject.draw
31
+ expect(dsl).to have_received(:textcursor=)
32
+ expect(textcursor).to have_received(:remove)
33
+ end
34
+ end
35
+
36
+ describe "cursor positioning" do
37
+ let(:left) { 10 }
38
+ let(:top) { 20 }
39
+ let(:position) { double(x: 5, y: 5) }
40
+ let(:first_segment) { double("first segment", text: "first",
41
+ get_location: position, height: 10,
42
+ element_left: left, element_top: top) }
43
+
44
+ before(:each) do
45
+ allow(textcursor).to receive(:move)
46
+ allow(textcursor).to receive(:show)
47
+ end
48
+
49
+ context "with two segments" do
50
+ let(:second_segment) { double("second segment", text: "second",
51
+ get_location: position,
52
+ element_left: left, element_top: top + 100) }
53
+ before(:each) do
54
+ allow(dsl).to receive(:text).and_return(first_segment.text + second_segment.text)
55
+ end
56
+
57
+ context "when moving" do
58
+ context "in the first segment" do
59
+ before :each do
60
+ allow(dsl).to receive(:cursor) { 1 }
61
+ allow(segment_collection).to receive(:segment_at_text_position) { first_segment }
62
+ end
63
+
64
+ it "moves" do
65
+ subject.draw
66
+ expect(textcursor).to have_received(:move).with(left + position.x,
67
+ top + position.y)
68
+ expect(textcursor).to have_received(:show)
69
+ end
70
+
71
+ it "does not move when already in position" do
72
+ allow(textcursor).to receive(:left) { left + position.x }
73
+ allow(textcursor).to receive(:top) { top + position.y }
74
+ allow(subject).to receive(:move_textcursor)
75
+
76
+ subject.draw
77
+
78
+ expect(subject).to_not have_received(:move_textcursor)
79
+ end
80
+ end
81
+
82
+ context "in the second segment" do
83
+ before :each do
84
+ allow(dsl).to receive(:cursor) { -1 }
85
+ allow(segment_collection).to receive(:segment_at_text_position) { second_segment }
86
+ end
87
+
88
+ it "moves" do
89
+ subject.draw
90
+ expect(textcursor).to have_received(:move).with(left + position.x,
91
+ top + 100 + position.y)
92
+ expect(textcursor).to have_received(:show)
93
+ end
94
+
95
+ it "does not move when already in position" do
96
+ allow(textcursor).to receive(:left) { left + position.x }
97
+ allow(textcursor).to receive(:top) { top + 100 + position.y }
98
+ allow(subject).to receive(:move_textcursor)
99
+
100
+ subject.draw
101
+
102
+ expect(subject).to_not have_received(:move_textcursor)
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+
109
+ describe "textcursor management" do
110
+ before(:each) do
111
+ allow(shoes_app).to receive(:textcursor)
112
+ end
113
+
114
+ it "delegates to dsl" do
115
+ allow(dsl).to receive(:textcursor) { textcursor }
116
+ result = subject.textcursor
117
+ expect(result).to eq(textcursor)
118
+ end
119
+ end
120
+ end