motion-kit 0.0.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +839 -0
  3. data/lib/motion-kit-cocoa/cocoa_util.rb +59 -0
  4. data/lib/motion-kit-cocoa/constraints/constraint.rb +765 -0
  5. data/lib/motion-kit-cocoa/constraints/constraint_placeholder.rb +22 -0
  6. data/lib/motion-kit-cocoa/constraints/constraints_layout.rb +536 -0
  7. data/lib/motion-kit-cocoa/constraints/constraints_target.rb +52 -0
  8. data/lib/motion-kit-cocoa/layouts/cagradientlayer_layout.rb +13 -0
  9. data/lib/motion-kit-cocoa/layouts/calayer_layout.rb +27 -0
  10. data/lib/motion-kit-cocoa/layouts/sugarcube_compat.rb +38 -0
  11. data/lib/motion-kit-ios/dummy.rb +93 -0
  12. data/lib/motion-kit-ios/ios_util.rb +20 -0
  13. data/lib/motion-kit-ios/layouts/constraints_layout.rb +22 -0
  14. data/lib/motion-kit-ios/layouts/layout_device.rb +32 -0
  15. data/lib/motion-kit-ios/layouts/layout_orientation.rb +47 -0
  16. data/lib/motion-kit-ios/layouts/uibutton_layout.rb +52 -0
  17. data/lib/motion-kit-ios/layouts/uiview_layout.rb +45 -0
  18. data/lib/motion-kit-ios/layouts/uiview_layout_autoresizing.rb +75 -0
  19. data/lib/motion-kit-ios/layouts/uiview_layout_constraints.rb +36 -0
  20. data/lib/motion-kit-ios/layouts/uiview_layout_frame.rb +307 -0
  21. data/lib/motion-kit-ios/layouts/uiview_layout_gradient.rb +20 -0
  22. data/lib/motion-kit-osx/dummy.rb +89 -0
  23. data/lib/motion-kit-osx/layouts/constraints_layout.rb +42 -0
  24. data/lib/motion-kit-osx/layouts/nsmenu_extensions.rb +186 -0
  25. data/lib/motion-kit-osx/layouts/nsmenu_layout.rb +109 -0
  26. data/lib/motion-kit-osx/layouts/nsmenuitem_extensions.rb +45 -0
  27. data/lib/motion-kit-osx/layouts/nstablecolumn_layout.rb +12 -0
  28. data/lib/motion-kit-osx/layouts/nstableview_layout.rb +20 -0
  29. data/lib/motion-kit-osx/layouts/nsview_layout.rb +47 -0
  30. data/lib/motion-kit-osx/layouts/nsview_layout_autoresizing.rb +75 -0
  31. data/lib/motion-kit-osx/layouts/nsview_layout_constraints.rb +34 -0
  32. data/lib/motion-kit-osx/layouts/nsview_layout_frame.rb +375 -0
  33. data/lib/motion-kit-osx/layouts/nswindow_frame.rb +14 -0
  34. data/lib/motion-kit-osx/layouts/nswindow_layout.rb +77 -0
  35. data/lib/motion-kit-osx/osx_util.rb +16 -0
  36. data/lib/motion-kit.rb +33 -0
  37. data/lib/motion-kit/calculate.rb +263 -0
  38. data/lib/motion-kit/layouts/base_layout.rb +299 -0
  39. data/lib/motion-kit/layouts/base_layout_class_methods.rb +43 -0
  40. data/lib/motion-kit/layouts/parent.rb +68 -0
  41. data/lib/motion-kit/layouts/view_layout.rb +327 -0
  42. data/lib/motion-kit/motion-kit.rb +18 -0
  43. data/lib/motion-kit/object.rb +16 -0
  44. data/lib/motion-kit/util.rb +20 -0
  45. data/lib/motion-kit/version.rb +1 -1
  46. data/spec/ios/apply_styles_spec.rb +21 -0
  47. data/spec/ios/autoresizing_helper_spec.rb +224 -0
  48. data/spec/ios/calculate_spec.rb +322 -0
  49. data/spec/ios/calculator_spec.rb +31 -0
  50. data/spec/ios/constraints_helpers/attribute_lookup_spec.rb +27 -0
  51. data/spec/ios/constraints_helpers/axis_lookup_spec.rb +13 -0
  52. data/spec/ios/constraints_helpers/center_constraints_spec.rb +419 -0
  53. data/spec/ios/constraints_helpers/constraint_placeholder_spec.rb +72 -0
  54. data/spec/ios/constraints_helpers/priority_lookup_spec.rb +19 -0
  55. data/spec/ios/constraints_helpers/relationship_lookup_spec.rb +27 -0
  56. data/spec/ios/constraints_helpers/relative_corners_spec.rb +274 -0
  57. data/spec/ios/constraints_helpers/relative_location_spec.rb +111 -0
  58. data/spec/ios/constraints_helpers/simple_constraints_spec.rb +2763 -0
  59. data/spec/ios/constraints_helpers/size_constraints_spec.rb +422 -0
  60. data/spec/ios/constraints_helpers/view_lookup_constraints_spec.rb +93 -0
  61. data/spec/ios/create_layout_spec.rb +40 -0
  62. data/spec/ios/custom_layout_spec.rb +13 -0
  63. data/spec/ios/deferred_spec.rb +89 -0
  64. data/spec/ios/device_helpers_spec.rb +51 -0
  65. data/spec/ios/frame_helper_spec.rb +1150 -0
  66. data/spec/ios/layer_layout_spec.rb +36 -0
  67. data/spec/ios/layout_extensions_spec.rb +70 -0
  68. data/spec/ios/layout_spec.rb +74 -0
  69. data/spec/ios/layout_state_spec.rb +27 -0
  70. data/spec/ios/motionkit_util_spec.rb +102 -0
  71. data/spec/ios/objc_selectors_spec.rb +10 -0
  72. data/spec/ios/orientation_helper_specs.rb +67 -0
  73. data/spec/ios/parent_layout_spec.rb +19 -0
  74. data/spec/ios/parent_spec.rb +45 -0
  75. data/spec/ios/remove_layout_spec.rb +25 -0
  76. data/spec/ios/root_layout_spec.rb +53 -0
  77. data/spec/ios/setters_spec.rb +63 -0
  78. data/spec/ios/uibutton_layout_spec.rb +24 -0
  79. data/spec/ios/uitextfield_spec.rb +14 -0
  80. data/spec/ios/view_attr_spec.rb +25 -0
  81. data/spec/osx/autoresizing_helper_spec.rb +224 -0
  82. data/spec/osx/constraints_helper_spec.rb +0 -0
  83. data/spec/osx/constraints_helpers/orientation_lookup_spec.rb +13 -0
  84. data/spec/osx/constraints_helpers/simple_constraints_spec.rb +2095 -0
  85. data/spec/osx/constraints_helpers/size_constraints_spec.rb +362 -0
  86. data/spec/osx/create_menu_spec.rb +14 -0
  87. data/spec/osx/create_via_extensions_spec.rb +63 -0
  88. data/spec/osx/deferred_spec.rb +85 -0
  89. data/spec/osx/frame_helper_spec.rb +1881 -0
  90. data/spec/osx/menu_extensions_spec.rb +376 -0
  91. data/spec/osx/menu_layout_spec.rb +157 -0
  92. data/spec/osx/menu_spec.rb +70 -0
  93. data/spec/osx/root_menu_spec.rb +15 -0
  94. metadata +166 -14
@@ -0,0 +1,376 @@
1
+ describe 'NSMenuLayout extensions' do
2
+
3
+ before do
4
+ @subject = MK::NSMenuLayout.new
5
+ end
6
+
7
+ it 'should have an `app_name` method' do
8
+ @subject.app_name.should == 'MotionKit'
9
+ end
10
+
11
+ it 'should have an `app_menu` method' do
12
+ menu = @subject.app_menu
13
+ menu.should.be.kind_of(NSMenu)
14
+ menu.itemArray.length.should == 10
15
+ end
16
+
17
+ it 'should assign a title via `app_menu`' do
18
+ menu = @subject.app_menu('Title')
19
+ menu.title.should == 'Title'
20
+ end
21
+
22
+ it 'should assign a title via options in `app_menu`' do
23
+ menu = @subject.app_menu(title: 'Title')
24
+ menu.title.should == 'Title'
25
+ end
26
+
27
+ it 'should be able to exclude items from `app_menu`' do
28
+ menu = @subject.app_menu(exclude: [:about, :prefs])
29
+ menu.itemArray.length.should == 6
30
+ end
31
+
32
+ it 'should be able to exclude a single item from `app_menu`' do
33
+ menu = @subject.app_menu(exclude: :about)
34
+ menu.itemArray.length.should == 8
35
+ end
36
+
37
+
38
+ it 'should have a `file_menu` method' do
39
+ menu = @subject.file_menu
40
+ menu.should.be.kind_of(NSMenu)
41
+ menu.itemArray.length.should == 9
42
+ end
43
+
44
+ it 'should have a default title via `file_menu`' do
45
+ menu = @subject.file_menu
46
+ menu.title.should == 'File'
47
+ end
48
+
49
+ it 'should assign a title via `file_menu`' do
50
+ menu = @subject.file_menu('Title')
51
+ menu.title.should == 'Title'
52
+ end
53
+
54
+ it 'should assign a title via options in `file_menu`' do
55
+ menu = @subject.file_menu(title: 'Title')
56
+ menu.title.should == 'Title'
57
+ end
58
+
59
+ it 'should be able to exclude items from `file_menu`' do
60
+ menu = @subject.file_menu(exclude: [:new, :open])
61
+ menu.itemArray.length.should == 6
62
+ end
63
+
64
+ it 'should be able to exclude a single item from `file_menu`' do
65
+ menu = @subject.file_menu(exclude: :new)
66
+ menu.itemArray.length.should == 8
67
+ end
68
+
69
+
70
+ it 'should have a `window_menu` method' do
71
+ menu = @subject.window_menu
72
+ menu.should.be.kind_of(NSMenu)
73
+ menu.itemArray.length.should == 4
74
+ end
75
+
76
+ it 'should have a default title via `window_menu`' do
77
+ menu = @subject.window_menu
78
+ menu.title.should == 'Window'
79
+ end
80
+
81
+ it 'should assign a title via `window_menu`' do
82
+ menu = @subject.window_menu('Title')
83
+ menu.title.should == 'Title'
84
+ end
85
+
86
+ it 'should assign a title via options in `window_menu`' do
87
+ menu = @subject.window_menu(title: 'Title')
88
+ menu.title.should == 'Title'
89
+ end
90
+
91
+ it 'should be able to exclude items from `window_menu`' do
92
+ menu = @subject.window_menu(exclude: [:minimize, :zoom])
93
+ menu.itemArray.length.should == 1
94
+ end
95
+
96
+ it 'should be able to exclude a single item from `window_menu`' do
97
+ menu = @subject.window_menu(exclude: :minimize)
98
+ menu.itemArray.length.should == 3
99
+ end
100
+
101
+
102
+ it 'should have a `help_menu` method' do
103
+ menu = @subject.help_menu
104
+ menu.should.be.kind_of(NSMenu)
105
+ menu.itemArray.length.should == 1
106
+ end
107
+
108
+ it 'should have a default title via `help_menu`' do
109
+ menu = @subject.help_menu
110
+ menu.title.should == 'Help'
111
+ end
112
+
113
+ it 'should assign a title via `help_menu`' do
114
+ menu = @subject.help_menu('Title')
115
+ menu.title.should == 'Title'
116
+ end
117
+
118
+ it 'should assign a title via options in `help_menu`' do
119
+ menu = @subject.help_menu(title: 'Title')
120
+ menu.title.should == 'Title'
121
+ end
122
+
123
+
124
+ it 'should have a `separator_item` method' do
125
+ item = @subject.separator_item
126
+ item.should.be.kind_of(NSMenuItem)
127
+ end
128
+
129
+ it 'should have a `about_item` method' do
130
+ item = @subject.about_item
131
+ item.should.be.kind_of(NSMenuItem)
132
+ item.keyEquivalent.should == ''
133
+ item.action.should == 'orderFrontStandardAboutPanel:'.to_sym
134
+ end
135
+
136
+ it 'should have a `about_item` method with options' do
137
+ item = @subject.about_item(key: 'a', action: 'action:')
138
+ item.keyEquivalent.should == 'a'
139
+ item.action.should == 'action:'.to_sym
140
+ end
141
+
142
+ it 'should have a `preferences_item` method' do
143
+ item = @subject.preferences_item
144
+ item.should.be.kind_of(NSMenuItem)
145
+ item.keyEquivalent.should == ','
146
+ item.action.should == 'openPreferences:'.to_sym
147
+ end
148
+
149
+ it 'should have a `preferences_item` method with options' do
150
+ item = @subject.preferences_item(key: 'a', action: 'action:')
151
+ item.keyEquivalent.should == 'a'
152
+ item.action.should == 'action:'.to_sym
153
+ end
154
+
155
+ it 'should have a `services_item` method' do
156
+ item = @subject.services_item
157
+ item.should.be.kind_of(NSMenuItem)
158
+ item.keyEquivalent.should == ''
159
+ end
160
+
161
+ it 'should have a `services_item` method with options' do
162
+ item = @subject.services_item(key: 'a', action: 'action:')
163
+ item.keyEquivalent.should == 'a'
164
+ item.action.should == 'action:'.to_sym
165
+ end
166
+
167
+ it 'should have a `hide_item` method' do
168
+ item = @subject.hide_item
169
+ item.should.be.kind_of(NSMenuItem)
170
+ item.keyEquivalent.should == 'h'
171
+ item.action.should == 'hide:'.to_sym
172
+ end
173
+
174
+ it 'should have a `hide_item` method with options' do
175
+ item = @subject.hide_item(key: 'a', action: 'action:')
176
+ item.keyEquivalent.should == 'a'
177
+ item.action.should == 'action:'.to_sym
178
+ end
179
+
180
+ it 'should have a `hide_others_item` method' do
181
+ item = @subject.hide_others_item
182
+ item.should.be.kind_of(NSMenuItem)
183
+ item.keyEquivalent.should == 'h'
184
+ item.action.should == 'hideOtherApplications:'.to_sym
185
+ item.keyEquivalentModifierMask.should == NSCommandKeyMask | NSAlternateKeyMask
186
+ end
187
+
188
+ it 'should have a `hide_others_item` method with options' do
189
+ item = @subject.hide_others_item(key: 'a', action: 'action:')
190
+ item.keyEquivalent.should == 'a'
191
+ item.action.should == 'action:'.to_sym
192
+ end
193
+
194
+ it 'should have a `show_all_item` method' do
195
+ item = @subject.show_all_item
196
+ item.should.be.kind_of(NSMenuItem)
197
+ item.keyEquivalent.should == ''
198
+ item.action.should == 'unhideAllApplications:'.to_sym
199
+ end
200
+
201
+ it 'should have a `show_all_item` method with options' do
202
+ item = @subject.show_all_item(key: 'a', action: 'action:')
203
+ item.keyEquivalent.should == 'a'
204
+ item.action.should == 'action:'.to_sym
205
+ end
206
+
207
+ it 'should have a `quit_item` method' do
208
+ item = @subject.quit_item
209
+ item.should.be.kind_of(NSMenuItem)
210
+ item.keyEquivalent.should == 'q'
211
+ item.action.should == 'terminate:'.to_sym
212
+ end
213
+
214
+ it 'should have a `quit_item` method with options' do
215
+ item = @subject.quit_item(key: 'a', action: 'action:')
216
+ item.keyEquivalent.should == 'a'
217
+ item.action.should == 'action:'.to_sym
218
+ end
219
+
220
+ it 'should have a `new_item` method' do
221
+ item = @subject.new_item
222
+ item.should.be.kind_of(NSMenuItem)
223
+ item.keyEquivalent.should == 'n'
224
+ item.action.should == 'newDocument:'.to_sym
225
+ end
226
+
227
+ it 'should have a `new_item` method with options' do
228
+ item = @subject.new_item(key: 'a', action: 'action:')
229
+ item.keyEquivalent.should == 'a'
230
+ item.action.should == 'action:'.to_sym
231
+ end
232
+
233
+ it 'should have a `open_item` method' do
234
+ item = @subject.open_item
235
+ item.should.be.kind_of(NSMenuItem)
236
+ item.keyEquivalent.should == 'o'
237
+ item.action.should == 'openDocument:'.to_sym
238
+ end
239
+
240
+ it 'should have a `open_item` method with options' do
241
+ item = @subject.open_item(key: 'a', action: 'action:')
242
+ item.keyEquivalent.should == 'a'
243
+ item.action.should == 'action:'.to_sym
244
+ end
245
+
246
+ it 'should have a `close_item` method' do
247
+ item = @subject.close_item
248
+ item.should.be.kind_of(NSMenuItem)
249
+ item.keyEquivalent.should == 'w'
250
+ item.action.should == 'performClose:'.to_sym
251
+ end
252
+
253
+ it 'should have a `close_item` method with options' do
254
+ item = @subject.close_item(key: 'a', action: 'action:')
255
+ item.keyEquivalent.should == 'a'
256
+ item.action.should == 'action:'.to_sym
257
+ end
258
+
259
+ it 'should have a `save_item` method' do
260
+ item = @subject.save_item
261
+ item.should.be.kind_of(NSMenuItem)
262
+ item.keyEquivalent.should == 's'
263
+ item.action.should == 'saveDocument:'.to_sym
264
+ end
265
+
266
+ it 'should have a `save_item` method with options' do
267
+ item = @subject.save_item(key: 'a', action: 'action:')
268
+ item.keyEquivalent.should == 'a'
269
+ item.action.should == 'action:'.to_sym
270
+ end
271
+
272
+ it 'should have a `save_as_item` method' do
273
+ item = @subject.save_as_item
274
+ item.should.be.kind_of(NSMenuItem)
275
+ item.keyEquivalent.should == 'S'
276
+ item.action.should == 'saveDocumentAs:'.to_sym
277
+ end
278
+
279
+ it 'should have a `save_as_item` method with options' do
280
+ item = @subject.save_as_item(key: 'a', action: 'action:')
281
+ item.keyEquivalent.should == 'a'
282
+ item.action.should == 'action:'.to_sym
283
+ end
284
+
285
+ it 'should have a `revert_to_save_item` method' do
286
+ item = @subject.revert_to_save_item
287
+ item.should.be.kind_of(NSMenuItem)
288
+ item.keyEquivalent.should == ''
289
+ item.action.should == 'revertDocumentToSaved:'.to_sym
290
+ end
291
+
292
+ it 'should have a `revert_to_save_item` method with options' do
293
+ item = @subject.revert_to_save_item(key: 'a', action: 'action:')
294
+ item.keyEquivalent.should == 'a'
295
+ item.action.should == 'action:'.to_sym
296
+ end
297
+
298
+ it 'should have a `page_setup_item` method' do
299
+ item = @subject.page_setup_item
300
+ item.should.be.kind_of(NSMenuItem)
301
+ item.keyEquivalent.should == 'P'
302
+ item.action.should == 'runPageLayout:'.to_sym
303
+ end
304
+
305
+ it 'should have a `page_setup_item` method with options' do
306
+ item = @subject.page_setup_item(key: 'a', action: 'action:')
307
+ item.keyEquivalent.should == 'a'
308
+ item.action.should == 'action:'.to_sym
309
+ end
310
+
311
+ it 'should have a `print_item` method' do
312
+ item = @subject.print_item
313
+ item.should.be.kind_of(NSMenuItem)
314
+ item.keyEquivalent.should == 'p'
315
+ item.action.should == 'printDocument:'.to_sym
316
+ end
317
+
318
+ it 'should have a `print_item` method with options' do
319
+ item = @subject.print_item(key: 'a', action: 'action:')
320
+ item.keyEquivalent.should == 'a'
321
+ item.action.should == 'action:'.to_sym
322
+ end
323
+
324
+ it 'should have a `minimize_item` method' do
325
+ item = @subject.minimize_item
326
+ item.should.be.kind_of(NSMenuItem)
327
+ item.keyEquivalent.should == 'm'
328
+ item.action.should == 'performMiniaturize:'.to_sym
329
+ end
330
+
331
+ it 'should have a `minimize_item` method with options' do
332
+ item = @subject.minimize_item(key: 'a', action: 'action:')
333
+ item.keyEquivalent.should == 'a'
334
+ item.action.should == 'action:'.to_sym
335
+ end
336
+
337
+ it 'should have a `zoom_item` method' do
338
+ item = @subject.zoom_item
339
+ item.should.be.kind_of(NSMenuItem)
340
+ item.keyEquivalent.should == ''
341
+ item.action.should == 'performMiniaturize:'.to_sym
342
+ end
343
+
344
+ it 'should have a `zoom_item` method with options' do
345
+ item = @subject.zoom_item(key: 'a', action: 'action:')
346
+ item.keyEquivalent.should == 'a'
347
+ item.action.should == 'action:'.to_sym
348
+ end
349
+
350
+ it 'should have a `bring_all_to_front_item` method' do
351
+ item = @subject.bring_all_to_front_item
352
+ item.should.be.kind_of(NSMenuItem)
353
+ item.keyEquivalent.should == ''
354
+ item.action.should == 'arrangeInFront:'.to_sym
355
+ end
356
+
357
+ it 'should have a `bring_all_to_front_item` method with options' do
358
+ item = @subject.bring_all_to_front_item(key: 'a', action: 'action:')
359
+ item.keyEquivalent.should == 'a'
360
+ item.action.should == 'action:'.to_sym
361
+ end
362
+
363
+ it 'should have a `help_item` method' do
364
+ item = @subject.help_item
365
+ item.should.be.kind_of(NSMenuItem)
366
+ item.keyEquivalent.should == '?'
367
+ item.action.should == 'showHelp:'.to_sym
368
+ end
369
+
370
+ it 'should have a `help_item` method with options' do
371
+ item = @subject.help_item(key: 'a', action: 'action:')
372
+ item.keyEquivalent.should == 'a'
373
+ item.action.should == 'action:'.to_sym
374
+ end
375
+
376
+ end
@@ -0,0 +1,157 @@
1
+ describe TestMenu do
2
+
3
+ before do
4
+ @subject = TestMenu.new
5
+ @menu = @subject.view
6
+ end
7
+
8
+ it 'should create a menu' do
9
+ @menu.should.not == nil
10
+ @menu.should.be.kind_of(NSMenu)
11
+ end
12
+
13
+ it 'should return the menu via `menu`' do
14
+ @subject.menu.should == @menu
15
+ end
16
+
17
+ it 'should have three items' do
18
+ @subject.menu.itemArray.length.should == 3
19
+ end
20
+
21
+ it 'should have a "File" item' do
22
+ file_item = @subject.menu.itemArray[0]
23
+ file_item.should.not == nil
24
+ file_item.should.be.kind_of(NSMenuItem)
25
+ file_item.title.should == 'File'
26
+ end
27
+
28
+ it 'should have a "File" menu with submenu' do
29
+ file_item = @subject.menu.itemArray[0]
30
+ file_menu = file_item.submenu
31
+ file_menu.itemArray.length.should > 0
32
+ end
33
+
34
+ it 'should have a "File" menu with an "Open" item' do
35
+ file_item = @subject.menu.itemArray[0]
36
+ file_menu = file_item.submenu
37
+ open_menu = file_menu.itemArray[0]
38
+ open_menu.title.should == 'Open'
39
+ open_menu.keyEquivalent.should == 'o'
40
+ end
41
+
42
+ it 'should have a "File" menu with an "Close" item' do
43
+ file_item = @subject.menu.itemArray[0]
44
+ file_menu = file_item.submenu
45
+ close_menu = file_menu.itemArray[1]
46
+ close_menu.title.should == 'Close'
47
+ close_menu.keyEquivalent.should == 'w'
48
+ end
49
+
50
+ it 'should have a "File" menu with an "Foo" item' do
51
+ file_item = @subject.menu.itemArray[0]
52
+ file_menu = file_item.submenu
53
+ foo_menu = file_menu.itemArray[2]
54
+ foo_menu.title.should == 'Foo'
55
+ @subject.foo.should == foo_menu
56
+ end
57
+
58
+ it 'should have a "File" menu with an "Bar" item' do
59
+ file_item = @subject.menu.itemArray[0]
60
+ file_menu = file_item.submenu
61
+ bar_menu = file_menu.itemArray[3]
62
+ bar_menu.title.should == 'Bar'
63
+ @subject.bar.should == bar_menu.submenu
64
+ end
65
+
66
+ it 'should have a "Views" item' do
67
+ views_item = @subject.menu.itemArray[1]
68
+ views_item.should.not == nil
69
+ views_item.should.be.kind_of(NSMenuItem)
70
+ views_item.title.should == 'Views'
71
+ end
72
+
73
+ it 'should have a "Views" menu with submenu' do
74
+ views_item = @subject.menu.itemArray[1]
75
+ views_menu = views_item.submenu
76
+ views_menu.itemArray.length.should > 0
77
+ end
78
+
79
+ it 'should have a "Views" menu with a "Windows" submenu' do
80
+ views_item = @subject.menu.itemArray[1]
81
+ views_menu = views_item.submenu
82
+ open_menu = views_menu.itemArray[0]
83
+ open_menu.should.not == nil
84
+ open_menu.title.should == 'Windows'
85
+ end
86
+
87
+ it 'should have a "Views" menu with a "Windows" submenu with items' do
88
+ views_item = @subject.menu.itemArray[1]
89
+ views_menu = views_item.submenu
90
+ open_menu = views_menu.itemArray[0]
91
+ open_menu.submenu.should.not == nil
92
+ open_menu.submenu.should.be.kind_of(NSMenu)
93
+ open_menu.submenu.itemArray.length.should > 0
94
+ end
95
+
96
+ it 'should have a "Views" menu with a "Windows" submenu with "First" item' do
97
+ views_item = @subject.menu.itemArray[1]
98
+ views_menu = views_item.submenu
99
+ open_menu = views_menu.itemArray[0]
100
+ first_item = open_menu.submenu.itemArray[0]
101
+ first_item.title.should == 'First'
102
+ first_item.keyEquivalent.should == '1'
103
+ end
104
+
105
+ it 'should have a "Things" item' do
106
+ things_item = @subject.menu.itemArray[2]
107
+ things_item.should.not == nil
108
+ things_item.should.be.kind_of(NSMenuItem)
109
+ things_item.title.should == 'Things'
110
+ end
111
+
112
+ it 'should have a "Things" menu with submenu' do
113
+ things_item = @subject.menu.itemArray[2]
114
+ things_menu = things_item.submenu
115
+ things_menu.itemArray.length.should > 0
116
+ end
117
+
118
+ it 'should have a "Things" menu with a "Thing 1" submenu' do
119
+ things_item = @subject.menu.itemArray[2]
120
+ things_menu = things_item.submenu
121
+ open_menu = things_menu.itemArray[0]
122
+ open_menu.title.should == 'Thing 1'
123
+ end
124
+
125
+ it 'should have a "Things" menu with a "Thing 2" submenu' do
126
+ things_item = @subject.menu.itemArray[2]
127
+ things_menu = things_item.submenu
128
+ open_menu = things_menu.itemArray[1]
129
+ open_menu.title.should == 'Thing 2'
130
+ end
131
+
132
+ it 'should have a "Things" menu with a "Menu" submenu' do
133
+ things_item = @subject.menu.itemArray[2]
134
+ things_menu = things_item.submenu
135
+ menu_menu = things_menu.itemArray[2]
136
+ menu_menu.should.not == nil
137
+ menu_menu.title.should == 'Menu'
138
+ end
139
+
140
+ it 'should have a "Things" menu with a "Menu" submenu with items' do
141
+ things_item = @subject.menu.itemArray[2]
142
+ things_menu = things_item.submenu
143
+ menu_menu = things_menu.itemArray[2]
144
+ menu_menu.submenu.should.not == nil
145
+ menu_menu.submenu.should.be.kind_of(NSMenu)
146
+ menu_menu.submenu.itemArray.length.should > 0
147
+ end
148
+
149
+ it 'should have a "Things" menu with a "Menu" submenu with "Submenu" item' do
150
+ things_item = @subject.menu.itemArray[2]
151
+ things_menu = things_item.submenu
152
+ menu_menu = things_menu.itemArray[2]
153
+ submenu_item = menu_menu.submenu.itemArray[0]
154
+ submenu_item.title.should == 'Submenu'
155
+ end
156
+
157
+ end