bubble-wrap 1.3.0 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +6 -14
- data/.travis.yml +2 -1
- data/CHANGELOG.md +26 -2
- data/GETTING_STARTED.md +1 -1
- data/Gemfile.lock +1 -1
- data/HACKING.md +6 -4
- data/README.md +83 -3
- data/Rakefile +9 -7
- data/lib/bubble-wrap/all.rb +2 -2
- data/lib/bubble-wrap/mail.rb +9 -0
- data/lib/bubble-wrap/sms.rb +9 -0
- data/lib/bubble-wrap/ui.rb +6 -2
- data/lib/bubble-wrap/version.rb +1 -1
- data/motion/core.rb +1 -1
- data/motion/core/app.rb +7 -2
- data/motion/core/device/ios/camera.rb +3 -2
- data/motion/core/device/ios/screen.rb +19 -0
- data/motion/core/ios/app.rb +13 -1
- data/motion/core/ios/device.rb +5 -0
- data/motion/core/json.rb +1 -3
- data/motion/core/kvo.rb +11 -13
- data/motion/core/persistence.rb +8 -1
- data/motion/core/string.rb +3 -3
- data/motion/core/time.rb +5 -0
- data/motion/http.rb +1 -1
- data/motion/http/query.rb +39 -19
- data/motion/http/response.rb +4 -4
- data/motion/mail/mail.rb +59 -0
- data/motion/mail/result.rb +29 -0
- data/motion/reactor/eventable.rb +3 -2
- data/motion/reactor/periodic_timer.rb +12 -8
- data/motion/reactor/timer.rb +11 -7
- data/motion/sms/result.rb +24 -0
- data/motion/sms/sms.rb +47 -0
- data/motion/ui/pollute.rb +4 -1
- data/motion/ui/ui_alert_view.rb +15 -8
- data/motion/ui/ui_control_wrapper.rb +16 -0
- data/motion/ui/ui_view_controller_wrapper.rb +13 -0
- data/motion/ui/ui_view_wrapper.rb +55 -0
- data/resources/Localizable.strings +1 -0
- data/samples/gesture/Gemfile +2 -2
- data/samples/location/Gemfile +1 -1
- data/samples/osx/Gemfile +2 -2
- data/spec/motion/core/app_spec.rb +6 -0
- data/spec/motion/core/device/ios/camera_spec.rb +3 -3
- data/spec/motion/core/device/ios/screen_spec.rb +45 -0
- data/spec/motion/core/ios/app_spec.rb +29 -0
- data/spec/motion/core/persistence_spec.rb +25 -0
- data/spec/motion/core/string_spec.rb +2 -2
- data/spec/motion/core/time_spec.rb +14 -4
- data/spec/motion/core_spec.rb +9 -8
- data/spec/motion/http/query_spec.rb +92 -15
- data/spec/motion/http/response_spec.rb +4 -3
- data/spec/motion/location/location_spec.rb +1 -1
- data/spec/motion/mail/mail_spec.rb +125 -0
- data/spec/motion/mail/result_spec.rb +53 -0
- data/spec/motion/reactor/eventable_spec.rb +85 -0
- data/spec/motion/reactor_spec.rb +0 -20
- data/spec/motion/sms/result_spec.rb +38 -0
- data/spec/motion/sms/sms_spec.rb +71 -0
- data/spec/motion/ui/pollute_spec.rb +13 -0
- data/spec/motion/ui/ui_bar_button_item_spec.rb +8 -8
- data/spec/motion/ui/ui_control_wrapper_spec.rb +35 -0
- data/spec/motion/ui/ui_view_controller_wrapper_spec.rb +34 -0
- data/spec/motion/ui/ui_view_wrapper_spec.rb +62 -0
- data/travis.sh +7 -0
- metadata +52 -22
- data/motion/ui/gestures.rb +0 -57
- data/motion/ui/ui_control.rb +0 -14
- data/motion/ui/ui_view_controller.rb +0 -11
- data/spec/motion/ui/gestures_spec.rb +0 -62
- data/spec/motion/ui/ui_control_spec.rb +0 -42
@@ -1,8 +1,8 @@
|
|
1
1
|
describe BubbleWrap::String do
|
2
2
|
|
3
|
-
describe ::
|
3
|
+
describe ::NSString do
|
4
4
|
it 'should include BubbleWrap::String' do
|
5
|
-
::
|
5
|
+
::NSString.ancestors.member?(BubbleWrap::String).should == true
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
@@ -17,39 +17,49 @@ describe "Time" do
|
|
17
17
|
describe "parsing an iso8601 formatted time to a Time object" do
|
18
18
|
before do
|
19
19
|
@time = Time.iso8601("2012-05-31T19:41:33Z")
|
20
|
+
@time_with_timezone = Time.iso8601_with_timezone("1987-08-10T06:00:00+02:00")
|
20
21
|
end
|
21
22
|
|
22
23
|
it "should be a time" do
|
23
24
|
@time.instance_of?(Time).should == true
|
25
|
+
@time_with_timezone.instance_of?(Time).should == true
|
24
26
|
end
|
25
27
|
|
26
|
-
#
|
27
|
-
|
28
|
-
|
29
|
-
|
28
|
+
# Crashes Buggy RubyMotion 1.18
|
29
|
+
it "should be converted to the local timezone automatically" do
|
30
|
+
local_zone = Time.now.zone
|
31
|
+
@time.zone.should == local_zone
|
32
|
+
@time_with_timezone.zone == local_zone
|
33
|
+
end
|
30
34
|
|
31
35
|
it "should have a valid year" do
|
32
36
|
@time.utc.year.should == 2012
|
37
|
+
@time_with_timezone.utc.year.should == 1987
|
33
38
|
end
|
34
39
|
|
35
40
|
it "should have a valid month" do
|
36
41
|
@time.utc.month.should == 5
|
42
|
+
@time_with_timezone.utc.month.should == 8
|
37
43
|
end
|
38
44
|
|
39
45
|
it "should have a valid day" do
|
40
46
|
@time.utc.day.should == 31
|
47
|
+
@time_with_timezone.utc.day.should == 10
|
41
48
|
end
|
42
49
|
|
43
50
|
it "should have a valid hour" do
|
44
51
|
@time.utc.hour.should == 19
|
52
|
+
@time_with_timezone.utc.hour.should == 4
|
45
53
|
end
|
46
54
|
|
47
55
|
it "should have a valid minute" do
|
48
56
|
@time.utc.min.should == 41
|
57
|
+
@time_with_timezone.utc.min.should == 0
|
49
58
|
end
|
50
59
|
|
51
60
|
it "should have a valid second" do
|
52
61
|
@time.utc.sec.should == 33
|
62
|
+
@time_with_timezone.utc.sec.should == 0
|
53
63
|
end
|
54
64
|
end
|
55
65
|
|
data/spec/motion/core_spec.rb
CHANGED
@@ -54,15 +54,16 @@ describe 'BubbleWrap' do
|
|
54
54
|
describe "Localized string" do
|
55
55
|
|
56
56
|
it "loads the string from NSBundle" do
|
57
|
+
key = 'real_key'
|
58
|
+
value = 'Real Key'
|
59
|
+
|
60
|
+
BubbleWrap::localized_string(key, value).should == value
|
61
|
+
end
|
62
|
+
|
63
|
+
it "returns the key if localization not found and no value is given" do
|
57
64
|
key = 'fake_key'
|
58
|
-
|
59
|
-
|
60
|
-
bundle = NSBundle.mainBundle
|
61
|
-
def bundle.arguments; @arguments; end
|
62
|
-
def bundle.localizedStringForKey(key, value:value, table:table); @arguments = [key, value, table]; end
|
63
|
-
|
64
|
-
BubbleWrap::localized_string(key, value)
|
65
|
-
bundle.arguments.should.equal [key, value, nil]
|
65
|
+
|
66
|
+
BubbleWrap::localized_string(key).should == key
|
66
67
|
end
|
67
68
|
|
68
69
|
end
|
@@ -1,5 +1,31 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
describe BubbleWrap::HTTP::Query do
|
2
3
|
|
4
|
+
describe "json parameter encoding" do
|
5
|
+
before do
|
6
|
+
@json_payload = {"foo" => "bar"}
|
7
|
+
@json_options = {
|
8
|
+
payload: @json_payload,
|
9
|
+
format: :json
|
10
|
+
}
|
11
|
+
@json_query = BubbleWrap::HTTP::Query.new( "http://localhost:3000" , :post, @json_options )
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should generate json body" do
|
15
|
+
BW::JSON.parse(@json_query.request.HTTPBody).should == @json_payload
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "false value" do
|
20
|
+
before do
|
21
|
+
@query = BubbleWrap::HTTP::Query.new("http://www.google.com", :get, {payload: {following: false}})
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should have right url" do
|
25
|
+
@query.request.URL.absoluteString.should == "http://www.google.com?following=false"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
3
29
|
before do
|
4
30
|
@localhost_url = 'http://localhost'
|
5
31
|
@fake_url = 'http://fake.url'
|
@@ -137,14 +163,14 @@ describe BubbleWrap::HTTP::Query do
|
|
137
163
|
}.should.not.raise NoMethodError
|
138
164
|
end
|
139
165
|
|
140
|
-
it "should set the payload in URL only for GET
|
166
|
+
it "should set the payload in URL only for GET/HEAD/OPTIONS requests" do
|
141
167
|
[:post, :put, :delete, :patch].each do |method|
|
142
168
|
query = BubbleWrap::HTTP::Query.new( @localhost_url , method, { payload: @payload } )
|
143
169
|
query.instance_variable_get(:@url).description.should.equal @localhost_url
|
144
170
|
end
|
145
171
|
|
146
172
|
payload = {name: 'marin'}
|
147
|
-
[:get, :head].each do |method|
|
173
|
+
[:get, :head, :options].each do |method|
|
148
174
|
query = BubbleWrap::HTTP::Query.new( @localhost_url , method, { payload: payload } )
|
149
175
|
query.instance_variable_get(:@url).description.should.equal "#{@localhost_url}?name=marin"
|
150
176
|
end
|
@@ -179,11 +205,10 @@ describe BubbleWrap::HTTP::Query do
|
|
179
205
|
}.should.raise InvalidFileError
|
180
206
|
end
|
181
207
|
|
182
|
-
it "sets the HTTPBody DATA to @request for all methods except GET
|
208
|
+
it "sets the HTTPBody DATA to @request for all methods except GET/HEAD/OPTIONS" do
|
183
209
|
payload = { name: 'apple', model: 'macbook'}
|
184
210
|
files = { twitter: sample_data, site: "mneorr.com".dataUsingEncoding(NSUTF8StringEncoding) }
|
185
211
|
|
186
|
-
puts "\n"
|
187
212
|
[:post, :put, :delete, :patch].each do |method|
|
188
213
|
puts " - #{method}\n"
|
189
214
|
query = BubbleWrap::HTTP::Query.new( @fake_url , method, { payload: payload, files: files } )
|
@@ -192,7 +217,7 @@ describe BubbleWrap::HTTP::Query do
|
|
192
217
|
real_payload.should.equal "--#{uuid}\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\napple\r\n--#{uuid}\r\nContent-Disposition: form-data; name=\"model\"\r\n\r\nmacbook\r\n--#{uuid}\r\nContent-Disposition: form-data; name=\"twitter\"; filename=\"twitter\"\r\nContent-Type: application/octet-stream\r\n\r\ntwitter:@mneorr\r\n--#{uuid}\r\nContent-Disposition: form-data; name=\"site\"; filename=\"site\"\r\nContent-Type: application/octet-stream\r\n\r\nmneorr.com\r\n--#{uuid}--\r\n"
|
193
218
|
end
|
194
219
|
|
195
|
-
[:get, :head].each do |method|
|
220
|
+
[:get, :head, :options].each do |method|
|
196
221
|
puts " - #{method}\n"
|
197
222
|
query = BubbleWrap::HTTP::Query.new( @fake_url , method, { payload: payload } )
|
198
223
|
real_payload = NSString.alloc.initWithData(query.request.HTTPBody, encoding:NSUTF8StringEncoding)
|
@@ -202,12 +227,11 @@ describe BubbleWrap::HTTP::Query do
|
|
202
227
|
|
203
228
|
it "sets the payload without conversion to-from NSString if the payload was NSData" do
|
204
229
|
data = sample_data
|
205
|
-
lambda {
|
230
|
+
lambda { create_query(data, nil) }.should.not.raise NoMethodError
|
206
231
|
end
|
207
232
|
|
208
233
|
it "sets the payload as a string if JSON" do
|
209
234
|
json = "{\"foo\":42,\"bar\":\"BubbleWrap\"}"
|
210
|
-
puts "\n"
|
211
235
|
[:put, :post, :delete, :patch].each do |method|
|
212
236
|
puts " - #{method}\n"
|
213
237
|
query = BubbleWrap::HTTP::Query.new( @fake_url , method, { payload: json } )
|
@@ -224,6 +248,19 @@ describe BubbleWrap::HTTP::Query do
|
|
224
248
|
real_payload.should.equal "--#{uuid}\r\nContent-Disposition: form-data; name=\"computer[name]\"\r\n\r\napple\r\n--#{uuid}\r\nContent-Disposition: form-data; name=\"computer[model]\"\r\n\r\nmacbook\r\n--#{uuid}--\r\n"
|
225
249
|
end
|
226
250
|
|
251
|
+
[["NSUTF8StringEncoding", NSUTF8StringEncoding],
|
252
|
+
["NSJapaneseEUCStringEncoding", NSJapaneseEUCStringEncoding],
|
253
|
+
["NSShiftJISStringEncoding", NSShiftJISStringEncoding],
|
254
|
+
["NSISO2022JPStringEncoding", NSISO2022JPStringEncoding]].each do |enc_name, encoding|
|
255
|
+
it "sets the japanese characters payload encoded in #{enc_name}" do
|
256
|
+
payload = { computer: { name: '名前', model: 'モデル'} }
|
257
|
+
query = BubbleWrap::HTTP::Query.new( @fake_url, :post, { payload: payload, encoding: encoding })
|
258
|
+
uuid = query.instance_variable_get(:@boundary)
|
259
|
+
real_payload = NSString.alloc.initWithData(query.request.HTTPBody, encoding:encoding)
|
260
|
+
real_payload.should.equal "--#{uuid}\r\nContent-Disposition: form-data; name=\"computer[name]\"\r\n\r\n#{payload[:computer][:name]}\r\n--#{uuid}\r\nContent-Disposition: form-data; name=\"computer[model]\"\r\n\r\n#{payload[:computer][:model]}\r\n--#{uuid}--\r\n"
|
261
|
+
end
|
262
|
+
end
|
263
|
+
|
227
264
|
end
|
228
265
|
|
229
266
|
it "should set default timeout to 30s or the one from hash" do
|
@@ -479,6 +516,12 @@ describe BubbleWrap::HTTP::Query do
|
|
479
516
|
@query.response.error_message.should.equal @fake_error.localizedDescription
|
480
517
|
end
|
481
518
|
|
519
|
+
it "should set the error object to response object" do
|
520
|
+
@query.response.error.should.equal nil
|
521
|
+
@query.connection(nil, didFailWithError:@fake_error)
|
522
|
+
@query.response.error.code.should.equal @fake_error.code
|
523
|
+
end
|
524
|
+
|
482
525
|
it "should check if there's a callback block and pass the response in" do
|
483
526
|
expected_response = BubbleWrap::HTTP::Response.new
|
484
527
|
real_response = nil
|
@@ -577,8 +620,9 @@ describe BubbleWrap::HTTP::Query do
|
|
577
620
|
end
|
578
621
|
end
|
579
622
|
|
580
|
-
it "sets the error message on response" do
|
623
|
+
it "sets the error message/code on response" do
|
581
624
|
@real_response.error_message.should.equal "Too many redirections"
|
625
|
+
@real_response.error.code.should.equal NSURLErrorHTTPTooManyRedirects
|
582
626
|
end
|
583
627
|
|
584
628
|
it "sets the request.done_loading" do
|
@@ -608,10 +652,18 @@ describe BubbleWrap::HTTP::Query do
|
|
608
652
|
@query.connection(nil, didReceiveAuthenticationChallenge:@challenge)
|
609
653
|
end
|
610
654
|
|
611
|
-
|
612
|
-
@challenge.previousFailureCount = 1
|
613
|
-
|
614
|
-
|
655
|
+
describe "given the failure count was not 0" do
|
656
|
+
before { @challenge.previousFailureCount = 1 }
|
657
|
+
|
658
|
+
it "should cancel the authentication" do
|
659
|
+
@query.connection(nil, didReceiveAuthenticationChallenge:@challenge)
|
660
|
+
@challenge.sender.was_cancelled.should.equal true
|
661
|
+
end
|
662
|
+
|
663
|
+
it "should set the response fields" do
|
664
|
+
@query.connection(nil, didReceiveAuthenticationChallenge:@challenge)
|
665
|
+
@query.response.status_code.should.equal @challenge.failureResponse.statusCode
|
666
|
+
end
|
615
667
|
end
|
616
668
|
|
617
669
|
it "should pass in Credentials and the challenge itself to the sender" do
|
@@ -633,6 +685,23 @@ describe BubbleWrap::HTTP::Query do
|
|
633
685
|
|
634
686
|
end
|
635
687
|
|
688
|
+
describe 'cancel' do
|
689
|
+
before do
|
690
|
+
@doa_query = BubbleWrap::HTTP::Query.new(@localhost_url, :get)
|
691
|
+
@doa_query.cancel
|
692
|
+
end
|
693
|
+
|
694
|
+
it "should cancel the connection" do
|
695
|
+
@doa_query.connection.was_cancelled.should.equal true
|
696
|
+
end
|
697
|
+
|
698
|
+
if App.ios?
|
699
|
+
it "should turn off the network indicator" do
|
700
|
+
UIApplication.sharedApplication.isNetworkActivityIndicatorVisible.should.equal false
|
701
|
+
end
|
702
|
+
end
|
703
|
+
end
|
704
|
+
|
636
705
|
describe "empty payload" do
|
637
706
|
|
638
707
|
before do
|
@@ -695,11 +764,15 @@ describe BubbleWrap::HTTP::Query do
|
|
695
764
|
end
|
696
765
|
|
697
766
|
class FakeChallenge
|
698
|
-
attr_accessor :previousFailureCount
|
767
|
+
attr_accessor :previousFailureCount, :failureResponse
|
699
768
|
|
700
769
|
def sender
|
701
770
|
@fake_sender ||= FakeSender.new
|
702
771
|
end
|
772
|
+
|
773
|
+
def failureResponse
|
774
|
+
@failureResponse ||= FakeURLResponse.new(401, { bla: "123" }, 123)
|
775
|
+
end
|
703
776
|
end
|
704
777
|
|
705
778
|
class BubbleWrap::HTTP::Query
|
@@ -707,7 +780,7 @@ describe BubbleWrap::HTTP::Query do
|
|
707
780
|
end
|
708
781
|
|
709
782
|
class FakeURLConnection < NSURLConnection
|
710
|
-
attr_reader :delegate, :request, :was_started
|
783
|
+
attr_reader :delegate, :request, :was_started, :was_cancelled
|
711
784
|
def initialize(request, delegate)
|
712
785
|
@request = request
|
713
786
|
@delegate = delegate
|
@@ -715,8 +788,12 @@ describe BubbleWrap::HTTP::Query do
|
|
715
788
|
end
|
716
789
|
def start
|
717
790
|
@was_started = true
|
791
|
+
@was_cancelled = false
|
718
792
|
super
|
719
793
|
end
|
794
|
+
def cancel
|
795
|
+
@was_cancelled = true
|
796
|
+
end
|
720
797
|
end
|
721
798
|
|
722
799
|
class FakeURLResponse < NSHTTPURLResponse
|
@@ -728,4 +805,4 @@ describe BubbleWrap::HTTP::Query do
|
|
728
805
|
end
|
729
806
|
end
|
730
807
|
|
731
|
-
end
|
808
|
+
end
|
@@ -9,12 +9,12 @@ describe BubbleWrap::HTTP::Response do
|
|
9
9
|
@response.instance_variable_get(:@url).should == 'http://localhost'
|
10
10
|
end
|
11
11
|
|
12
|
-
it "says OK status code
|
12
|
+
it "says OK status code 2xx" do
|
13
13
|
@response.ok?.should.equal true
|
14
|
-
(200..
|
14
|
+
(200..211).each do |code|
|
15
15
|
BubbleWrap::HTTP::Response.new(status_code: code).ok?.should.be.true
|
16
16
|
end
|
17
|
-
[100..101, 300..307, 400..417, 500..505].inject([]){|codes, rg| codes
|
17
|
+
[100..101, 300..307, 400..417, 500..505].inject([]){|codes, rg| codes + rg.to_a}.each do |code|
|
18
18
|
BubbleWrap::HTTP::Response.new(status_code: code).ok?.should.be.false
|
19
19
|
end
|
20
20
|
end
|
@@ -39,6 +39,7 @@ describe BubbleWrap::HTTP::Response do
|
|
39
39
|
@response.should.respond_to :url
|
40
40
|
@response.should.respond_to :status_code=
|
41
41
|
@response.should.respond_to :error_message=
|
42
|
+
@response.should.respond_to :error=
|
42
43
|
end
|
43
44
|
|
44
45
|
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
# Mocking the presentViewController
|
2
|
+
class MailViewController < UIViewController
|
3
|
+
attr_accessor :expectation
|
4
|
+
|
5
|
+
def presentModalViewController(modal, animated: animated)
|
6
|
+
expectation.call modal, animated
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
# Monkey-patching MFMailComposeViewController
|
11
|
+
# So we can access the values that are set.
|
12
|
+
# This of course breaks MFMailComposeViewController from actually working,
|
13
|
+
# but it's testable.
|
14
|
+
class MFMailComposeViewController
|
15
|
+
attr_accessor :toRecipients, :ccRecipients, :bccRecipients, :subject, :message, :html
|
16
|
+
|
17
|
+
def setToRecipients(r)
|
18
|
+
self.toRecipients = r
|
19
|
+
end
|
20
|
+
|
21
|
+
def setCcRecipients(r)
|
22
|
+
self.ccRecipients = r
|
23
|
+
end
|
24
|
+
|
25
|
+
def setBccRecipients(r)
|
26
|
+
self.bccRecipients = r
|
27
|
+
end
|
28
|
+
|
29
|
+
def setSubject(r)
|
30
|
+
self.subject = r
|
31
|
+
end
|
32
|
+
|
33
|
+
def setMessageBody(message, isHTML: html)
|
34
|
+
self.message = message
|
35
|
+
self.html = html
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe BW::Mail do
|
40
|
+
describe ".compose" do
|
41
|
+
before do
|
42
|
+
@view_controller = MailViewController.new
|
43
|
+
@standard_mail_options = {
|
44
|
+
delegate: @view_controller,
|
45
|
+
to: [ "tom@example.com" ],
|
46
|
+
cc: [ "itchy@example.com", "scratchy@example.com" ],
|
47
|
+
bcc: [ "jerry@example.com" ],
|
48
|
+
html: false,
|
49
|
+
subject: "My Subject",
|
50
|
+
message: "This is my message. It isn't very long.",
|
51
|
+
animated: false
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should open the mail controller in a modal" do
|
56
|
+
@view_controller.expectation = lambda { |mail_controller, animated|
|
57
|
+
mail_controller.should.be.kind_of(MFMailComposeViewController)
|
58
|
+
}
|
59
|
+
|
60
|
+
BubbleWrap::Mail.compose @standard_mail_options
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should create a mail controller with the right to: address set" do
|
64
|
+
@view_controller.expectation = lambda { |mail_controller, animated|
|
65
|
+
mail_controller.toRecipients.should.be.kind_of(Array)
|
66
|
+
mail_controller.toRecipients.should == @standard_mail_options[:to]
|
67
|
+
}
|
68
|
+
|
69
|
+
BubbleWrap::Mail.compose @standard_mail_options
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should create a mail controller with the right cc: address set" do
|
73
|
+
@view_controller.expectation = lambda { |mail_controller, animated|
|
74
|
+
mail_controller.ccRecipients.should.be.kind_of(Array)
|
75
|
+
mail_controller.ccRecipients.should == @standard_mail_options[:cc]
|
76
|
+
}
|
77
|
+
|
78
|
+
BubbleWrap::Mail.compose @standard_mail_options
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should create a mail controller with the right bcc: address set" do
|
82
|
+
@view_controller.expectation = lambda { |mail_controller, animated|
|
83
|
+
mail_controller.bccRecipients.should.be.kind_of(Array)
|
84
|
+
mail_controller.bccRecipients.should == @standard_mail_options[:bcc]
|
85
|
+
}
|
86
|
+
|
87
|
+
BubbleWrap::Mail.compose @standard_mail_options
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should create a mail controller with the right subject: set" do
|
91
|
+
@view_controller.expectation = lambda { |mail_controller, animated|
|
92
|
+
mail_controller.subject.should.be.kind_of(String)
|
93
|
+
mail_controller.subject.should == @standard_mail_options[:subject]
|
94
|
+
}
|
95
|
+
|
96
|
+
BubbleWrap::Mail.compose @standard_mail_options
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should create a mail controller with the right message: set" do
|
100
|
+
@view_controller.expectation = lambda { |mail_controller, animated|
|
101
|
+
mail_controller.message.should.be.kind_of(String)
|
102
|
+
mail_controller.message.should == @standard_mail_options[:message]
|
103
|
+
}
|
104
|
+
|
105
|
+
BubbleWrap::Mail.compose @standard_mail_options
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should create a mail controller with the right html: set" do
|
109
|
+
@view_controller.expectation = lambda { |mail_controller, animated|
|
110
|
+
mail_controller.html.should == @standard_mail_options[:html]
|
111
|
+
}
|
112
|
+
|
113
|
+
BubbleWrap::Mail.compose @standard_mail_options
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should create a mail controller with the right animation" do
|
117
|
+
@view_controller.expectation = lambda { |mail_controller, animated|
|
118
|
+
animated.should.be.false
|
119
|
+
}
|
120
|
+
|
121
|
+
BubbleWrap::Mail.compose @standard_mail_options
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
125
|
+
end
|