shoes 4.0.0.pre1 → 4.0.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (361) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +84 -32
  3. data/Gemfile +22 -1
  4. data/README.md +28 -13
  5. data/Rakefile +7 -210
  6. data/bin/ruby-shoes +2 -2
  7. data/ext/install/shoes.bat +4 -1
  8. data/lib/shoes.rb +1 -121
  9. data/lib/shoes/{cli.rb → ui/cli.rb} +7 -1
  10. data/lib/shoes/{help.rb → ui/help.rb} +2 -2
  11. data/lib/shoes/{manual.rb → ui/manual.rb} +1 -1
  12. data/lib/shoes/version.rb +1 -1
  13. data/manifests/common.rb +34 -0
  14. data/manifests/shoes.rb +44 -0
  15. data/samples/Gemfile +3 -0
  16. data/samples/Gemfile.lock +35 -0
  17. data/samples/README +16 -5
  18. data/samples/boom.rb +239 -0
  19. data/samples/clicky.rb +24 -0
  20. data/samples/flow.rb +63 -0
  21. data/samples/gray.rb +11 -0
  22. data/samples/nks_booklist.rb +24 -0
  23. data/samples/nks_breadsticks.rb +7 -0
  24. data/samples/nks_dancing_circle.rb +13 -0
  25. data/samples/nks_dictionary.rb +23 -0
  26. data/samples/nks_edit_box.rb +4 -0
  27. data/samples/nks_edit_line.rb +6 -0
  28. data/samples/nks_notes.rb +16 -0
  29. data/samples/nks_self.rb +6 -0
  30. data/samples/nks_text_sizes.rb +10 -0
  31. data/samples/nks_trurl.rb +5 -0
  32. data/samples/packaging/package_me.rb +6 -0
  33. data/samples/present.rb +27 -0
  34. data/samples/progress.rb +10 -0
  35. data/samples/sample31.rb +1 -1
  36. data/samples/simple-calc.rb +1 -1
  37. data/samples/simple-tictactoe.rb +238 -0
  38. data/samples/simple-visibility.rb +11 -0
  39. data/samples/simple-widget.rb +9 -0
  40. data/samples/swt-raw.rb +20 -0
  41. data/samples/troll.rb +22 -0
  42. data/shoes.gemspec +10 -22
  43. data/snapshots/sample56.png +0 -0
  44. data/static/manual-en.txt +16 -7
  45. data/tasks/changelog.rb +92 -0
  46. data/tasks/gem.rb +38 -0
  47. data/tasks/rspec.rb +106 -0
  48. data/tasks/sample.rb +66 -0
  49. data/tasks/yard.rb +13 -0
  50. metadata +55 -488
  51. data/.gitignore +0 -53
  52. data/.rspec +0 -3
  53. data/.ruby-gemset +0 -1
  54. data/.ruby-version +0 -1
  55. data/.travis.yml +0 -31
  56. data/bin/shoes +0 -59
  57. data/bin/shoes.bat +0 -6
  58. data/fonts/Coolvetica.ttf +0 -0
  59. data/fonts/Lacuna.ttf +0 -0
  60. data/lib/ext/highlighter.rb +0 -2
  61. data/lib/ext/highlighter/common.rb +0 -197
  62. data/lib/ext/highlighter/lang/ruby.rb +0 -316
  63. data/lib/ext/highlighter/markup.rb +0 -222
  64. data/lib/rubygems_plugin.rb +0 -19
  65. data/lib/shoes/animation.rb +0 -55
  66. data/lib/shoes/app.rb +0 -320
  67. data/lib/shoes/arc.rb +0 -35
  68. data/lib/shoes/background.rb +0 -30
  69. data/lib/shoes/border.rb +0 -33
  70. data/lib/shoes/builtin_methods.rb +0 -73
  71. data/lib/shoes/button.rb +0 -32
  72. data/lib/shoes/check_button.rb +0 -43
  73. data/lib/shoes/color.rb +0 -375
  74. data/lib/shoes/common/background_element.rb +0 -9
  75. data/lib/shoes/common/changeable.rb +0 -34
  76. data/lib/shoes/common/clickable.rb +0 -17
  77. data/lib/shoes/common/common_methods.rb +0 -70
  78. data/lib/shoes/common/fill.rb +0 -21
  79. data/lib/shoes/common/registration.rb +0 -33
  80. data/lib/shoes/common/state.rb +0 -18
  81. data/lib/shoes/common/stroke.rb +0 -28
  82. data/lib/shoes/common/style.rb +0 -34
  83. data/lib/shoes/common/style_normalizer.rb +0 -16
  84. data/lib/shoes/configuration.rb +0 -96
  85. data/lib/shoes/dialog.rb +0 -27
  86. data/lib/shoes/dimension.rb +0 -237
  87. data/lib/shoes/dimensions.rb +0 -194
  88. data/lib/shoes/download.rb +0 -117
  89. data/lib/shoes/dsl.rb +0 -478
  90. data/lib/shoes/font.rb +0 -49
  91. data/lib/shoes/gradient.rb +0 -18
  92. data/lib/shoes/image.rb +0 -33
  93. data/lib/shoes/image_pattern.rb +0 -10
  94. data/lib/shoes/input_box.rb +0 -68
  95. data/lib/shoes/key_event.rb +0 -17
  96. data/lib/shoes/line.rb +0 -38
  97. data/lib/shoes/link.rb +0 -49
  98. data/lib/shoes/link_hover.rb +0 -5
  99. data/lib/shoes/list_box.rb +0 -44
  100. data/lib/shoes/logger.rb +0 -66
  101. data/lib/shoes/logger/ruby.rb +0 -18
  102. data/lib/shoes/mock.rb +0 -30
  103. data/lib/shoes/mock/animation.rb +0 -8
  104. data/lib/shoes/mock/app.rb +0 -44
  105. data/lib/shoes/mock/arc.rb +0 -8
  106. data/lib/shoes/mock/background.rb +0 -10
  107. data/lib/shoes/mock/border.rb +0 -7
  108. data/lib/shoes/mock/button.rb +0 -10
  109. data/lib/shoes/mock/check.rb +0 -24
  110. data/lib/shoes/mock/common_methods.rb +0 -11
  111. data/lib/shoes/mock/dialog.rb +0 -13
  112. data/lib/shoes/mock/download.rb +0 -18
  113. data/lib/shoes/mock/font.rb +0 -17
  114. data/lib/shoes/mock/image.rb +0 -12
  115. data/lib/shoes/mock/image_pattern.rb +0 -9
  116. data/lib/shoes/mock/input_box.rb +0 -23
  117. data/lib/shoes/mock/keypress.rb +0 -8
  118. data/lib/shoes/mock/keyrelease.rb +0 -8
  119. data/lib/shoes/mock/line.rb +0 -14
  120. data/lib/shoes/mock/link.rb +0 -11
  121. data/lib/shoes/mock/list_box.rb +0 -16
  122. data/lib/shoes/mock/oval.rb +0 -11
  123. data/lib/shoes/mock/progress.rb +0 -10
  124. data/lib/shoes/mock/radio.rb +0 -26
  125. data/lib/shoes/mock/rect.rb +0 -13
  126. data/lib/shoes/mock/shape.rb +0 -19
  127. data/lib/shoes/mock/slot.rb +0 -14
  128. data/lib/shoes/mock/sound.rb +0 -8
  129. data/lib/shoes/mock/star.rb +0 -13
  130. data/lib/shoes/mock/text_block.rb +0 -29
  131. data/lib/shoes/mock/timer.rb +0 -8
  132. data/lib/shoes/oval.rb +0 -28
  133. data/lib/shoes/point.rb +0 -43
  134. data/lib/shoes/progress.rb +0 -26
  135. data/lib/shoes/radio.rb +0 -15
  136. data/lib/shoes/rect.rb +0 -28
  137. data/lib/shoes/renamed_delegate.rb +0 -15
  138. data/lib/shoes/shape.rb +0 -175
  139. data/lib/shoes/slot.rb +0 -232
  140. data/lib/shoes/slot_contents.rb +0 -56
  141. data/lib/shoes/sound.rb +0 -16
  142. data/lib/shoes/span.rb +0 -16
  143. data/lib/shoes/star.rb +0 -49
  144. data/lib/shoes/swt.rb +0 -114
  145. data/lib/shoes/swt/animation.rb +0 -46
  146. data/lib/shoes/swt/app.rb +0 -300
  147. data/lib/shoes/swt/arc.rb +0 -70
  148. data/lib/shoes/swt/background.rb +0 -31
  149. data/lib/shoes/swt/border.rb +0 -37
  150. data/lib/shoes/swt/button.rb +0 -18
  151. data/lib/shoes/swt/check.rb +0 -14
  152. data/lib/shoes/swt/check_button.rb +0 -19
  153. data/lib/shoes/swt/color.rb +0 -45
  154. data/lib/shoes/swt/common/child.rb +0 -16
  155. data/lib/shoes/swt/common/clear.rb +0 -24
  156. data/lib/shoes/swt/common/clickable.rb +0 -62
  157. data/lib/shoes/swt/common/container.rb +0 -28
  158. data/lib/shoes/swt/common/fill.rb +0 -37
  159. data/lib/shoes/swt/common/painter.rb +0 -83
  160. data/lib/shoes/swt/common/painter_updates_position.rb +0 -12
  161. data/lib/shoes/swt/common/resource.rb +0 -14
  162. data/lib/shoes/swt/common/selection_listener.rb +0 -14
  163. data/lib/shoes/swt/common/stroke.rb +0 -41
  164. data/lib/shoes/swt/common/toggle.rb +0 -13
  165. data/lib/shoes/swt/common/update_position.rb +0 -15
  166. data/lib/shoes/swt/dialog.rb +0 -89
  167. data/lib/shoes/swt/disposed_protection.rb +0 -23
  168. data/lib/shoes/swt/download.rb +0 -24
  169. data/lib/shoes/swt/fitted_text_layout.rb +0 -94
  170. data/lib/shoes/swt/fitted_text_layout_collection.rb +0 -108
  171. data/lib/shoes/swt/font.rb +0 -32
  172. data/lib/shoes/swt/gradient.rb +0 -77
  173. data/lib/shoes/swt/image.rb +0 -130
  174. data/lib/shoes/swt/image_pattern.rb +0 -19
  175. data/lib/shoes/swt/input_box.rb +0 -73
  176. data/lib/shoes/swt/key_listener.rb +0 -145
  177. data/lib/shoes/swt/line.rb +0 -57
  178. data/lib/shoes/swt/link.rb +0 -37
  179. data/lib/shoes/swt/link_segment.rb +0 -108
  180. data/lib/shoes/swt/list_box.rb +0 -49
  181. data/lib/shoes/swt/mouse_move_listener.rb +0 -61
  182. data/lib/shoes/swt/oval.rb +0 -53
  183. data/lib/shoes/swt/progress.rb +0 -35
  184. data/lib/shoes/swt/radio.rb +0 -29
  185. data/lib/shoes/swt/radio_group.rb +0 -54
  186. data/lib/shoes/swt/rect.rb +0 -31
  187. data/lib/shoes/swt/rect_painter.rb +0 -23
  188. data/lib/shoes/swt/redrawing_aspect.rb +0 -122
  189. data/lib/shoes/swt/shape.rb +0 -101
  190. data/lib/shoes/swt/shoes_layout.rb +0 -43
  191. data/lib/shoes/swt/slot.rb +0 -25
  192. data/lib/shoes/swt/sound.rb +0 -119
  193. data/lib/shoes/swt/star.rb +0 -51
  194. data/lib/shoes/swt/swt_button.rb +0 -49
  195. data/lib/shoes/swt/text_block.rb +0 -133
  196. data/lib/shoes/swt/text_block_cursor_painter.rb +0 -112
  197. data/lib/shoes/swt/text_block_fitter.rb +0 -180
  198. data/lib/shoes/swt/text_block_painter.rb +0 -49
  199. data/lib/shoes/swt/text_font_factory.rb +0 -27
  200. data/lib/shoes/swt/text_style_factory.rb +0 -88
  201. data/lib/shoes/swt/timer.rb +0 -19
  202. data/lib/shoes/swt/tooling/leak_hunter.rb +0 -84
  203. data/lib/shoes/text.rb +0 -14
  204. data/lib/shoes/text_block.rb +0 -162
  205. data/lib/shoes/timer.rb +0 -10
  206. data/lib/shoes/url.rb +0 -47
  207. data/lib/shoes/widget.rb +0 -73
  208. data/lib/support/jl1.0.1.jar +0 -0
  209. data/lib/support/jogg-0.0.7.jar +0 -0
  210. data/lib/support/jorbis-0.0.15.jar +0 -0
  211. data/lib/support/log4j-1.2.16.jar +0 -0
  212. data/lib/support/mp3spi1.9.5.jar +0 -0
  213. data/lib/support/tritonus_share.jar +0 -0
  214. data/lib/support/vorbisspi1.0.3.jar +0 -0
  215. data/samples/good-clock-adjusted.rb +0 -49
  216. data/spec/async_helper.rb +0 -21
  217. data/spec/code_coverage.rb +0 -11
  218. data/spec/shoes/animation_spec.rb +0 -65
  219. data/spec/shoes/app_spec.rb +0 -411
  220. data/spec/shoes/arc_spec.rb +0 -53
  221. data/spec/shoes/background_spec.rb +0 -48
  222. data/spec/shoes/border_spec.rb +0 -43
  223. data/spec/shoes/builtin_methods_spec.rb +0 -84
  224. data/spec/shoes/button_spec.rb +0 -41
  225. data/spec/shoes/check_spec.rb +0 -31
  226. data/spec/shoes/cli_spec.rb +0 -16
  227. data/spec/shoes/color_spec.rb +0 -396
  228. data/spec/shoes/common/style_normalizer_spec.rb +0 -28
  229. data/spec/shoes/common/style_spec.rb +0 -58
  230. data/spec/shoes/configuration_spec.rb +0 -37
  231. data/spec/shoes/constants_spec.rb +0 -38
  232. data/spec/shoes/dialog_spec.rb +0 -163
  233. data/spec/shoes/dimension_spec.rb +0 -381
  234. data/spec/shoes/dimensions_spec.rb +0 -831
  235. data/spec/shoes/download_spec.rb +0 -133
  236. data/spec/shoes/flow_spec.rb +0 -92
  237. data/spec/shoes/font_spec.rb +0 -38
  238. data/spec/shoes/framework_learning_spec.rb +0 -30
  239. data/spec/shoes/helpers/fake_element.rb +0 -11
  240. data/spec/shoes/helpers/sample17_helper.rb +0 -66
  241. data/spec/shoes/image_spec.rb +0 -45
  242. data/spec/shoes/images/shoe.jpg +0 -0
  243. data/spec/shoes/input_box_spec.rb +0 -44
  244. data/spec/shoes/integration_spec.rb +0 -20
  245. data/spec/shoes/keypress_spec.rb +0 -11
  246. data/spec/shoes/keyrelease_spec.rb +0 -12
  247. data/spec/shoes/line_spec.rb +0 -47
  248. data/spec/shoes/link_spec.rb +0 -89
  249. data/spec/shoes/list_box_spec.rb +0 -63
  250. data/spec/shoes/logger/ruby_spec.rb +0 -9
  251. data/spec/shoes/logger_spec.rb +0 -45
  252. data/spec/shoes/oval_spec.rb +0 -20
  253. data/spec/shoes/point_spec.rb +0 -51
  254. data/spec/shoes/progress_spec.rb +0 -40
  255. data/spec/shoes/radio_spec.rb +0 -28
  256. data/spec/shoes/rect_spec.rb +0 -38
  257. data/spec/shoes/renamed_delegate_spec.rb +0 -70
  258. data/spec/shoes/shape_spec.rb +0 -54
  259. data/spec/shoes/shared_examples/button.rb +0 -6
  260. data/spec/shoes/shared_examples/changeable.rb +0 -26
  261. data/spec/shoes/shared_examples/clickable.rb +0 -5
  262. data/spec/shoes/shared_examples/common_methods.rb +0 -42
  263. data/spec/shoes/shared_examples/dimensions.rb +0 -32
  264. data/spec/shoes/shared_examples/dsl.rb +0 -42
  265. data/spec/shoes/shared_examples/dsl/animate.rb +0 -29
  266. data/spec/shoes/shared_examples/dsl/arc.rb +0 -45
  267. data/spec/shoes/shared_examples/dsl/background.rb +0 -26
  268. data/spec/shoes/shared_examples/dsl/border.rb +0 -10
  269. data/spec/shoes/shared_examples/dsl/cap.rb +0 -6
  270. data/spec/shoes/shared_examples/dsl/check.rb +0 -11
  271. data/spec/shoes/shared_examples/dsl/edit_box.rb +0 -8
  272. data/spec/shoes/shared_examples/dsl/edit_line.rb +0 -8
  273. data/spec/shoes/shared_examples/dsl/editable_element.rb +0 -29
  274. data/spec/shoes/shared_examples/dsl/fill.rb +0 -27
  275. data/spec/shoes/shared_examples/dsl/flow.rb +0 -15
  276. data/spec/shoes/shared_examples/dsl/gradient.rb +0 -52
  277. data/spec/shoes/shared_examples/dsl/image.rb +0 -21
  278. data/spec/shoes/shared_examples/dsl/line.rb +0 -9
  279. data/spec/shoes/shared_examples/dsl/nofill.rb +0 -6
  280. data/spec/shoes/shared_examples/dsl/nostroke.rb +0 -6
  281. data/spec/shoes/shared_examples/dsl/oval.rb +0 -60
  282. data/spec/shoes/shared_examples/dsl/pattern.rb +0 -34
  283. data/spec/shoes/shared_examples/dsl/progress.rb +0 -7
  284. data/spec/shoes/shared_examples/dsl/rect.rb +0 -92
  285. data/spec/shoes/shared_examples/dsl/rgb.rb +0 -26
  286. data/spec/shoes/shared_examples/dsl/shape.rb +0 -21
  287. data/spec/shoes/shared_examples/dsl/star.rb +0 -48
  288. data/spec/shoes/shared_examples/dsl/stroke.rb +0 -30
  289. data/spec/shoes/shared_examples/dsl/strokewidth.rb +0 -19
  290. data/spec/shoes/shared_examples/dsl/style.rb +0 -32
  291. data/spec/shoes/shared_examples/dsl/text_elements.rb +0 -81
  292. data/spec/shoes/shared_examples/dsl_app_context.rb +0 -8
  293. data/spec/shoes/shared_examples/hover_leave.rb +0 -11
  294. data/spec/shoes/shared_examples/parent.rb +0 -6
  295. data/spec/shoes/shared_examples/shared_element_method.rb +0 -52
  296. data/spec/shoes/shared_examples/slot.rb +0 -272
  297. data/spec/shoes/shared_examples/state.rb +0 -19
  298. data/spec/shoes/shared_examples/style.rb +0 -24
  299. data/spec/shoes/slot_spec.rb +0 -60
  300. data/spec/shoes/sound_spec.rb +0 -15
  301. data/spec/shoes/span_spec.rb +0 -94
  302. data/spec/shoes/spec_helper.rb +0 -1
  303. data/spec/shoes/stack_spec.rb +0 -53
  304. data/spec/shoes/star_spec.rb +0 -30
  305. data/spec/shoes/text_block_spec.rb +0 -242
  306. data/spec/shoes/url_spec.rb +0 -66
  307. data/spec/shoes/widget_spec.rb +0 -34
  308. data/spec/shoes_spec.rb +0 -44
  309. data/spec/spec_helper.rb +0 -16
  310. data/spec/swt_shoes/animation_spec.rb +0 -86
  311. data/spec/swt_shoes/app_spec.rb +0 -75
  312. data/spec/swt_shoes/arc_spec.rb +0 -101
  313. data/spec/swt_shoes/background_spec.rb +0 -56
  314. data/spec/swt_shoes/border_spec.rb +0 -51
  315. data/spec/swt_shoes/button_spec.rb +0 -101
  316. data/spec/swt_shoes/check_spec.rb +0 -28
  317. data/spec/swt_shoes/color_spec.rb +0 -67
  318. data/spec/swt_shoes/common/painter_spec.rb +0 -29
  319. data/spec/swt_shoes/configuration_spec.rb +0 -12
  320. data/spec/swt_shoes/dialog_spec.rb +0 -106
  321. data/spec/swt_shoes/disposed_protection_spec.rb +0 -49
  322. data/spec/swt_shoes/fitted_text_layout_collection_spec.rb +0 -174
  323. data/spec/swt_shoes/fitted_text_layout_spec.rb +0 -130
  324. data/spec/swt_shoes/flow_spec.rb +0 -26
  325. data/spec/swt_shoes/font_spec.rb +0 -33
  326. data/spec/swt_shoes/gradient_spec.rb +0 -20
  327. data/spec/swt_shoes/image_pattern_spec.rb +0 -19
  328. data/spec/swt_shoes/image_spec.rb +0 -100
  329. data/spec/swt_shoes/input_box_spec.rb +0 -110
  330. data/spec/swt_shoes/integration_spec.rb +0 -18
  331. data/spec/swt_shoes/key_listener_spec.rb +0 -320
  332. data/spec/swt_shoes/line_spec.rb +0 -43
  333. data/spec/swt_shoes/link_segment_spec.rb +0 -103
  334. data/spec/swt_shoes/link_spec.rb +0 -59
  335. data/spec/swt_shoes/list_box_spec.rb +0 -51
  336. data/spec/swt_shoes/minimal.png +0 -0
  337. data/spec/swt_shoes/mouse_move_listener_spec.rb +0 -129
  338. data/spec/swt_shoes/oval_spec.rb +0 -51
  339. data/spec/swt_shoes/progress_spec.rb +0 -44
  340. data/spec/swt_shoes/radio_group_spec.rb +0 -73
  341. data/spec/swt_shoes/radio_spec.rb +0 -56
  342. data/spec/swt_shoes/rect_painter_spec.rb +0 -45
  343. data/spec/swt_shoes/rect_spec.rb +0 -19
  344. data/spec/swt_shoes/shape_spec.rb +0 -81
  345. data/spec/swt_shoes/shared_examples/button.rb +0 -24
  346. data/spec/swt_shoes/shared_examples/clearable.rb +0 -32
  347. data/spec/swt_shoes/shared_examples/clickable.rb +0 -60
  348. data/spec/swt_shoes/shared_examples/movable.rb +0 -36
  349. data/spec/swt_shoes/shared_examples/paintable_spec.rb +0 -7
  350. data/spec/swt_shoes/shared_examples/painter.rb +0 -83
  351. data/spec/swt_shoes/shared_examples/pattern.rb +0 -32
  352. data/spec/swt_shoes/shared_examples/swt_app_context.rb +0 -17
  353. data/spec/swt_shoes/shared_examples/togglable.rb +0 -15
  354. data/spec/swt_shoes/shell_control_listener_spec.rb +0 -23
  355. data/spec/swt_shoes/sound.rb +0 -10
  356. data/spec/swt_shoes/spec_helper.rb +0 -31
  357. data/spec/swt_shoes/star_spec.rb +0 -47
  358. data/spec/swt_shoes/text_block_cursor_painter_spec.rb +0 -202
  359. data/spec/swt_shoes/text_block_fitter_spec.rb +0 -181
  360. data/spec/swt_shoes/text_block_painter_spec.rb +0 -221
  361. data/spec/swt_shoes/text_block_spec.rb +0 -183
@@ -1,831 +0,0 @@
1
- require 'shoes/spec_helper'
2
-
3
- describe Shoes::Dimensions do
4
-
5
- let(:parent_left) {left}
6
- let(:parent_top) {top}
7
- let(:parent_width) {width}
8
- let(:parent_height) {height}
9
- let(:parent) {Shoes::AbsoluteDimensions.new parent_left, parent_top, parent_width, parent_height}
10
-
11
- let(:left) {10}
12
- let(:top) {20}
13
- let(:width) {100}
14
- let(:height) {150}
15
- let(:right) {17}
16
- let(:bottom) {23}
17
- let(:opts) { {} }
18
- subject {Shoes::Dimensions.new parent, left, top, width, height, opts}
19
-
20
- shared_context 'margins' do
21
- let(:margin_left) {3}
22
- let(:margin_top) {5}
23
- let(:margin_right) {7}
24
- let(:margin_bottom) {11}
25
- let(:opts) { {margin_left: margin_left, margin_top: margin_top,
26
- margin_right: margin_right, margin_bottom: margin_bottom } }
27
- end
28
-
29
- shared_context 'element dimensions set' do
30
- let(:element_width) {43}
31
- let(:element_height) {29}
32
-
33
- before :each do
34
- subject.element_width = element_width
35
- subject.element_height = element_height
36
- end
37
- end
38
-
39
- ONE_PIXEL = 1
40
-
41
- describe 'initialization' do
42
- describe 'without arguments (defaults)' do
43
- subject {Shoes::Dimensions.new parent}
44
-
45
- its(:left) {should be_nil}
46
- its(:top) {should be_nil}
47
- its(:width) {should eq nil}
48
- its(:height) {should eq nil}
49
- its(:absolutely_positioned?) {should be_false}
50
- its(:absolute_x_position?) {should be_false}
51
- its(:absolute_y_position?) {should be_false}
52
- its(:absolute_left_position?) {should be_false}
53
- its(:absolute_top_position?) {should be_false}
54
- its(:absolute_right_position?) {should be_false}
55
- its(:absolute_bottom_position?) {should be_false}
56
- its(:margin) {should == [0, 0, 0, 0]}
57
- its(:margin_left) {should == 0}
58
- its(:margin_top) {should == 0}
59
- its(:margin_right) {should == 0}
60
- its(:margin_bottom) {should == 0}
61
- its(:element_width) {should == nil}
62
- its(:element_height) {should == nil}
63
- end
64
-
65
- describe 'with 2 arguments' do
66
- subject {Shoes::Dimensions.new parent, left, top}
67
-
68
- its(:left) {should eq left}
69
- its(:top) {should eq top}
70
- its(:width) {should eq nil}
71
- its(:height) {should eq nil}
72
- its(:absolutely_positioned?) {should be_true}
73
- its(:absolute_x_position?) {should be_true}
74
- its(:absolute_y_position?) {should be_true}
75
- its(:absolute_left_position?) {should be_true}
76
- its(:absolute_top_position?) {should be_true}
77
- its(:absolute_right_position?) {should be_false}
78
- its(:absolute_bottom_position?) {should be_false}
79
- end
80
-
81
- describe 'with 4 arguments' do
82
- subject {Shoes::Dimensions.new parent, left, top, width, height}
83
-
84
- its(:left) {should eq left}
85
- its(:top) {should eq top}
86
- its(:width) {should eq width}
87
- its(:height) {should eq height}
88
- its(:element_width) {should == width}
89
- its(:element_height) {should == height}
90
- end
91
-
92
- describe 'with relative width and height' do
93
- subject {Shoes::Dimensions.new parent, left, top, 0.5, 0.5}
94
-
95
- its(:left) {should eq left}
96
- its(:top) {should eq top}
97
- its(:width) {should be_within(ONE_PIXEL).of 0.5 * parent.width}
98
- its(:height) {should be_within(ONE_PIXEL).of 0.5 * parent.height}
99
-
100
- describe 'width/height change of the parent' do
101
-
102
- # note that here the first assertion/call is necessary as otherwise
103
- # the subject will only lazily get initialized after the parent width
104
- # is already adjusted and therefore wrong impls WILL PASS the tests
105
- # (jay for red/green/refactor :-) )
106
- it 'adapts width' do
107
- subject.width.should be_within(ONE_PIXEL).of 0.5 * parent.width
108
- parent.width = 700
109
- subject.width.should be_within(ONE_PIXEL).of 350
110
- end
111
-
112
- it 'adapts height' do
113
- subject.height.should be_within(ONE_PIXEL).of 0.5 * parent.height
114
- parent.height = 800
115
- subject.height.should be_within(ONE_PIXEL).of 400
116
- end
117
- end
118
-
119
- describe 'a parent with margins' do
120
- let(:parent) {Shoes::AbsoluteDimensions.new parent_left,
121
- parent_top,
122
- parent_width,
123
- parent_height,
124
- margin: 20}
125
- subject {Shoes::Dimensions.new parent, left, top, 1.0, 1.0}
126
-
127
- it 'uses the element_width to calculate its own relative width' do
128
- expect(subject.width).to eq parent.element_width
129
- end
130
-
131
- it 'has a smaller width than the parent element (due to margins)' do
132
- expect(subject.width).to be < parent.width
133
- end
134
-
135
- its(:height) {should eq parent.element_height}
136
- end
137
-
138
- end
139
-
140
- describe 'with percentages' do
141
- describe 'with whole integers' do
142
- subject {Shoes::Dimensions.new parent, left, top, "50%", "50%"}
143
- its(:width) {should be_within(ONE_PIXEL).of 0.5 * parent.width}
144
- its(:height) {should be_within(ONE_PIXEL).of 0.5 * parent.height}
145
- end
146
-
147
- describe 'with floats' do
148
- subject {Shoes::Dimensions.new parent, left, top, "50.0%", "50.00%"}
149
- its(:width) {should be_within(ONE_PIXEL).of 0.5 * parent.width}
150
- its(:height) {should be_within(ONE_PIXEL).of 0.5 * parent.height}
151
- end
152
-
153
- describe 'with negatives' do
154
- subject {Shoes::Dimensions.new parent, left, top, "-10.0%", "-10.00%"}
155
- its(:width) {should be_within(ONE_PIXEL).of 0.9 * parent.width}
156
- its(:height) {should be_within(ONE_PIXEL).of 0.9 * parent.height}
157
- end
158
-
159
- describe 'with padded strings' do
160
- subject {Shoes::Dimensions.new parent, left, top, " 50 % ", "\t- 50 %\n"}
161
- its(:width) {should be_within(ONE_PIXEL).of 0.5 * parent.width}
162
- its(:height) {should be_within(ONE_PIXEL).of 0.5 * parent.height}
163
- end
164
- end
165
-
166
- describe 'with strings' do
167
- describe 'with integer strings' do
168
- subject {Shoes::Dimensions.new parent, "22", "20", "10", "10"}
169
-
170
- its(:left) {should eq 22}
171
- its(:top) {should eq 20}
172
- its(:width) {should eq 10}
173
- its(:height) {should eq 10}
174
- end
175
-
176
- describe 'with strings px' do
177
- subject {Shoes::Dimensions.new parent, "10px", "10px", "0px", "100px"}
178
-
179
- its(:left) {should eq 10}
180
- its(:top) {should eq 10}
181
- its(:width) {should eq 0}
182
- its(:height) {should eq 100}
183
- end
184
-
185
- describe 'white space with px is also ok' do
186
- subject {Shoes::Dimensions.new parent, "10 px", "20 px", "30px", "55 px"}
187
-
188
- its(:left) {should eq 10}
189
- its(:top) {should eq 20}
190
- its(:width) {should eq 30}
191
- its(:height) {should eq 55}
192
- end
193
-
194
- describe 'with invalid integer strings' do
195
- subject {Shoes::Dimensions.new parent, "p100px", "Hell0", "hell0", "glob"}
196
-
197
- its(:left) {should be_nil}
198
- its(:top) {should be_nil}
199
- its(:width) {should be_nil}
200
- its(:height) {should be_nil}
201
- end
202
-
203
- describe 'with negative values' do
204
- let(:parent_width) {200}
205
- let(:parent_height) {300}
206
- subject {Shoes::Dimensions.new parent, "- 100", "-20px", "- 50px", "- 80"}
207
-
208
- its(:left) {should eq -100}
209
- its(:top) {should eq -20}
210
- its(:width) {should eq (parent_width - 50)}
211
- its(:height) {should eq (parent_height - 80)}
212
- end
213
- end
214
-
215
- describe 'with negative width and height' do
216
- let(:width) { -50 }
217
- let(:height) { -50 }
218
- subject {Shoes::Dimensions.new parent, left, top, width, height}
219
-
220
- its(:width) {should eq parent.width + width}
221
- its(:height) {should eq parent.height + height}
222
- end
223
-
224
- describe 'with relative negative width and height' do
225
- let(:width) {-0.2}
226
- let(:height) {-0.2}
227
-
228
- its(:width) {should be_within(ONE_PIXEL).of 0.8 * parent.width}
229
- its(:height) {should be_within(ONE_PIXEL).of 0.8 * parent.height}
230
- end
231
-
232
- describe 'with a hash' do
233
- subject { Shoes::Dimensions.new parent, left: left,
234
- top: top,
235
- width: width,
236
- height: height }
237
-
238
- its(:left) {should eq left}
239
- its(:top) {should eq top}
240
- its(:width) {should eq width}
241
- its(:height) {should eq height}
242
- its(:absolutely_positioned?) {should be_true}
243
- its(:absolute_x_position?) {should be_true}
244
- its(:absolute_y_position?) {should be_true}
245
-
246
- context 'missing width' do
247
- subject { Shoes::Dimensions.new parent, left: left,
248
- top: top,
249
- height: height }
250
-
251
- its(:width) {should eq nil}
252
- end
253
-
254
- describe 'with right and bottom' do
255
- subject {Shoes::Dimensions.new parent, right: right, bottom: bottom}
256
-
257
- its(:right) {should eq right}
258
- its(:bottom) {should eq bottom}
259
- its(:absolute_x_position?) {should be_true}
260
- its(:absolute_y_position?) {should be_true}
261
- its(:absolute_left_position?) {should be_false}
262
- its(:absolute_top_position?) {should be_false}
263
- its(:absolute_right_position?) {should be_true}
264
- its(:absolute_bottom_position?) {should be_true}
265
- end
266
- end
267
-
268
- describe 'absolute_left and _top' do
269
- its(:absolute_left) {should eq nil}
270
- its(:absolute_top) {should eq nil}
271
- it {should_not be_positioned}
272
- end
273
-
274
- describe 'absolute extra values' do
275
- let(:absolute_left) {7}
276
- let(:absolute_top) {13}
277
-
278
- before :each do
279
- subject.absolute_left = absolute_left
280
- subject.absolute_top = absolute_top
281
- end
282
-
283
- # in case you wonder about the -1... say left is 20 and we have a width of
284
- # 100 then the right must be 119, because you have to take pixel number 20
285
- # into account so 20..119 is 100 while 20..120 is 101. E.g.:
286
- # (20..119).size => 100
287
- it 'has an appropriate absolute_right' do
288
- expect(subject.absolute_right).to eq width + absolute_left - ONE_PIXEL
289
- end
290
-
291
- it 'has an appropriate absolute_bottom' do
292
- expect(subject.absolute_bottom).to eq height + absolute_top - ONE_PIXEL
293
- end
294
-
295
- it 'has an element left which is the same' do
296
- expect(subject.element_left).to eq subject.absolute_left
297
- end
298
-
299
- it 'has an element top which is the same' do
300
- expect(subject.element_top).to eq subject.absolute_top
301
- end
302
-
303
- it 'considers itself positioned' do
304
- expect(subject.positioned?).to be_true
305
- end
306
-
307
- describe 'with margins' do
308
- include_context 'margins'
309
- include_context 'element dimensions set'
310
-
311
- it 'adjusts element_left' do
312
- expect(subject.element_left).to eq subject.absolute_left + margin_left
313
- end
314
-
315
- it 'adjusts element_top' do
316
- expect(subject.element_top).to eq subject.absolute_top + margin_top
317
- end
318
-
319
- it 'returns an element_right' do
320
- expect(subject.element_right).to eq subject.element_left +
321
- element_width - ONE_PIXEL
322
- end
323
-
324
- it 'returns an element_bottom' do
325
- expect(subject.element_bottom).to eq subject.element_top +
326
- element_height - ONE_PIXEL
327
- end
328
- end
329
- end
330
- end
331
-
332
-
333
- describe 'setting ' do
334
- it 'has a setter for left' do
335
- subject.left = 66
336
- expect(subject.left).to eq 66
337
- end
338
-
339
- it 'has a setter for right' do
340
- subject.right = 77
341
- expect(subject.right).to eq 77
342
- end
343
-
344
- it 'has a setter for bottom' do
345
- subject.bottom = 87
346
- expect(subject.bottom).to eq 87
347
- end
348
-
349
- describe 'element_*' do
350
- include_context 'element dimensions set'
351
-
352
- it 'sets width to that value' do
353
- expect(subject.width).to eq element_width
354
- end
355
-
356
- it 'responds that value for element_width' do
357
- expect(subject.element_width).to eq element_width
358
- end
359
-
360
- it 'sets height to that value' do
361
- expect(subject.height).to eq element_height
362
- end
363
-
364
- it 'sets element_height to that value' do
365
- expect(subject.element_height).to eq element_height
366
- end
367
-
368
- it 'can set element_width to nil' do
369
- subject.element_width = nil
370
- expect(subject.element_width).to eq nil
371
- end
372
-
373
- it 'can set element_heightm to nil' do
374
- subject.element_height = nil
375
- expect(subject.element_height).to eq nil
376
- end
377
-
378
- describe 'with margins' do
379
- include_context 'margins'
380
-
381
- it 'sets width to element_width plus margins' do
382
- expect(subject.width).to eq margin_left + element_width + margin_right
383
- end
384
-
385
- it 'sets height to element_height plus margins' do
386
- expect(subject.height).to eq margin_top + element_height + margin_bottom
387
- end
388
-
389
- it 'sets that value for element_width' do
390
- expect(subject.element_width).to eq element_width
391
- end
392
-
393
- it 'sets element_height to that value' do
394
- expect(subject.element_height).to eq element_height
395
- end
396
- end
397
- end
398
- end
399
-
400
- describe 'centered (e.g. left and top are seen as coords for the center)' do
401
- describe '5 arguments' do
402
- subject {Shoes::Dimensions.new parent, 100, 50, 40, 20, :center => true}
403
-
404
- its(:left) {should eq 80}
405
- its(:top) {should eq 40}
406
- its(:width) {should eq 40}
407
- its(:height) {should eq 20}
408
-
409
- it 'reacts to a width change' do
410
- subject.left.should == 80
411
- subject.width = 100
412
- subject.left.should == 50
413
- end
414
-
415
- it 'reacts to a height change' do
416
- subject.top.should == 40
417
- subject.height = 40
418
- subject.top.should == 30
419
- end
420
- end
421
-
422
- describe 'hash' do
423
- subject {Shoes::Dimensions.new parent, left: 100,
424
- top: 50,
425
- width: 40,
426
- height: 20,
427
- center: true }
428
-
429
- its(:left) {should eq 80}
430
- its(:top) {should eq 40}
431
- its(:width) {should eq 40}
432
- its(:height) {should eq 20}
433
- end
434
- end
435
-
436
- describe 'additional dimension methods' do
437
- describe 'without height and width' do
438
- let(:width) {nil}
439
- let(:height) {nil}
440
- end
441
- end
442
-
443
- describe 'in_bounds?' do
444
-
445
- let(:left) {10}
446
- let(:top) {20}
447
- let(:width) {100}
448
- let(:height) {150}
449
-
450
- describe 'absolute position same as offset' do
451
- before :each do
452
- subject.absolute_left = left
453
- subject.absolute_top = top
454
- end
455
-
456
- it {should be_in_bounds 30, 40}
457
- it {should be_in_bounds left, top}
458
- it {should be_in_bounds left + width - ONE_PIXEL,
459
- top + height - ONE_PIXEL}
460
- it {should_not be_in_bounds left + width, top + height}
461
- it {should_not be_in_bounds 30, top + height}
462
- it {should_not be_in_bounds left + width, 40}
463
- it {should_not be_in_bounds 0, 0}
464
- it {should_not be_in_bounds 0, 40}
465
- it {should_not be_in_bounds 40, 0}
466
- it {should_not be_in_bounds 200, 50}
467
- it {should_not be_in_bounds 80, 400}
468
- it {should_not be_in_bounds 1000, 1000}
469
- end
470
-
471
- describe 'with absolute position differing from relative' do
472
- let(:absolute_left) {150}
473
- let(:absolute_top) {50}
474
-
475
- before :each do
476
- subject.absolute_left = absolute_left
477
- subject.absolute_top = absolute_top
478
- end
479
-
480
- it {should_not be_in_bounds 30, 40}
481
- it {should_not be_in_bounds left, top}
482
- it {should_not be_in_bounds 149, 75}
483
- it {should be_in_bounds 200, absolute_top}
484
- it {should be_in_bounds absolute_left, absolute_top}
485
- it {should be_in_bounds absolute_left + width - ONE_PIXEL,
486
- absolute_top + height - ONE_PIXEL
487
- }
488
- it {should_not be_in_bounds 80, 400}
489
- end
490
- end
491
-
492
- describe 'absolute positioning' do
493
- subject {Shoes::Dimensions.new parent}
494
- its(:absolutely_positioned?) {should be_false}
495
-
496
- shared_examples_for 'absolute_x_position' do
497
- its(:absolute_x_position?) {should be_true}
498
- its(:absolute_y_position?) {should be_false}
499
- its(:absolutely_positioned?) {should be_true}
500
- end
501
-
502
- describe 'changing left' do
503
- before :each do subject.left = left end
504
- it_behaves_like 'absolute_x_position'
505
- end
506
-
507
- describe 'chaning right' do
508
- before :each do subject.right = right end
509
- it_behaves_like 'absolute_x_position'
510
- end
511
-
512
- shared_examples_for 'absolute_y_position' do
513
- its(:absolute_x_position?) {should be_false}
514
- its(:absolute_y_position?) {should be_true}
515
- its(:absolutely_positioned?) {should be_true}
516
- end
517
-
518
- describe 'changing top' do
519
- before :each do subject.top = top end
520
- it_behaves_like 'absolute_y_position'
521
- end
522
-
523
- describe 'changing bottom' do
524
- before :each do subject.bottom = bottom end
525
- it_behaves_like 'absolute_y_position'
526
- end
527
-
528
- end
529
-
530
- describe 'margins' do
531
- describe 'creation with single margin value' do
532
- let(:margin) {13}
533
- subject {Shoes::Dimensions.new parent, width: width, height: height,
534
- margin: margin}
535
-
536
- its(:margin) {should == [margin, margin, margin, margin]}
537
- its(:margin_left) {should == margin}
538
- its(:margin_top) {should == margin}
539
- its(:margin_right) {should == margin}
540
- its(:margin_bottom) {should == margin}
541
- its(:width) {should == width}
542
- its(:height) {should == height}
543
- its(:element_width) {should == width - 2 * margin}
544
- its(:element_height) {should == height - 2 * margin}
545
-
546
- it 'adapts margin when one of the margins is changed' do
547
- subject.margin_right = 7
548
- subject.margin.should == [margin, margin, 7, margin]
549
- end
550
-
551
- it 'adapts margins when margin is changed with single value' do
552
- subject.margin = 7
553
- subject.margin.should == [7, 7, 7, 7]
554
- end
555
-
556
- it 'adapts margin when margin is changed with array' do
557
- subject.margin = [7, 7, 7, 7]
558
- subject.margin.should == [7, 7, 7, 7]
559
- end
560
- end
561
-
562
- describe 'creation with all distinct margin values' do
563
- let(:margin_left) {3}
564
- let(:margin_top) {7}
565
- let(:margin_right) {11}
566
- let(:margin_bottom) {17}
567
-
568
- shared_examples_for 'all distinct margins' do
569
- its(:margin){should == [margin_left, margin_top, margin_right, margin_bottom]}
570
- its(:margin_left) {should == margin_left}
571
- its(:margin_top) {should == margin_top}
572
- its(:margin_right) {should == margin_right}
573
- its(:margin_bottom) {should == margin_bottom}
574
- its(:width) {should == width}
575
- its(:height) {should == height}
576
- its(:element_width) {should == width - (margin_left + margin_right)}
577
- its(:element_height) {should == height - (margin_top + margin_bottom)}
578
- end
579
-
580
- describe 'setting margins separetely through hash' do
581
- subject {Shoes::Dimensions.new parent, width: width,
582
- height: height,
583
- margin_left: margin_left,
584
- margin_top: margin_top,
585
- margin_right: margin_right,
586
- margin_bottom: margin_bottom}
587
- it_behaves_like 'all distinct margins'
588
- end
589
-
590
- describe 'setting margins through margin array' do
591
- subject {Shoes::Dimensions.new parent,
592
- width: width,
593
- height: height,
594
- margin: [margin_left, margin_top,
595
- margin_right, margin_bottom]}
596
- it_behaves_like 'all distinct margins'
597
- end
598
- end
599
- end
600
-
601
- describe 'displace' do
602
-
603
- before :each do
604
- # need to have a rough positon
605
- subject.absolute_left = 0
606
- subject.absolute_top = 0
607
- end
608
-
609
- describe 'displace_left' do
610
- let(:displace_left) {3}
611
- it 'modifies the value of element_left' do
612
- expect do
613
- subject.displace_left = displace_left
614
- end.to change{subject.element_left}.by(displace_left)
615
- end
616
-
617
- it 'does not modify the value of absolute_left' do
618
- expect do
619
- subject.displace_left = displace_left
620
- end.not_to change {subject.absolute_left}
621
- end
622
-
623
- context 'via opts' do
624
- subject { Shoes::Dimensions.new(nil, 0, 0, 0, 0, displace_left: 10)}
625
- it 'modifies element_left' do
626
- expect(subject.element_left).to eql(10)
627
- end
628
- end
629
- end
630
-
631
- describe 'displace_top' do
632
- let(:displace_top) {7}
633
-
634
- it 'modifies the value of element_top' do
635
- expect do
636
- subject.displace_top = displace_top
637
- end.to change{subject.element_top}.by(displace_top)
638
- end
639
-
640
- it 'does not modify the value of absolute_top' do
641
- expect do
642
- subject.displace_top = displace_top
643
- end.not_to change {subject.absolute_top}
644
- end
645
-
646
- context 'via opts' do
647
- subject { Shoes::Dimensions.new(nil, 0, 0, 0, 0, displace_top: 10)}
648
- it 'modifies element_top' do
649
- expect(subject.element_top).to eql(10)
650
- end
651
- end
652
- end
653
-
654
- end
655
-
656
- it {should be_needs_to_be_positioned}
657
- it {should be_takes_up_space}
658
-
659
- describe 'left/top/right/bottom not set so get them relative to parent' do
660
- let(:parent) {double 'parent', x_dimension: x_dimension,
661
- y_dimension: y_dimension}
662
-
663
- let(:x_dimension) {double 'parent x dimension', element_start: parent_left,
664
- element_end: parent_right}
665
- let(:y_dimension) {double 'parent y dimension', element_start: parent_top,
666
- element_end: parent_bottom}
667
- let(:parent_right) {parent_left + 20}
668
- let(:parent_bottom) {parent_top + 30}
669
-
670
- let(:width) {3}
671
- let(:height) {5}
672
-
673
- subject {Shoes::Dimensions.new parent, width: width, height: height}
674
-
675
- describe 'positioned at the start' do
676
- before :each do
677
- # there is no setter for element_* but with no margin it's the same
678
- subject.absolute_left = parent_left
679
- subject.absolute_top = parent_top
680
- end
681
-
682
- its(:left) {should eq 0}
683
- its(:top) {should eq 0}
684
- its(:right) {should eq parent_right - subject.element_right}
685
- its(:bottom) {should eq parent_bottom - subject.element_bottom}
686
- end
687
-
688
- describe 'positioned with an offset' do
689
- TEST_OFFSET = 7
690
-
691
- before :each do
692
- subject.absolute_left = parent_left + TEST_OFFSET
693
- subject.absolute_top = parent_top + TEST_OFFSET
694
- end
695
-
696
- its(:left) {should eq TEST_OFFSET}
697
- its(:top) {should eq TEST_OFFSET}
698
- its(:right) {should eq parent_right - subject.element_right}
699
- its(:bottom) {should eq parent_bottom - subject.element_bottom}
700
- end
701
- end
702
-
703
- describe Shoes::AbsoluteDimensions do
704
- subject {Shoes::AbsoluteDimensions.new left, top, width, height}
705
- describe 'not adapting floats to parent values' do
706
- subject {Shoes::AbsoluteDimensions.new left, top, 1.04, 2.10}
707
- it 'does not adapt width' do
708
- subject.width.should be_within(0.01).of 1.04
709
- end
710
-
711
- it 'does not adapt height' do
712
- subject.height.should be_within(0.01).of 2.10
713
- end
714
- end
715
- end
716
-
717
- describe Shoes::ParentDimensions do
718
- describe 'takes parent values if not specified' do
719
- let(:parent) {Shoes::Dimensions.new nil, parent_left, parent_top,
720
- parent_width, parent_height,
721
- margin: 20}
722
- subject {Shoes::ParentDimensions.new parent}
723
-
724
- its(:left) {should eq parent.left}
725
- its(:top) {should eq parent.top}
726
- its(:width) {should eq parent.width}
727
- its(:height) {should eq parent.height}
728
- its(:margin_left) {should eq parent.margin_left}
729
- its(:margin_top) {should eq parent.margin_top}
730
- its(:margin_right) {should eq parent.margin_right}
731
- its(:margin_bottom) {should eq parent.margin_bottom}
732
-
733
- context 'with parent absolute_left/top set' do
734
- before :each do
735
- parent.absolute_left = left
736
- parent.absolute_top = top
737
- end
738
-
739
- its(:absolute_left) {should eq parent.absolute_left}
740
- its(:absolute_top) {should eq parent.absolute_top}
741
- its(:element_left) {should eq parent.element_left}
742
- its(:element_top) {should eq parent.element_top}
743
- end
744
- end
745
-
746
- describe 'otherwise it takes its own values' do
747
- subject {Shoes::ParentDimensions.new parent, left, top, width, height}
748
-
749
- its(:left) {should eq left}
750
- its(:top) {should eq top}
751
- its(:width) {should eq width}
752
- its(:height) {should eq height}
753
-
754
- it 'can also still handle special values like a negative width' do
755
- subject.width = -10
756
- expect(subject.width).to eq (parent.width - 10)
757
- end
758
-
759
- it 'can also still handle special values like a relative height' do
760
- subject.height = 0.8
761
- expect(subject.height).to be_within(ONE_PIXEL).of(0.8 * parent.height)
762
- end
763
- end
764
- end
765
- end
766
-
767
- describe Shoes::DimensionsDelegations do
768
-
769
- describe 'with a DSL class and a dimensions method' do
770
- let(:dimensions) {double('dimensions')}
771
-
772
- class DummyClass
773
- include Shoes::DimensionsDelegations
774
- def dimensions
775
- end
776
- end
777
-
778
- subject do
779
- dummy = DummyClass.new
780
- dummy.stub dimensions: dimensions
781
- dummy
782
- end
783
-
784
- it 'forwards left calls to dimensions' do
785
- dimensions.should_receive :left
786
- subject.left
787
- end
788
-
789
- it 'forwards bottom calls to dimensions' do
790
- dimensions.should_receive :bottom
791
- subject.bottom
792
- end
793
-
794
- it 'forwards setter calls like left= do dimensions' do
795
- dimensions.should_receive :left=
796
- subject.left = 66
797
- end
798
-
799
- it 'forwards absolutely_positioned? calls to the dimensions' do
800
- dimensions.should_receive :absolutely_positioned?
801
- subject.absolutely_positioned?
802
- end
803
- end
804
-
805
- describe 'with any backend class that has a defined dsl method' do
806
- let(:dsl){double 'dsl'}
807
-
808
- class AnotherDummyClass
809
- include Shoes::BackendDimensionsDelegations
810
- def dsl
811
- end
812
- end
813
-
814
- subject do
815
- dummy = AnotherDummyClass.new
816
- dummy.stub dsl: dsl
817
- dummy
818
- end
819
-
820
- it 'forwards calls to dsl' do
821
- dsl.should_receive :left
822
- subject.left
823
- end
824
-
825
- it 'does not forward calls to parent' do
826
- dsl.should_not_receive :parent
827
- expect {subject.parent}.to raise_error
828
- end
829
- end
830
-
831
- end