bubble-wrap 1.2.0 → 1.3.0.osx

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +8 -8
  2. data/CHANGELOG.md +4 -2
  3. data/Gemfile.lock +1 -1
  4. data/README.md +217 -7
  5. data/Rakefile +23 -2
  6. data/lib/bubble-wrap/camera.rb +10 -6
  7. data/lib/bubble-wrap/core.rb +14 -1
  8. data/lib/bubble-wrap/ext/motion_project_app.rb +8 -0
  9. data/lib/bubble-wrap/font.rb +3 -1
  10. data/lib/bubble-wrap/http.rb +2 -0
  11. data/lib/bubble-wrap/loader.rb +17 -2
  12. data/lib/bubble-wrap/location.rb +9 -6
  13. data/lib/bubble-wrap/media.rb +10 -6
  14. data/lib/bubble-wrap/test.rb +6 -1
  15. data/lib/bubble-wrap/ui.rb +5 -2
  16. data/lib/bubble-wrap/version.rb +2 -7
  17. data/motion/core.rb +6 -1
  18. data/motion/core/app.rb +3 -64
  19. data/motion/core/device.rb +0 -55
  20. data/motion/core/device/{camera.rb → ios/camera.rb} +0 -0
  21. data/motion/core/device/{camera_wrapper.rb → ios/camera_wrapper.rb} +0 -0
  22. data/motion/core/device/ios/screen.rb +75 -0
  23. data/motion/core/device/osx/screen.rb +18 -0
  24. data/motion/core/device/screen.rb +1 -69
  25. data/motion/core/ios/app.rb +71 -0
  26. data/motion/core/ios/device.rb +59 -0
  27. data/motion/core/osx/app.rb +15 -0
  28. data/motion/core/osx/device.rb +6 -0
  29. data/motion/core/string.rb +3 -2
  30. data/motion/http.rb +0 -364
  31. data/motion/http/query.rb +367 -0
  32. data/motion/http/response.rb +32 -0
  33. data/motion/test_suite_delegate.rb +58 -0
  34. data/motion/ui/ui_alert_view.rb +169 -0
  35. data/motion/ui/ui_bar_button_item.rb +55 -53
  36. data/motion/util/constants.rb +34 -32
  37. data/samples/alert/.gitignore +16 -0
  38. data/samples/alert/Gemfile +3 -0
  39. data/samples/alert/Rakefile +10 -0
  40. data/samples/alert/app/app_delegate.rb +8 -0
  41. data/samples/alert/app/controllers/alert_view_controller.rb +74 -0
  42. data/samples/alert/resources/Default-568h@2x.png +0 -0
  43. data/samples/alert/spec/main_spec.rb +9 -0
  44. data/samples/media/.gitignore +16 -0
  45. data/samples/media/Rakefile +11 -0
  46. data/samples/media/app/app_delegate.rb +8 -0
  47. data/samples/media/app/controllers/play_controller.rb +46 -0
  48. data/samples/media/resources/Default-568h@2x.png +0 -0
  49. data/samples/media/resources/test.mp3 +0 -0
  50. data/samples/media/spec/main_spec.rb +9 -0
  51. data/samples/osx/Gemfile +3 -0
  52. data/samples/osx/Gemfile.lock +10 -0
  53. data/samples/osx/Rakefile +11 -0
  54. data/samples/osx/app/app_delegate.rb +69 -0
  55. data/samples/osx/app/menu.rb +108 -0
  56. data/samples/osx/resources/Credits.rtf +29 -0
  57. data/samples/osx/spec/main_spec.rb +9 -0
  58. data/spec/motion/core/app_spec.rb +5 -164
  59. data/spec/motion/core/device/{camera_spec.rb → ios/camera_spec.rb} +0 -0
  60. data/spec/motion/core/device/{camera_wrapper_spec.rb → ios/camera_wrapper_spec.rb} +0 -0
  61. data/spec/motion/core/device/ios/device_spec.rb +74 -0
  62. data/spec/motion/core/device/{screen_spec.rb → ios/screen_spec.rb} +2 -1
  63. data/spec/motion/core/device/osx/screen_spec.rb +26 -0
  64. data/spec/motion/core/device_spec.rb +0 -71
  65. data/spec/motion/core/ios/app_spec.rb +180 -0
  66. data/spec/motion/core/kvo_spec.rb +23 -7
  67. data/spec/motion/core/ns_index_path_spec.rb +10 -2
  68. data/spec/motion/core/osx/app_spec.rb +15 -0
  69. data/spec/motion/core/string_spec.rb +11 -5
  70. data/spec/motion/core_spec.rb +13 -2
  71. data/spec/motion/http/query_spec.rb +731 -0
  72. data/spec/motion/http/response_spec.rb +44 -0
  73. data/spec/motion/http_spec.rb +0 -722
  74. data/spec/motion/{core → ui}/gestures_spec.rb +0 -0
  75. data/spec/motion/ui/ui_alert_view_spec.rb +1188 -0
  76. data/spec/motion/{core → ui}/ui_bar_button_item_spec.rb +80 -24
  77. data/spec/motion/{core → ui}/ui_control_spec.rb +0 -0
  78. data/spec/motion/util/constants_spec.rb +4 -4
  79. metadata +86 -26
@@ -0,0 +1,1188 @@
1
+ shared "an instance with no options" do
2
+ it "has the correct class" do
3
+ @subject.class.should.equal(BW::UIAlertView)
4
+ end
5
+
6
+ it "has the correct superclass" do
7
+ @subject.superclass.should.equal(::UIAlertView)
8
+ end
9
+
10
+ it "has no title" do
11
+ @subject.title.should.be.nil
12
+ end
13
+
14
+ it "has no message" do
15
+ @subject.message.should.be.nil
16
+ end
17
+
18
+ it "has the correct delegate" do
19
+ @subject.delegate.should.equal(@subject)
20
+ end
21
+
22
+ it "has no clicked button" do
23
+ @subject.clicked_button.should.be.nil
24
+ end
25
+
26
+ it "has no will_present handler" do
27
+ @subject.will_present.should.be.nil
28
+ end
29
+
30
+ it "has no did_present handler" do
31
+ @subject.did_present.should.be.nil
32
+ end
33
+
34
+ it "has no on_system_cancel handler" do
35
+ @subject.on_system_cancel.should.be.nil
36
+ end
37
+
38
+ it "has no will_dismiss handler" do
39
+ @subject.will_dismiss.should.be.nil
40
+ end
41
+
42
+ it "has no did_dismiss handler" do
43
+ @subject.did_dismiss.should.be.nil
44
+ end
45
+
46
+ it "has no enable_first_other_button? handler" do
47
+ @subject.enable_first_other_button?.should.be.nil
48
+ end
49
+ end
50
+
51
+ ###################################################################################################
52
+
53
+ shared "an instance with a full set of options" do
54
+ it "has the correct title" do
55
+ @subject.title.should.equal(@options[:title])
56
+ end
57
+
58
+ it "has the correct message" do
59
+ @subject.message.should.equal(@options[:message])
60
+ end
61
+
62
+ it "has the correct delegate" do
63
+ @subject.delegate.should.equal(@subject)
64
+ end
65
+
66
+ it "has the correct cancel button index" do
67
+ @subject.cancel_button_index.should.equal(@options[:cancel_button_index])
68
+ end
69
+
70
+ it "has the correct buttons" do
71
+ @subject.numberOfButtons.should.equal(1)
72
+ @subject.buttonTitleAtIndex(0).should.equal(@options[:buttons])
73
+ end
74
+
75
+ it "has no clicked button" do
76
+ @subject.clicked_button.should.be.nil
77
+ end
78
+
79
+ it "has no will_present handler" do
80
+ @subject.will_present.should.equal(@options[:will_present])
81
+ end
82
+
83
+ it "has no did_present handler" do
84
+ @subject.did_present.should.equal(@options[:did_present])
85
+ end
86
+
87
+ it "has no on_system_cancel handler" do
88
+ @subject.on_system_cancel.should.equal(@options[:on_system_cancel])
89
+ end
90
+
91
+ it "has the correct on_click handler" do
92
+ @subject.on_click.should.equal(@options[:on_click])
93
+ end
94
+
95
+ it "has no will_dismiss handler" do
96
+ @subject.will_dismiss.should.equal(@options[:will_dismiss])
97
+ end
98
+
99
+ it "has no did_dismiss handler" do
100
+ @subject.did_dismiss.should.equal(@options[:did_dismiss])
101
+ end
102
+
103
+ it "has no enable_first_other_button? handler" do
104
+ @subject.enable_first_other_button?.should.equal(@options[:enable_first_other_button?])
105
+ end
106
+ end
107
+
108
+ ###################################################################################################
109
+
110
+ describe BW::UIAlertView do
111
+ describe ".new" do
112
+ describe "given no options" do
113
+ before do
114
+ @subject = BW::UIAlertView.new
115
+ end
116
+
117
+ behaves_like "an instance with no options"
118
+
119
+ it "has the correct style" do
120
+ @subject.style.should.equal(UIAlertViewStyleDefault)
121
+ end
122
+
123
+ it "has no buttons" do
124
+ @subject.numberOfButtons.should.equal(0)
125
+ end
126
+
127
+ it "has the correct cancel button index" do
128
+ @subject.cancel_button_index.should.equal(-1)
129
+ end
130
+
131
+ it "has no on_click handler" do
132
+ @subject.on_click.should.be.nil
133
+ end
134
+
135
+ it "has no plain text field" do
136
+ @subject.plain_text_field.should.be.nil
137
+ end
138
+
139
+ it "has no secure text field" do
140
+ @subject.secure_text_field.should.be.nil
141
+ end
142
+
143
+ it "has no login text field" do
144
+ @subject.login_text_field.should.be.nil
145
+ end
146
+
147
+ it "has no password text field" do
148
+ @subject.password_text_field.should.be.nil
149
+ end
150
+ end
151
+
152
+ ###############################################################################################
153
+
154
+ describe "given no options with a block" do
155
+ before do
156
+ @options = {}
157
+ @block = -> { true }
158
+ @subject = BW::UIAlertView.new(@options, &@block)
159
+ end
160
+
161
+ behaves_like "an instance with no options"
162
+
163
+ it "has the correct style" do
164
+ @subject.style.should.equal(UIAlertViewStyleDefault)
165
+ end
166
+
167
+ it "has no buttons" do
168
+ @subject.numberOfButtons.should.equal(0)
169
+ end
170
+
171
+ it "has the correct cancel button index" do
172
+ @subject.cancel_button_index.should.equal(-1)
173
+ end
174
+
175
+ it "has the correct on_click handler" do
176
+ @subject.on_click.should.equal(@block)
177
+ end
178
+ end
179
+
180
+ ###############################################################################################
181
+
182
+ describe "given a complete set of options" do
183
+ before do
184
+ @options = {
185
+ :title => "title",
186
+ :message => "message",
187
+ :style => :plain_text_input,
188
+ :buttons => "button title",
189
+ :cancel_button_index => 0,
190
+ :will_present => -> { true },
191
+ :did_present => -> { true },
192
+ :on_system_cancel => -> { true },
193
+ :on_click => -> { true },
194
+ :will_dismiss => -> { true },
195
+ :did_dismiss => -> { true },
196
+ :enable_first_other_button? => -> { true }
197
+ }
198
+ @subject = BW::UIAlertView.new(@options)
199
+ end
200
+
201
+ behaves_like "an instance with a full set of options"
202
+ end
203
+
204
+ ###############################################################################################
205
+
206
+ describe "given options with multiple button titles" do
207
+ before do
208
+ @options = { buttons: ["first button", "second button"] }
209
+ @subject = BW::UIAlertView.new(@options)
210
+ end
211
+
212
+ it "has the correct buttons" do
213
+ @subject.numberOfButtons.should.equal(2)
214
+ @subject.buttonTitleAtIndex(0).should.equal(@options[:buttons][0])
215
+ @subject.buttonTitleAtIndex(1).should.equal(@options[:buttons][1])
216
+ end
217
+ end
218
+
219
+ ###############################################################################################
220
+
221
+ describe "given options with both an on_click handler and a block" do
222
+ before do
223
+ @options = { on_click: -> { true }}
224
+ @block = -> { true }
225
+ @subject = BW::UIAlertView.new(@options, &@block)
226
+ end
227
+
228
+ it "has the correct on_click handler" do
229
+ @subject.on_click.should.equal(@options[:on_click])
230
+ end
231
+ end
232
+ end
233
+
234
+ #################################################################################################
235
+
236
+ describe ".default" do
237
+ describe "given no options" do
238
+ before do
239
+ @subject = BW::UIAlertView.default
240
+ end
241
+
242
+ behaves_like "an instance with no options"
243
+
244
+ it "has the correct style" do
245
+ @subject.style.should.equal(UIAlertViewStyleDefault)
246
+ end
247
+
248
+ it "has the correct buttons" do
249
+ @subject.numberOfButtons.should.equal(1)
250
+ @subject.buttonTitleAtIndex(0).should.equal("OK")
251
+ end
252
+
253
+ it "has the correct cancel button index" do
254
+ @subject.cancel_button_index.should.equal(-1)
255
+ end
256
+
257
+ it "has no on_click handler" do
258
+ @subject.on_click.should.be.nil
259
+ end
260
+
261
+ it "has no plain text field" do
262
+ @subject.plain_text_field.should.be.nil
263
+ end
264
+
265
+ it "has no secure text field" do
266
+ @subject.secure_text_field.should.be.nil
267
+ end
268
+
269
+ it "has no login text field" do
270
+ @subject.login_text_field.should.be.nil
271
+ end
272
+
273
+ it "has no password text field" do
274
+ @subject.password_text_field.should.be.nil
275
+ end
276
+ end
277
+
278
+ ###############################################################################################
279
+
280
+ describe "given no options with a block" do
281
+ before do
282
+ @options = {}
283
+ @block = -> { true }
284
+ @subject = BW::UIAlertView.default(@options, &@block)
285
+ end
286
+
287
+ behaves_like "an instance with no options"
288
+
289
+ it "has the correct style" do
290
+ @subject.style.should.equal(UIAlertViewStyleDefault)
291
+ end
292
+
293
+ it "has the correct buttons" do
294
+ @subject.numberOfButtons.should.equal(1)
295
+ @subject.buttonTitleAtIndex(0).should.equal("OK")
296
+ end
297
+
298
+ it "has the correct cancel button index" do
299
+ @subject.cancel_button_index.should.equal(-1)
300
+ end
301
+
302
+ it "has the correct on_click handler" do
303
+ @subject.on_click.should.equal(@block)
304
+ end
305
+ end
306
+
307
+ ###############################################################################################
308
+
309
+ describe "given a complete set of options" do
310
+ before do
311
+ @options = {
312
+ :title => "title",
313
+ :message => "message",
314
+ :style => :plain_text_input,
315
+ :buttons => "button title",
316
+ :cancel_button_index => 0,
317
+ :will_present => -> { true },
318
+ :did_present => -> { true },
319
+ :on_system_cancel => -> { true },
320
+ :on_click => -> { true },
321
+ :will_dismiss => -> { true },
322
+ :did_dismiss => -> { true },
323
+ :enable_first_other_button? => -> { true }
324
+ }
325
+ @subject = BW::UIAlertView.default(@options)
326
+ end
327
+
328
+ behaves_like "an instance with a full set of options"
329
+ end
330
+
331
+ ###############################################################################################
332
+
333
+ describe "given options with multiple button titles" do
334
+ before do
335
+ @options = { buttons: ["first button", "second button"] }
336
+ @subject = BW::UIAlertView.new(@options)
337
+ end
338
+
339
+ it "has the correct buttons" do
340
+ @subject.numberOfButtons.should.equal(2)
341
+ @subject.buttonTitleAtIndex(0).should.equal(@options[:buttons][0])
342
+ @subject.buttonTitleAtIndex(1).should.equal(@options[:buttons][1])
343
+ end
344
+ end
345
+
346
+ ###############################################################################################
347
+
348
+ describe "given options with a cancel button index" do
349
+ before do
350
+ @options = { cancel_button_index: 0 }
351
+ @subject = BW::UIAlertView.new(@options)
352
+ end
353
+
354
+ it "has the correct cancel button index" do
355
+ @subject.cancel_button_index.should.equal(0)
356
+ end
357
+ end
358
+
359
+ ###############################################################################################
360
+
361
+ describe "given options with both an on_click handler and a block" do
362
+ before do
363
+ @options = { on_click: -> { true }}
364
+ @block = -> { true }
365
+ @subject = BW::UIAlertView.default(@options, &@block)
366
+ end
367
+
368
+ it "has the correct on_click handler" do
369
+ @subject.on_click.should.equal(@options[:on_click])
370
+ end
371
+ end
372
+ end
373
+
374
+ #################################################################################################
375
+
376
+ describe ".plain_text_input" do
377
+ describe "given no options" do
378
+ before do
379
+ @subject = BW::UIAlertView.plain_text_input
380
+ end
381
+
382
+ behaves_like "an instance with no options"
383
+
384
+ it "has the correct style" do
385
+ @subject.style.should.equal(UIAlertViewStylePlainTextInput)
386
+ end
387
+
388
+ it "has the correct buttons" do
389
+ @subject.numberOfButtons.should.equal(2)
390
+ @subject.buttonTitleAtIndex(0).should.equal("Cancel")
391
+ @subject.buttonTitleAtIndex(1).should.equal("OK")
392
+ end
393
+
394
+ it "has the correct cancel button index" do
395
+ @subject.cancel_button_index.should.equal(0)
396
+ end
397
+
398
+ it "has no on_click handler" do
399
+ @subject.on_click.should.be.nil
400
+ end
401
+
402
+ it "has a plain text field" do
403
+ @subject.plain_text_field.should.be.kind_of(UITextField)
404
+ end
405
+
406
+ it "has no secure text field" do
407
+ @subject.secure_text_field.should.be.nil
408
+ end
409
+
410
+ it "has no login text field" do
411
+ @subject.login_text_field.should.be.nil
412
+ end
413
+
414
+ it "has no password text field" do
415
+ @subject.password_text_field.should.be.nil
416
+ end
417
+ end
418
+
419
+ ###############################################################################################
420
+
421
+ describe "given no options with a block" do
422
+ before do
423
+ @options = {}
424
+ @block = -> { true }
425
+ @subject = BW::UIAlertView.plain_text_input(@options, &@block)
426
+ end
427
+
428
+ behaves_like "an instance with no options"
429
+
430
+ it "has the correct style" do
431
+ @subject.style.should.equal(UIAlertViewStylePlainTextInput)
432
+ end
433
+
434
+ it "has the correct buttons" do
435
+ @subject.numberOfButtons.should.equal(2)
436
+ @subject.buttonTitleAtIndex(0).should.equal("Cancel")
437
+ @subject.buttonTitleAtIndex(1).should.equal("OK")
438
+ end
439
+
440
+ it "has the correct cancel button index" do
441
+ @subject.cancel_button_index.should.equal(0)
442
+ end
443
+
444
+ it "has the correct on_click handler" do
445
+ @subject.on_click.should.equal(@block)
446
+ end
447
+ end
448
+
449
+ ###############################################################################################
450
+
451
+ describe "given a complete set of options" do
452
+ before do
453
+ @options = {
454
+ :title => "title",
455
+ :message => "message",
456
+ :style => :default,
457
+ :buttons => "button title",
458
+ :cancel_button_index => 0,
459
+ :will_present => -> { true },
460
+ :did_present => -> { true },
461
+ :on_system_cancel => -> { true },
462
+ :on_click => -> { true },
463
+ :will_dismiss => -> { true },
464
+ :did_dismiss => -> { true },
465
+ :enable_first_other_button? => -> { true }
466
+ }
467
+ @subject = BW::UIAlertView.plain_text_input(@options)
468
+ end
469
+
470
+ behaves_like "an instance with a full set of options"
471
+ end
472
+
473
+ ###############################################################################################
474
+
475
+ describe "given options with multiple button titles" do
476
+ before do
477
+ @options = { buttons: ["first button", "second button"] }
478
+ @subject = BW::UIAlertView.new(@options)
479
+ end
480
+
481
+ it "has the correct buttons" do
482
+ @subject.numberOfButtons.should.equal(2)
483
+ @subject.buttonTitleAtIndex(0).should.equal(@options[:buttons][0])
484
+ @subject.buttonTitleAtIndex(1).should.equal(@options[:buttons][1])
485
+ end
486
+ end
487
+
488
+ ###############################################################################################
489
+
490
+ describe "given options with a cancel button index" do
491
+ before do
492
+ @options = { cancel_button_index: -1 }
493
+ @subject = BW::UIAlertView.plain_text_input(@options)
494
+ end
495
+
496
+ it "has the correct cancel button index" do
497
+ @subject.cancel_button_index.should.equal(-1)
498
+ end
499
+ end
500
+
501
+ ###############################################################################################
502
+
503
+ describe "given options with both an on_click handler and a block" do
504
+ before do
505
+ @options = { on_click: -> { true }}
506
+ @block = -> { true }
507
+ @subject = BW::UIAlertView.plain_text_input(@options, &@block)
508
+ end
509
+
510
+ it "has the correct on_click handler" do
511
+ @subject.on_click.should.equal(@options[:on_click])
512
+ end
513
+ end
514
+ end
515
+
516
+ #################################################################################################
517
+
518
+ describe ".secure_text_input" do
519
+ describe "given no options" do
520
+ before do
521
+ @subject = BW::UIAlertView.secure_text_input
522
+ end
523
+
524
+ behaves_like "an instance with no options"
525
+
526
+ it "has the correct style" do
527
+ @subject.style.should.equal(UIAlertViewStyleSecureTextInput)
528
+ end
529
+
530
+ it "has the correct buttons" do
531
+ @subject.numberOfButtons.should.equal(2)
532
+ @subject.buttonTitleAtIndex(0).should.equal("Cancel")
533
+ @subject.buttonTitleAtIndex(1).should.equal("OK")
534
+ end
535
+
536
+ it "has the correct cancel button index" do
537
+ @subject.cancel_button_index.should.equal(0)
538
+ end
539
+
540
+ it "has no on_click handler" do
541
+ @subject.on_click.should.be.nil
542
+ end
543
+
544
+ it "has no plain text field" do
545
+ @subject.plain_text_field.should.be.nil
546
+ end
547
+
548
+ it "has a secure text field" do
549
+ @subject.secure_text_field.should.be.kind_of(UITextField)
550
+ end
551
+
552
+ it "has no login text field" do
553
+ @subject.login_text_field.should.be.nil
554
+ end
555
+
556
+ it "has no password text field" do
557
+ @subject.password_text_field.should.be.nil
558
+ end
559
+ end
560
+
561
+ ###############################################################################################
562
+
563
+ describe "given no options with a block" do
564
+ before do
565
+ @options = {}
566
+ @block = -> { true }
567
+ @subject = BW::UIAlertView.secure_text_input(@options, &@block)
568
+ end
569
+
570
+ behaves_like "an instance with no options"
571
+
572
+ it "has the correct style" do
573
+ @subject.style.should.equal(UIAlertViewStyleSecureTextInput)
574
+ end
575
+
576
+ it "has the correct buttons" do
577
+ @subject.numberOfButtons.should.equal(2)
578
+ @subject.buttonTitleAtIndex(0).should.equal("Cancel")
579
+ @subject.buttonTitleAtIndex(1).should.equal("OK")
580
+ end
581
+
582
+ it "has the correct cancel button index" do
583
+ @subject.cancel_button_index.should.equal(0)
584
+ end
585
+
586
+ it "has the correct on_click handler" do
587
+ @subject.on_click.should.equal(@block)
588
+ end
589
+ end
590
+
591
+ ###############################################################################################
592
+
593
+ describe "given a complete set of options" do
594
+ before do
595
+ @options = {
596
+ :title => "title",
597
+ :message => "message",
598
+ :style => :default,
599
+ :buttons => "button title",
600
+ :cancel_button_index => 0,
601
+ :will_present => -> { true },
602
+ :did_present => -> { true },
603
+ :on_system_cancel => -> { true },
604
+ :on_click => -> { true },
605
+ :will_dismiss => -> { true },
606
+ :did_dismiss => -> { true },
607
+ :enable_first_other_button? => -> { true }
608
+ }
609
+ @subject = BW::UIAlertView.secure_text_input(@options)
610
+ end
611
+
612
+ behaves_like "an instance with a full set of options"
613
+ end
614
+
615
+ ###############################################################################################
616
+
617
+ describe "given options with multiple button titles" do
618
+ before do
619
+ @options = { buttons: ["first button", "second button"] }
620
+ @subject = BW::UIAlertView.new(@options)
621
+ end
622
+
623
+ it "has the correct buttons" do
624
+ @subject.numberOfButtons.should.equal(2)
625
+ @subject.buttonTitleAtIndex(0).should.equal(@options[:buttons][0])
626
+ @subject.buttonTitleAtIndex(1).should.equal(@options[:buttons][1])
627
+ end
628
+ end
629
+
630
+ ###############################################################################################
631
+
632
+ describe "given options with a cancel button index" do
633
+ before do
634
+ @options = { cancel_button_index: -1 }
635
+ @subject = BW::UIAlertView.secure_text_input(@options)
636
+ end
637
+
638
+ it "has the correct cancel button index" do
639
+ @subject.cancel_button_index.should.equal(-1)
640
+ end
641
+ end
642
+
643
+ ###############################################################################################
644
+
645
+ describe "given options with both an on_click handler and a block" do
646
+ before do
647
+ @options = { on_click: -> { true }}
648
+ @block = -> { true }
649
+ @subject = BW::UIAlertView.secure_text_input(@options, &@block)
650
+ end
651
+
652
+ it "has the correct on_click handler" do
653
+ @subject.on_click.should.equal(@options[:on_click])
654
+ end
655
+ end
656
+ end
657
+
658
+ #################################################################################################
659
+
660
+ describe ".login_and_password_input" do
661
+ describe "given no options" do
662
+ before do
663
+ @subject = BW::UIAlertView.login_and_password_input
664
+ end
665
+
666
+ behaves_like "an instance with no options"
667
+
668
+ it "has the correct style" do
669
+ @subject.style.should.equal(UIAlertViewStyleLoginAndPasswordInput)
670
+ end
671
+
672
+ it "has the correct buttons" do
673
+ @subject.numberOfButtons.should.equal(2)
674
+ @subject.buttonTitleAtIndex(0).should.equal("Cancel")
675
+ @subject.buttonTitleAtIndex(1).should.equal("Log in")
676
+ end
677
+
678
+ it "has the correct cancel button index" do
679
+ @subject.cancel_button_index.should.equal(0)
680
+ end
681
+
682
+ it "has no on_click handler" do
683
+ @subject.on_click.should.be.nil
684
+ end
685
+
686
+ it "has no plain text field" do
687
+ @subject.plain_text_field.should.be.nil
688
+ end
689
+
690
+ it "has no secure text field" do
691
+ @subject.secure_text_field.should.be.nil
692
+ end
693
+
694
+ it "has a login text field" do
695
+ @subject.login_text_field.should.be.kind_of(UITextField)
696
+ end
697
+
698
+ it "has a password text field" do
699
+ @subject.password_text_field.should.be.kind_of(UITextField)
700
+ end
701
+ end
702
+
703
+ ###############################################################################################
704
+
705
+ describe "given no options with a block" do
706
+ before do
707
+ @options = {}
708
+ @block = -> { true }
709
+ @subject = BW::UIAlertView.login_and_password_input(@options, &@block)
710
+ end
711
+
712
+ behaves_like "an instance with no options"
713
+
714
+ it "has the correct style" do
715
+ @subject.style.should.equal(UIAlertViewStyleLoginAndPasswordInput)
716
+ end
717
+
718
+ it "has the correct buttons" do
719
+ @subject.numberOfButtons.should.equal(2)
720
+ @subject.buttonTitleAtIndex(0).should.equal("Cancel")
721
+ @subject.buttonTitleAtIndex(1).should.equal("Log in")
722
+ end
723
+
724
+ it "has the correct cancel button index" do
725
+ @subject.cancel_button_index.should.equal(0)
726
+ end
727
+
728
+ it "has the correct on_click handler" do
729
+ @subject.on_click.should.equal(@block)
730
+ end
731
+ end
732
+
733
+ ###############################################################################################
734
+
735
+ describe "given a complete set of options" do
736
+ before do
737
+ @options = {
738
+ :title => "title",
739
+ :message => "message",
740
+ :style => :default,
741
+ :buttons => "button title",
742
+ :cancel_button_index => 0,
743
+ :will_present => -> { true },
744
+ :did_present => -> { true },
745
+ :on_system_cancel => -> { true },
746
+ :on_click => -> { true },
747
+ :will_dismiss => -> { true },
748
+ :did_dismiss => -> { true },
749
+ :enable_first_other_button? => -> { true }
750
+ }
751
+ @subject = BW::UIAlertView.login_and_password_input(@options)
752
+ end
753
+
754
+ behaves_like "an instance with a full set of options"
755
+ end
756
+
757
+ ###############################################################################################
758
+
759
+ describe "given options with multiple button titles" do
760
+ before do
761
+ @options = { buttons: ["first button", "second button"] }
762
+ @subject = BW::UIAlertView.new(@options)
763
+ end
764
+
765
+ it "has the correct buttons" do
766
+ @subject.numberOfButtons.should.equal(2)
767
+ @subject.buttonTitleAtIndex(0).should.equal(@options[:buttons][0])
768
+ @subject.buttonTitleAtIndex(1).should.equal(@options[:buttons][1])
769
+ end
770
+ end
771
+
772
+ ###############################################################################################
773
+
774
+ describe "given options with a cancel button index" do
775
+ before do
776
+ @options = { cancel_button_index: -1 }
777
+ @subject = BW::UIAlertView.login_and_password_input(@options)
778
+ end
779
+
780
+ it "has the correct cancel button index" do
781
+ @subject.cancel_button_index.should.equal(-1)
782
+ end
783
+ end
784
+
785
+ ###############################################################################################
786
+
787
+ describe "given options with both an on_click handler and a block" do
788
+ before do
789
+ @options = { on_click: -> { true }}
790
+ @block = -> { true }
791
+ @subject = BW::UIAlertView.login_and_password_input(@options, &@block)
792
+ end
793
+
794
+ it "has the correct on_click handler" do
795
+ @subject.on_click.should.equal(@options[:on_click])
796
+ end
797
+ end
798
+ end
799
+
800
+ #################################################################################################
801
+
802
+ BW::UIAlertView.callbacks.each do |callback|
803
+ describe ".#{callback}" do
804
+ before do
805
+ @subject = BW::UIAlertView.new
806
+ end
807
+
808
+ describe "given no block" do
809
+ before do
810
+ @return = @subject.send(callback)
811
+ end
812
+
813
+ it "returns no handler" do
814
+ @return.should.be.nil
815
+ end
816
+
817
+ it "has no handler" do
818
+ @subject.send(callback).should.be.nil
819
+ end
820
+ end
821
+
822
+ ###############################################################################################
823
+
824
+ describe "given a block" do
825
+ before do
826
+ @block = -> { true }
827
+ @return = @subject.send(callback, &@block)
828
+ end
829
+
830
+ it "returns the subject" do
831
+ @return.should.equal(@subject)
832
+ end
833
+
834
+ it "has the correct handler" do
835
+ @subject.send(callback).should.equal(@block)
836
+ end
837
+ end
838
+ end
839
+ end
840
+
841
+ #################################################################################################
842
+
843
+ describe "#style=" do
844
+ before do
845
+ @subject = BW::UIAlertView.new
846
+ end
847
+
848
+ describe "given no style" do
849
+ before do
850
+ @subject.style = nil
851
+ end
852
+
853
+ it "has the correct style" do
854
+ @subject.style.should.equal(UIAlertViewStyleDefault)
855
+ end
856
+ end
857
+
858
+ ###############################################################################################
859
+
860
+ describe "given a style" do
861
+ before do
862
+ @subject.style = :plain_text_input
863
+ end
864
+
865
+ it "has the correct style" do
866
+ @subject.style.should.equal(UIAlertViewStylePlainTextInput)
867
+ end
868
+ end
869
+ end
870
+
871
+ #################################################################################################
872
+
873
+ describe "#cancel_button_index=" do
874
+ before do
875
+ @subject = BW::UIAlertView.new
876
+ end
877
+
878
+ describe "given no cancel button index" do
879
+ before do
880
+ @subject.cancel_button_index = nil
881
+ end
882
+
883
+ it "has the correct cancel button index" do
884
+ @subject.cancel_button_index.should.equal(-1)
885
+ end
886
+ end
887
+
888
+ ###############################################################################################
889
+
890
+ describe "given a cancel button index" do
891
+ before do
892
+ @subject.cancel_button_index = 0
893
+ end
894
+
895
+ it "has the correct cancel button index" do
896
+ @subject.cancel_button_index.should.equal(0)
897
+ end
898
+ end
899
+ end
900
+
901
+ #################################################################################################
902
+
903
+ describe "-willPresentAlertView:" do
904
+ before do
905
+ @subject = BW::UIAlertView.new
906
+ end
907
+
908
+ describe "given no will_present handler" do
909
+ it "returns noting" do
910
+ @subject.willPresentAlertView(@subject).should.be.nil
911
+ end
912
+ end
913
+
914
+ ###############################################################################################
915
+
916
+ describe "given a will_present handler" do
917
+ before do
918
+ @subject.will_present do |alert|
919
+ alert.should.equal(@subject)
920
+ alert.clicked_button.should.be.nil
921
+ :will_present
922
+ end
923
+ end
924
+
925
+ it "returns correctly" do
926
+ @subject.willPresentAlertView(@subject).should.equal(:will_present)
927
+ end
928
+ end
929
+ end
930
+
931
+ #################################################################################################
932
+
933
+ describe "-didPresentAlertView:" do
934
+ before do
935
+ @subject = BW::UIAlertView.new
936
+ end
937
+
938
+ describe "given no did_present handler" do
939
+ it "returns noting" do
940
+ @subject.didPresentAlertView(@subject).should.be.nil
941
+ end
942
+ end
943
+
944
+ ###############################################################################################
945
+
946
+ describe "given a did_present handler" do
947
+ before do
948
+ @subject.did_present do |alert|
949
+ alert.should.equal(@subject)
950
+ alert.clicked_button.should.be.nil
951
+ :did_present
952
+ end
953
+ end
954
+
955
+ it "returns correctly" do
956
+ @subject.didPresentAlertView(@subject).should.equal(:did_present)
957
+ end
958
+ end
959
+ end
960
+
961
+ #################################################################################################
962
+
963
+ describe "-alertViewCancel:" do
964
+ before do
965
+ @subject = BW::UIAlertView.new
966
+ end
967
+
968
+ describe "given no on_system_cancel handler" do
969
+ it "returns noting" do
970
+ @subject.alertViewCancel(@subject).should.be.nil
971
+ end
972
+ end
973
+
974
+ ###############################################################################################
975
+
976
+ describe "given an on_system_cancel handler" do
977
+ before do
978
+ @subject.on_system_cancel do |alert|
979
+ alert.should.equal(@subject)
980
+ alert.clicked_button.should.be.nil
981
+ :on_system_cancel
982
+ end
983
+ end
984
+
985
+ it "returns correctly" do
986
+ @subject.alertViewCancel(@subject).should.equal(:on_system_cancel)
987
+ end
988
+ end
989
+ end
990
+
991
+ #################################################################################################
992
+
993
+ describe "-alertViewShouldEnableFirstOtherButton:" do
994
+ before do
995
+ @subject = BW::UIAlertView.new
996
+ end
997
+
998
+ describe "given no enable_first_other_button? handler" do
999
+ it "returns noting" do
1000
+ @subject.alertViewShouldEnableFirstOtherButton(@subject).should.be.nil
1001
+ end
1002
+ end
1003
+
1004
+ ###############################################################################################
1005
+
1006
+ describe "given an enable_first_other_button? handler" do
1007
+ before do
1008
+ @subject.enable_first_other_button? do |alert|
1009
+ alert.should.equal(@subject)
1010
+ alert.clicked_button.should.be.nil
1011
+ true
1012
+ end
1013
+ end
1014
+
1015
+ it "returns correctly" do
1016
+ @subject.alertViewShouldEnableFirstOtherButton(@subject).should.equal(true)
1017
+ end
1018
+ end
1019
+ end
1020
+
1021
+ #################################################################################################
1022
+
1023
+ describe "-alertView:clickedButtonAtIndex:" do
1024
+ before do
1025
+ @index = 0
1026
+ @button = "button title"
1027
+ @subject = BW::UIAlertView.new(buttons: @button)
1028
+ end
1029
+
1030
+ describe "given no on_click handler" do
1031
+ it "returns noting" do
1032
+ @subject.alertView(@subject, clickedButtonAtIndex:@index).should.be.nil
1033
+ end
1034
+ end
1035
+
1036
+ ###############################################################################################
1037
+
1038
+ describe "given an on_click handler" do
1039
+ before do
1040
+ @subject.on_click do |alert|
1041
+ alert.should.equal(@subject)
1042
+ alert.clicked_button.should.not.be.nil
1043
+ alert.clicked_button.index.should.equal(@index)
1044
+ alert.clicked_button.title.should.equal(@button)
1045
+ alert.clicked_button.should.not.be.cancel
1046
+ :on_click
1047
+ end
1048
+ end
1049
+
1050
+ it "returns correctly" do
1051
+ @subject.alertView(@subject, clickedButtonAtIndex:@index).should.equal(:on_click)
1052
+ end
1053
+ end
1054
+
1055
+ ###############################################################################################
1056
+
1057
+ describe "given an on_click handler with a cancel button index" do
1058
+ before do
1059
+ @subject.cancel_button_index = @index
1060
+
1061
+ @subject.on_click do |alert|
1062
+ alert.should.equal(@subject)
1063
+ alert.clicked_button.should.not.be.nil
1064
+ alert.clicked_button.index.should.equal(@index)
1065
+ alert.clicked_button.title.should.equal(@button)
1066
+ alert.clicked_button.should.be.cancel
1067
+ :on_click
1068
+ end
1069
+ end
1070
+
1071
+ it "returns correctly" do
1072
+ @subject.alertView(@subject, clickedButtonAtIndex:@index).should.equal(:on_click)
1073
+ end
1074
+ end
1075
+ end
1076
+
1077
+ #################################################################################################
1078
+
1079
+ describe "-alertView:willDismissWithButtonIndex:" do
1080
+ before do
1081
+ @index = 0
1082
+ @button = "button title"
1083
+ @subject = BW::UIAlertView.new(buttons: @button)
1084
+ end
1085
+
1086
+ describe "given no will_dismiss handler" do
1087
+ it "returns noting" do
1088
+ @subject.alertView(@subject, willDismissWithButtonIndex:@index).should.be.nil
1089
+ end
1090
+ end
1091
+
1092
+ ###############################################################################################
1093
+
1094
+ describe "given a will_dismiss handler" do
1095
+ before do
1096
+ @subject.will_dismiss do |alert|
1097
+ alert.should.equal(@subject)
1098
+ alert.clicked_button.should.not.be.nil
1099
+ alert.clicked_button.index.should.equal(@index)
1100
+ alert.clicked_button.title.should.equal(@button)
1101
+ alert.clicked_button.should.not.be.cancel
1102
+ :will_dismiss
1103
+ end
1104
+ end
1105
+
1106
+ it "returns correctly" do
1107
+ @subject.alertView(@subject, willDismissWithButtonIndex:@index).should.equal(:will_dismiss)
1108
+ end
1109
+ end
1110
+
1111
+ ###############################################################################################
1112
+
1113
+ describe "given a will_dismiss handler with a cancel button index" do
1114
+ before do
1115
+ @subject.cancel_button_index = @index
1116
+
1117
+ @subject.will_dismiss do |alert|
1118
+ alert.should.equal(@subject)
1119
+ alert.clicked_button.should.not.be.nil
1120
+ alert.clicked_button.index.should.equal(@index)
1121
+ alert.clicked_button.title.should.equal(@button)
1122
+ alert.clicked_button.should.be.cancel
1123
+ :will_dismiss
1124
+ end
1125
+ end
1126
+
1127
+ it "returns correctly" do
1128
+ @subject.alertView(@subject, willDismissWithButtonIndex:@index).should.equal(:will_dismiss)
1129
+ end
1130
+ end
1131
+ end
1132
+
1133
+ #################################################################################################
1134
+
1135
+ describe "-alertView:didDismissWithButtonIndex:" do
1136
+ before do
1137
+ @index = 0
1138
+ @button = "button title"
1139
+ @subject = BW::UIAlertView.new(buttons: @button)
1140
+ end
1141
+
1142
+ describe "given no did_dismiss handler" do
1143
+ it "returns noting" do
1144
+ @subject.alertView(@subject, didDismissWithButtonIndex:@index).should.be.nil
1145
+ end
1146
+ end
1147
+
1148
+ ###############################################################################################
1149
+
1150
+ describe "given a did_dismiss handler" do
1151
+ before do
1152
+ @subject.did_dismiss do |alert|
1153
+ alert.should.equal(@subject)
1154
+ alert.clicked_button.should.not.be.nil
1155
+ alert.clicked_button.index.should.equal(@index)
1156
+ alert.clicked_button.title.should.equal(@button)
1157
+ alert.clicked_button.should.not.be.cancel
1158
+ :did_dismiss
1159
+ end
1160
+ end
1161
+
1162
+ it "returns correctly" do
1163
+ @subject.alertView(@subject, didDismissWithButtonIndex:@index).should.equal(:did_dismiss)
1164
+ end
1165
+ end
1166
+
1167
+ ###############################################################################################
1168
+
1169
+ describe "given a did_dismiss handler with a cancel button index" do
1170
+ before do
1171
+ @subject.cancel_button_index = @index
1172
+
1173
+ @subject.did_dismiss do |alert|
1174
+ alert.should.equal(@subject)
1175
+ alert.clicked_button.should.not.be.nil
1176
+ alert.clicked_button.index.should.equal(@index)
1177
+ alert.clicked_button.title.should.equal(@button)
1178
+ alert.clicked_button.should.be.cancel
1179
+ :did_dismiss
1180
+ end
1181
+ end
1182
+
1183
+ it "returns correctly" do
1184
+ @subject.alertView(@subject, didDismissWithButtonIndex:@index).should.equal(:did_dismiss)
1185
+ end
1186
+ end
1187
+ end
1188
+ end