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,101 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::Button do
4
+ include_context "swt app"
5
+
6
+ let(:text) { "TEXT" }
7
+ let(:dsl) { double('dsl', app: shoes_app, text: text, blk: block, element_width: 100, element_height: 200).as_null_object }
8
+ let(:block) { proc {} }
9
+ let(:real) { double('real', disposed?: false).as_null_object }
10
+
11
+ subject { Shoes::Swt::Button.new dsl, parent }
12
+
13
+ before :each do
14
+ allow(parent).to receive(:real)
15
+ allow(parent).to receive(:dsl){double(contents: [])}
16
+ allow(dsl).to receive(:width=)
17
+ allow(dsl).to receive(:height=)
18
+ allow(::Swt::Widgets::Button).to receive(:new) { real }
19
+ end
20
+
21
+ it_behaves_like "buttons"
22
+ it_behaves_like "movable element", 140, 300
23
+ it_behaves_like "removable native element"
24
+ it_behaves_like "updating visibility"
25
+
26
+ describe "#initialize" do
27
+ it "sets text on real element" do
28
+ expect(real).to receive(:set_text).with(text)
29
+ subject
30
+ end
31
+
32
+ describe 'size' do
33
+ let(:width) {50}
34
+ let(:height) {20}
35
+ let(:size) {double 'real size', x: width, y: height}
36
+ let(:real) {double('button real', size: size, pack: true).as_null_object}
37
+
38
+ before :each do
39
+ allow(parent).to receive(:real)
40
+ allow(parent).to receive(:dsl){double(contents: [])}
41
+ allow(::Swt::Widgets::Button).to receive(:new) { real }
42
+ end
43
+
44
+ def dsl_for_dimensions(width, height)
45
+ double('dsl', element_width: width, element_height: height, text: text).as_null_object
46
+ end
47
+
48
+ def with_dimensions_real_should_be(input_width, input_height,
49
+ expected_width, expected_height)
50
+ dsl = dsl_for_dimensions input_width, input_height
51
+ expect(dsl).to receive(:element_width=).with(expected_width) unless input_width
52
+ expect(dsl).to receive(:element_height=).with(expected_height) unless input_height
53
+ Shoes::Swt::Button.new dsl, parent
54
+ end
55
+
56
+ it 'uses only real when width and height are not specified' do
57
+ with_dimensions_real_should_be nil, nil, real.size.x, real.size.y
58
+ end
59
+
60
+ it 'uses the real height and specified width if specified' do
61
+ with_dimensions_real_should_be 110, nil, 110, real.size.y
62
+ end
63
+
64
+ it 'uses the real width and specified height if specified' do
65
+ with_dimensions_real_should_be nil, 220, real.size.x, 220
66
+ end
67
+
68
+ it 'uses both specified values' do
69
+ with_dimensions_real_should_be 130, 220, 130, 220
70
+ end
71
+
72
+ it 'sends set_text to the real before packing it #452' do
73
+ expect(real).to receive(:set_text).ordered
74
+ expect(real).to receive(:pack).ordered
75
+ subject
76
+ end
77
+ end
78
+ end
79
+
80
+ describe 'eval block' do
81
+ it 'calls the block' do
82
+ expect(block).to receive(:call).with(dsl)
83
+ subject.eval_block block
84
+ end
85
+ end
86
+
87
+ describe 'click' do
88
+ it 'adds listener to real object' do
89
+ expect(real).to receive(:addSelectionListener)
90
+ subject.click block
91
+ end
92
+
93
+ it 'passes dsl object to block' do
94
+ expect(real).to receive(:addSelectionListener).once do |&blk|
95
+ expect(block).to receive(:call).with(dsl)
96
+ blk.call
97
+ end
98
+ subject.click block
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,28 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::Check do
4
+ include_context "swt app"
5
+
6
+ let(:text) { "TEXT" }
7
+ let(:dsl) { double('dsl',
8
+ :app => shoes_app, :visible? => true,
9
+ :left => 42, :top => 66,
10
+ :element_left => 42, element_top: 66,
11
+ :width => 100, :width= => true,
12
+ :element_width => 100, element_height: 200,
13
+ :height => 200, :height= => true,
14
+ blk: block, contents: []) }
15
+ let(:block) { proc {} }
16
+ let(:real) { double('real').as_null_object }
17
+
18
+ subject { Shoes::Swt::Check.new dsl, parent }
19
+
20
+ before :each do
21
+ allow(::Swt::Widgets::Button).to receive(:new) { real }
22
+ end
23
+
24
+ it_behaves_like "buttons"
25
+ it_behaves_like "movable element"
26
+ it_behaves_like "selectable"
27
+ it_behaves_like "updating visibility"
28
+ end
@@ -0,0 +1,49 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::ColorFactory do
4
+ let(:blue) { Shoes::COLORS[:blue] }
5
+ let(:gradient) { Shoes::Gradient.new(blue, blue) }
6
+
7
+ subject(:factory) { Shoes::Swt::ColorFactory.new }
8
+
9
+ it "turns Shoes::Color's into Shoes::Swt::Color's" do
10
+ expect(factory.create(blue)).to_not be_nil
11
+ end
12
+
13
+ it "hands back nil for nil" do
14
+ expect(factory.create(nil)).to be_nil
15
+ end
16
+
17
+ it "caches colors" do
18
+ first = factory.create(blue)
19
+ second = factory.create(blue)
20
+
21
+ expect(first).to eql(second)
22
+ end
23
+
24
+ it "disposes of colors" do
25
+ color = factory.create(blue)
26
+ expect(color).to receive(:dispose)
27
+
28
+ factory.dispose
29
+ end
30
+
31
+ it "doesn't cache colors across dispose" do
32
+ color = factory.create(blue)
33
+ factory.dispose
34
+
35
+ new_color = factory.create(blue)
36
+ expect(color).to_not eql(new_color)
37
+ end
38
+
39
+ it "allows gradients through" do
40
+ expect(factory.create(gradient)).to_not be_nil
41
+ end
42
+
43
+ it "safely disposes of non-disposable elements" do
44
+ factory.create(gradient)
45
+ expect(gradient).to receive(:dispose).never
46
+
47
+ factory.dispose
48
+ end
49
+ end
@@ -0,0 +1,67 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::Color do
4
+ subject(:color) { Shoes::Swt::Color.create(Shoes::COLORS[:salmon]) }
5
+
6
+ it_behaves_like "an swt pattern"
7
+
8
+ its(:class) { is_expected.to eq(Shoes::Swt::Color) }
9
+
10
+ describe "underlying SWT object" do
11
+ let(:real) { color.real }
12
+
13
+ it "is a native SWT color" do
14
+ expect(real.class).to eq(::Swt::Graphics::Color)
15
+ end
16
+
17
+ it "has same red value as Shoes color" do
18
+ expect(real.red).to eq(250)
19
+ end
20
+
21
+ it "has same green value as Shoes color" do
22
+ expect(real.green).to eq(128)
23
+ end
24
+
25
+ it "has same blue value as Shoes color" do
26
+ expect(real.blue).to eq(114)
27
+ end
28
+ end
29
+
30
+ describe "#apply_as_fill" do
31
+ let(:gc) { double("gc") }
32
+
33
+ it "sets background" do
34
+ allow(gc).to receive(:set_alpha)
35
+ expect(gc).to receive(:set_background).with(color.real)
36
+ color.apply_as_fill(gc)
37
+ end
38
+
39
+ it "sets alpha" do
40
+ allow(gc).to receive(:set_background)
41
+ expect(gc).to receive(:set_alpha)
42
+ color.apply_as_fill(gc, 10, 20, 100, 200)
43
+ end
44
+ end
45
+ end
46
+
47
+ describe Shoes::Swt::NullColor do
48
+ subject(:color) { Shoes::Swt::Color.create(nil) }
49
+
50
+ it { is_expected.to be_instance_of(Shoes::Swt::NullColor) }
51
+ its(:real) { is_expected.to be_nil }
52
+ its(:dsl) { is_expected.to be_nil }
53
+ its(:alpha) { is_expected.to be_nil }
54
+
55
+ describe "pattern interface" do
56
+ let(:gc) { double("graphics context") }
57
+
58
+ it "sends no messages in #apply_as_fill" do
59
+ color.apply_as_fill(gc)
60
+ end
61
+
62
+ it "sends no messages in #apply_as_stroke" do
63
+ color.apply_as_stroke(gc)
64
+ end
65
+ end
66
+ end
67
+
@@ -0,0 +1,49 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::Common::Painter do
4
+ let(:object) {double 'object', dsl: dsl}
5
+ let(:dsl) {double 'dsl', visible?: true, positioned?: true}
6
+ let(:event) {double 'paint event', gc: graphics_context}
7
+ let(:graphics_context) { double 'graphics_context',
8
+ set_antialias: nil, set_line_cap: nil,
9
+ set_transform: nil, setTransform: nil }
10
+ let(:transform) { double 'transform', disposed?: false }
11
+ subject {Shoes::Swt::Common::Painter.new object}
12
+
13
+ before do
14
+ allow(::Swt::Transform).to receive(:new) { transform }
15
+ end
16
+
17
+ describe '#paint_control' do
18
+ it 'should attempts to paint the object' do
19
+ expect(subject).to receive(:paint_object)
20
+ subject.paint_control event
21
+ end
22
+
23
+ it 'does paint the object if it is hidden' do
24
+ allow(dsl).to receive_messages visible?: false
25
+ expect(subject).not_to receive(:paint_object)
26
+ subject.paint_control event
27
+ end
28
+
29
+ it 'does not paint the object if it is not positioned' do
30
+ allow(dsl).to receive_messages positioned?: false
31
+ expect(subject).not_to receive(:paint_object)
32
+ subject.paint_control event
33
+ end
34
+
35
+ end
36
+
37
+ context "set_rotate" do
38
+ it "disposes of transform" do
39
+ expect(transform).to receive(:dispose)
40
+ expect(transform).to receive(:translate).at_least(:once)
41
+ expect(transform).to receive(:rotate).at_least(:once)
42
+
43
+ subject.set_rotate graphics_context, 0, 0, 0 do
44
+ #no-op
45
+ end
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,53 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::Common::Remove do
4
+ let(:clazz) {
5
+ Class.new do
6
+ include Shoes::Swt::Common::Remove
7
+
8
+ attr_reader :app, :real, :dsl
9
+
10
+ def initialize(app, dsl, real = nil)
11
+ @app = app
12
+ @dsl = dsl
13
+ @real = real
14
+ end
15
+ end
16
+ }
17
+
18
+ let(:app) { double("app", clickable_elements: clickable_elements) }
19
+ let(:dsl) { double("dsl") }
20
+ let(:clickable_elements) { [dsl] }
21
+
22
+ subject { clazz.new(app, dsl) }
23
+
24
+ before do
25
+ expect(app).to receive(:remove_paint_listener)
26
+ expect(app).to receive(:remove_listener).at_least(:once)
27
+ end
28
+
29
+ describe "remove" do
30
+ it "cleans up clickable element" do
31
+ subject.remove
32
+ expect(clickable_elements).to be_empty
33
+ end
34
+ end
35
+
36
+ describe "real disposal" do
37
+ let(:real) { double("real") }
38
+
39
+ subject { clazz.new(app, dsl, real) }
40
+
41
+ it "disposes of real if present" do
42
+ allow(real).to receive(:disposed?) { false }
43
+ expect(real).to receive(:dispose)
44
+ subject.remove
45
+ end
46
+
47
+ it "doesn't dispose if already done!" do
48
+ allow(real).to receive(:disposed?) { true }
49
+ expect(real).to_not receive(:dispose)
50
+ subject.remove
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,12 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Configuration do
4
+ context ":swt" do
5
+ describe "#backend" do
6
+ it "sets backend" do
7
+ expect(Shoes.configuration.backend).to eq(Shoes::Swt)
8
+ end
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,106 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ main_object = self
4
+
5
+ describe Shoes::Swt::Dialog do
6
+
7
+ def double_message_box
8
+ create_double_message_box double(:mb, open: true, :message= => true)
9
+ end
10
+
11
+ def double_message_box_expecting_message(message)
12
+ double_dialog = double(:mb, open: true)
13
+ expect(double_dialog).to receive(:message=).with(message)
14
+ create_double_message_box double_dialog
15
+ end
16
+
17
+ def double_message_box_returning(return_value)
18
+ create_double_message_box double(:mb, :message= => true, open: return_value)
19
+ end
20
+
21
+ def create_double_message_box(double_dialog)
22
+ allow(::Swt::Widgets::Shell).to receive(:new)
23
+ allow(::Swt::Widgets::MessageBox).to receive_messages(new: double_dialog)
24
+ end
25
+
26
+ before :each do
27
+ @dialog = Shoes::Swt::Dialog.new
28
+ end
29
+
30
+ TEXT = 'some random text'
31
+
32
+ describe 'alert' do
33
+ it 'pops up a window containing a short message.' do
34
+ double_message_box_expecting_message TEXT
35
+ @dialog.alert TEXT
36
+ end
37
+
38
+ it 'returns nil' do
39
+ double_message_box
40
+ expect(@dialog.alert('Nothing')).to be_nil
41
+ end
42
+ end
43
+
44
+ describe 'confirm' do
45
+ it 'pops up a window containing a short message.' do
46
+ double_message_box_expecting_message TEXT
47
+ @dialog.confirm TEXT
48
+ end
49
+
50
+ it 'is true when YES was pressed' do
51
+ double_message_box_returning ::Swt::SWT::YES
52
+ expect(subject.confirm).to be_truthy
53
+ end
54
+
55
+ it 'is false when NO was pressed' do
56
+ double_message_box_returning ::Swt::SWT::NO
57
+ expect(subject.confirm).to be_falsey
58
+ end
59
+
60
+ it 'is false when an arbitary number is returned' do
61
+ double_message_box_returning 42
62
+ expect(subject.confirm).to be_falsey
63
+ end
64
+ end
65
+
66
+ describe 'dialog_chooser' do
67
+ it 'responds to it' do
68
+ expect(@dialog).to respond_to :dialog_chooser
69
+ end
70
+ end
71
+
72
+ describe 'ask' do
73
+ it 'responds to it' do
74
+ expect(@dialog).to respond_to :ask
75
+ end
76
+ end
77
+
78
+ describe 'ask_color' do
79
+ it 'responds to it' do
80
+ expect(@dialog).to respond_to :ask_color
81
+ end
82
+ end
83
+
84
+ describe 'on the main object' do
85
+ describe '#alert' do
86
+
87
+ it 'returns nil' do
88
+ double_message_box
89
+ expect(main_object.alert('Something')).to be_nil
90
+ end
91
+ end
92
+
93
+ describe '#confirm' do
94
+ it 'returns true when YES was clicked' do
95
+ double_message_box_returning ::Swt::SWT::YES
96
+ expect(main_object.confirm('1 + 1 = 2')).to be_truthy
97
+ end
98
+
99
+ it 'returns false when NO was clicked' do
100
+ double_message_box_returning ::Swt::SWT::NO
101
+ expect(main_object.confirm('1 + 1 = 3')).to be_falsey
102
+ end
103
+ end
104
+ end
105
+
106
+ end