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,44 @@
1
+ require 'spec_helper'
2
+
3
+ describe Shoes, 'load_backend' do
4
+ it "raises ArgumentError on bad input" do
5
+ expect { Shoes.load_backend :bogus }.to raise_error
6
+ end
7
+ end
8
+
9
+ describe Shoes, 'setup' do
10
+
11
+ it 'knows this method' do
12
+ expect(Shoes).to respond_to :setup
13
+ end
14
+
15
+ describe 'outputting on standard error' do
16
+
17
+ def expect_stderr_puts(regex)
18
+ expect($stderr).to receive(:puts).with(regex)
19
+ end
20
+
21
+ before :each do
22
+ expect_stderr_puts(/WARN.+deprecated/)
23
+ end
24
+
25
+ it 'puts a warning message to $stderr' do
26
+ Shoes.setup do end
27
+ end
28
+
29
+ it 'warns for individual gems' do
30
+ expect_stderr_puts(/WARN.+foo.+gem install foo/)
31
+ Shoes.setup do
32
+ gem 'foo'
33
+ end
34
+ end
35
+
36
+ it 'even reports the version number' do
37
+ expect_stderr_puts(/gem install foo --version \"~>2.10.0\"/)
38
+ Shoes.setup do
39
+ gem 'foo ~>2.10.0'
40
+ end
41
+ end
42
+ end
43
+
44
+ end
@@ -0,0 +1,18 @@
1
+ SHOESSPEC_ROOT = File.expand_path('..', __FILE__)
2
+ $LOAD_PATH << File.join('../lib', SHOESSPEC_ROOT)
3
+
4
+ require 'code_coverage'
5
+ require 'rspec'
6
+ require 'rspec/its'
7
+ require 'pry'
8
+ require 'shoes'
9
+ require 'shoes/ui/cli'
10
+ require 'fileutils'
11
+ require 'shoes/helpers/fake_element'
12
+ require 'shoes/helpers/inspect_helpers'
13
+
14
+ require 'webmock/rspec'
15
+ WebMock.disable_net_connect!(:allow => "codeclimate.com")
16
+
17
+ shared_examples = File.expand_path('../shoes/shared_examples/**/*.rb', __FILE__)
18
+ Dir[shared_examples].each { |f| require f }
@@ -0,0 +1,86 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::Animation do
4
+ include_context 'swt app'
5
+ let(:dsl) { double('dsl', :stopped? => false, :removed? => false,
6
+ :framerate => 10, :current_frame => nil,
7
+ :increment_frame => nil, :blk => block) }
8
+ let(:block) { double 'block', call: nil }
9
+ let(:display) { ::Swt.display }
10
+ subject { Shoes::Swt::Animation.new dsl, swt_app }
11
+
12
+ before :each do
13
+ allow(display).to receive(:timer_exec)
14
+ end
15
+
16
+ it "triggers an Swt timer" do
17
+ expect(display).to receive(:timer_exec)
18
+ subject
19
+ end
20
+
21
+ it "gets framerate" do
22
+ expect(dsl).to receive(:framerate)
23
+ subject
24
+ end
25
+
26
+ describe "task" do
27
+ let(:task) { subject.task }
28
+
29
+ it "calls block" do
30
+ expect(block).to receive(:call)
31
+ task.call
32
+ end
33
+
34
+ it "gets framerate" do
35
+ expect(dsl).to receive(:framerate)
36
+ task.call
37
+ end
38
+
39
+ it "triggers redraw" do
40
+ with_redraws do
41
+ expect(swt_app).to receive(:flush)
42
+ task.call
43
+ end
44
+ end
45
+
46
+ it "counts frames" do
47
+ expect(dsl).to receive(:increment_frame)
48
+ task.call
49
+ end
50
+
51
+ describe 'disabled' do
52
+ describe 'stopped?' do
53
+ before :each do
54
+ allow(dsl).to receive_messages :stopped? => true
55
+ task.call
56
+ end
57
+
58
+ it 'does not call the block' do
59
+ expect(block).to_not have_received :call
60
+ end
61
+
62
+ it 'continues calling the task' do
63
+ # one for initialize, one for the call in the task call
64
+ expect(display).to have_received(:timer_exec).exactly(2).times
65
+ end
66
+ end
67
+
68
+ describe 'removed?' do
69
+ before :each do
70
+ allow(dsl).to receive_messages :removed? => true
71
+ task.call
72
+ end
73
+
74
+ it 'does not call the block when removed' do
75
+ expect(block).to_not have_received :call
76
+ end
77
+
78
+ it 'does not continue calling itself when removed' do
79
+ # one time is initialize
80
+ expect(display).to have_received(:timer_exec).exactly(1).times
81
+ end
82
+ end
83
+ end
84
+
85
+ end
86
+ end
@@ -0,0 +1,84 @@
1
+ require "swt_shoes/spec_helper"
2
+
3
+ describe Shoes::Swt::App do
4
+ let(:opts) { {:background => Shoes::COLORS[:salmon], :resizable => true} }
5
+ let(:app) { double('app', :opts => opts,
6
+ :width => width,
7
+ :height => 0,
8
+ :app_title => 'double') }
9
+ let(:dsl) { app }
10
+
11
+ let(:opts_unresizable) { {:background => Shoes::COLORS[:salmon],
12
+ :resizable => false} }
13
+ let(:app_unresizable) { double('app', :opts => opts_unresizable,
14
+ :width => 0,
15
+ :height => 0,
16
+ :app_title => 'double') }
17
+ let(:width) {0}
18
+
19
+ subject { Shoes::Swt::App.new(app) }
20
+
21
+ it { is_expected.to respond_to :clipboard }
22
+ it { is_expected.to respond_to :clipboard= }
23
+
24
+ it_behaves_like "clickable backend" do
25
+ let(:swt_app) { subject }
26
+ let(:click_block_parameters) { click_block_coordinates }
27
+
28
+ before do
29
+ allow(dsl).to receive(:pass_coordinates?) { true }
30
+ allow(subject).to receive(:add_listener)
31
+ end
32
+ end
33
+
34
+ before :each do
35
+ Shoes::Swt.unregister_all
36
+ end
37
+
38
+ context "when registering" do
39
+ it "registers" do
40
+ old_apps_length = Shoes::Swt.apps.length
41
+ subject
42
+ expect(Shoes::Swt.apps.length).to eq(old_apps_length + 1)
43
+ expect(Shoes::Swt.apps.include?(subject)).to be_truthy
44
+ end
45
+ end
46
+
47
+ context "when running on a mac" do
48
+ let(:the_display) { ::Swt::Widgets::Display }
49
+
50
+ it "should set the menubar title" do
51
+ expect(the_display).to receive(:app_name=).with('double')
52
+ subject
53
+ end
54
+ end
55
+
56
+ context "main window style" do
57
+ BASE_BITMASK = Swt::SWT::CLOSE |
58
+ Swt::SWT::MIN |
59
+ Swt::SWT::V_SCROLL
60
+
61
+ it "should return a bitmask that represents being resizable" do
62
+ expect(subject.send(:main_window_style)).to eq(BASE_BITMASK | Swt::SWT::RESIZE | Swt::SWT::MAX)
63
+ end
64
+
65
+ it "should return a bitmask that represents not being resizable" do
66
+ not_resizable = Shoes::Swt::App.new app_unresizable
67
+ expect(not_resizable.send(:main_window_style)).to eq(BASE_BITMASK)
68
+ end
69
+ end
70
+
71
+ context "when attempting to copy text" do
72
+ it "copies text to clipboard" do
73
+ skip 'Seems to be broken with tmux please see/fix #398'
74
+ text = "test"
75
+ subject.clipboard = text
76
+ expect(subject.clipboard).to eq(text)
77
+ end
78
+ end
79
+
80
+ # fully testing the behavior would require stubbing for all of the open logic
81
+ # which at the time is overkill imo
82
+ it {is_expected.to respond_to :started?}
83
+
84
+ end
@@ -0,0 +1,103 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::Arc do
4
+ include_context "swt app"
5
+
6
+ let(:left) { 100 }
7
+ let(:top) { 200 }
8
+ let(:width) { 300 }
9
+ let(:height) { 400 }
10
+ let(:angle1) { Shoes::PI }
11
+ let(:angle2) { Shoes::HALF_PI }
12
+ let(:dsl) { double("dsl object", app: shoes_app, element_width: width,
13
+ element_height: height, element_left: left,
14
+ element_top: top, angle1: angle1, angle2: angle2,
15
+ wedge?: false, pass_coordinates?: nil,
16
+ hidden: false).as_null_object }
17
+ let(:fill_color) { Shoes::Color.new(40, 50, 60, 70) }
18
+ let(:stroke_color) { Shoes::Color.new(80, 90, 100, 110) }
19
+
20
+ subject { Shoes::Swt::Arc.new(dsl, swt_app) }
21
+
22
+ describe "basics" do
23
+ specify "converts angle1 to degrees" do
24
+ expect(subject.angle1).to eq(180.0)
25
+ end
26
+
27
+ specify "converts angle2 to degrees" do
28
+ expect(subject.angle2).to eq(90.0)
29
+ end
30
+
31
+ specify "delegates #wedge to dsl object" do
32
+ expect(dsl).to receive(:wedge?) { false }
33
+ expect(subject).to_not be_wedge
34
+ end
35
+ end
36
+
37
+ it_behaves_like "paintable"
38
+ it_behaves_like "updating visibility"
39
+ it_behaves_like "clickable backend"
40
+
41
+ describe "painter" do
42
+ include_context "painter context"
43
+
44
+ let(:shape) { Shoes::Swt::Arc.new(dsl, swt_app) }
45
+ subject { Shoes::Swt::Arc::Painter.new(shape) }
46
+
47
+ it_behaves_like "stroke painter"
48
+ it_behaves_like "fill painter"
49
+
50
+ context "normal fill style" do
51
+ before :each do
52
+ allow(shape).to receive_messages(wedge?: false)
53
+ end
54
+
55
+ specify "fills arc using path" do
56
+ expect(gc).to receive(:fill_path)
57
+ subject.paint_control(event)
58
+ end
59
+
60
+ specify "draws arc" do
61
+ expect(gc).to receive(:draw_arc)
62
+ subject.paint_control(event)
63
+ end
64
+
65
+ # Swt measures the arc counterclockwise, while Shoes measures it clockwise.
66
+ specify "translates DSL values for Swt" do
67
+ path = double('path')
68
+ allow(::Swt::Path).to receive(:new) { path }
69
+ args = [100, 200, width, height, 180.0, -90.0]
70
+ expect(path).to receive(:add_arc).with(*args)
71
+ sw = 10
72
+ args = [100+sw/2, 200+sw/2, width-sw, height-sw, 180, -90.0]
73
+ expect(gc).to receive(:draw_arc).with(*args)
74
+ subject.paint_control(gc)
75
+ end
76
+ end
77
+
78
+ context "wedge fill style" do
79
+ before :each do
80
+ allow(shape).to receive_messages(wedge?: true)
81
+ end
82
+
83
+ specify "fills arc" do
84
+ expect(gc).to receive(:fill_arc)
85
+ subject.paint_control(event)
86
+ end
87
+
88
+ specify "draws arc" do
89
+ expect(gc).to receive(:draw_arc)
90
+ subject.paint_control(event)
91
+ end
92
+
93
+ specify "translates DSL values for Swt" do
94
+ args = [100, 200, width, height, 180, -90.0]
95
+ expect(gc).to receive(:fill_arc).with(*args)
96
+ sw = 10
97
+ args = [100+sw/2, 200+sw/2, width-sw, height-sw, 180, -90.0]
98
+ expect(gc).to receive(:draw_arc).with(*args)
99
+ subject.paint_control(gc)
100
+ end
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,67 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::Background do
4
+ include_context "swt app"
5
+
6
+ let(:left) { 55 }
7
+ let(:top) { 77 }
8
+ let(:width) { 222 }
9
+ let(:height) { 111 }
10
+ let(:corners) { 0 }
11
+ let(:fill) { Shoes::COLORS[:salmon] }
12
+ let(:dsl) { double("dsl object", app: shoes_app,
13
+ element_left: left, element_top: top,
14
+ element_width: width, element_height: height,
15
+ strokewidth: 1, curve: corners, fill: fill,
16
+ hidden: false).as_null_object}
17
+
18
+ subject {
19
+ Shoes::Swt::Background.new dsl, swt_app
20
+ }
21
+
22
+ context "#initialize" do
23
+ it { is_expected.to be_an_instance_of(Shoes::Swt::Background) }
24
+ its(:dsl) { is_expected.to be(dsl) }
25
+ end
26
+
27
+ describe "#dispose" do
28
+ let(:fill) { double("fill", gui: fill_gui) }
29
+ let(:fill_gui) { double("fill gui") }
30
+
31
+ it "lets subresources go" do
32
+ expect(fill_gui).to receive(:dispose)
33
+ subject.dispose
34
+ end
35
+ end
36
+
37
+ it_behaves_like "paintable"
38
+ it_behaves_like "updating visibility"
39
+
40
+ describe "painter" do
41
+ include_context "painter context"
42
+
43
+ let(:corners) { 0 }
44
+ let(:shape) { Shoes::Swt::Background.new dsl, swt_app}
45
+ subject { Shoes::Swt::Background::Painter.new shape }
46
+
47
+ it_behaves_like "fill painter"
48
+
49
+ describe "square corners" do
50
+ let(:corners) { 0 }
51
+
52
+ it "fills rect" do
53
+ expect(gc).to receive(:fill_round_rectangle).with(left, top, width, height, corners*2, corners*2)
54
+ subject.paint_control(event)
55
+ end
56
+ end
57
+
58
+ describe "round corners" do
59
+ let(:corners) { 13 }
60
+
61
+ it "fills rect" do
62
+ expect(gc).to receive(:fill_round_rectangle).with(left, top, width, height, corners*2, corners*2)
63
+ subject.paint_control(event)
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,52 @@
1
+ require 'swt_shoes/spec_helper'
2
+
3
+ describe Shoes::Swt::Border do
4
+ include_context "swt app"
5
+
6
+ let(:left) { 55 }
7
+ let(:top) { 77 }
8
+ let(:width) { 222 }
9
+ let(:height) { 111 }
10
+ let(:corners) { 0 }
11
+ let(:dsl) { double("dsl object", element_width: width, element_height: height,
12
+ element_left: left, element_top: top, parent: parent,
13
+ strokewidth: 1, curve: corners,hidden: false).as_null_object }
14
+
15
+ subject { Shoes::Swt::Border.new dsl, swt_app }
16
+
17
+ context "#initialize" do
18
+ it { is_expected.to be_an_instance_of(Shoes::Swt::Border) }
19
+ its(:dsl) { is_expected.to be(dsl) }
20
+ end
21
+
22
+ it_behaves_like "paintable"
23
+ it_behaves_like "removable"
24
+
25
+ describe "painter" do
26
+ include_context "painter context"
27
+
28
+ let(:corners) { 0 }
29
+ let(:shape) { Shoes::Swt::Border.new dsl, swt_app }
30
+ subject { Shoes::Swt::Border::Painter.new shape }
31
+
32
+ it_behaves_like "stroke painter"
33
+
34
+ describe "square corners" do
35
+ let(:corners) { 0 }
36
+
37
+ specify "draws rect" do
38
+ expect(gc).to receive(:draw_round_rectangle).with(left+sw/2, top+sw/2, width-sw, height-sw, corners*2, corners*2)
39
+ subject.paint_control(event)
40
+ end
41
+ end
42
+
43
+ describe "round corners" do
44
+ let(:corners) { 13 }
45
+
46
+ specify "draws rect" do
47
+ expect(gc).to receive(:draw_round_rectangle).with(left+sw/2, top+sw/2, width-sw, height-sw, corners*2, corners*2)
48
+ subject.paint_control(event)
49
+ end
50
+ end
51
+ end
52
+ end