ione 1.2.5 → 1.3.0.pre0

Sign up to get free protection for your applications and to get access to all the features.
@@ -91,7 +91,7 @@ module Ione
91
91
  promise.try do
92
92
  3 + 4
93
93
  end
94
- promise.future.value.should eq(7)
94
+ promise.future.value.should == 7
95
95
  end
96
96
 
97
97
  it 'fails the promise when the block raises an error' do
@@ -105,7 +105,7 @@ module Ione
105
105
  promise.try(:foo, 3) do |a, b|
106
106
  a.length + b
107
107
  end
108
- promise.future.value.should eq(6)
108
+ promise.future.value.should == 6
109
109
  end
110
110
 
111
111
  it 'returns nil' do
@@ -216,8 +216,8 @@ module Ione
216
216
  future.on_complete { |v, _| v1 = v }
217
217
  future.on_complete { |v, _| v2 = v }
218
218
  promise.fulfill('bar')
219
- v1.should eq('bar')
220
- v2.should eq('bar')
219
+ v1.should == 'bar'
220
+ v2.should == 'bar'
221
221
  end
222
222
 
223
223
  it 'passes future as the third parameter to the block when it expects three arguments' do
@@ -319,15 +319,15 @@ module Ione
319
319
  future.on_complete { |f| raise 'Blurgh' }
320
320
  future.on_complete { |f| value = f.value }
321
321
  promise.fulfill('bar')
322
- value.should eq('bar')
322
+ value.should == 'bar'
323
323
  end
324
324
 
325
325
  it 'notifies all listeners when the promise fails, even when one raises an error' do
326
326
  err = nil
327
327
  future.on_complete { |f| raise 'Blurgh' }
328
- future.on_complete { |f| begin; f.value; rescue => e; err = e; end }
328
+ future.on_complete { |f| begin; f.value; rescue => err; e = err; end }
329
329
  promise.fail(error)
330
- err.message.should eq('bork')
330
+ err.message.should == 'bork'
331
331
  end
332
332
 
333
333
  it 'notifies listeners registered after the promise was fulfilled' do
@@ -335,7 +335,7 @@ module Ione
335
335
  promise.fulfill('bar')
336
336
  future.on_complete { |vv, ee, ff| v = vv; e = ee; f = ff }
337
337
  f.should equal(future)
338
- v.should eq('bar')
338
+ v.should == 'bar'
339
339
  e.should be_nil
340
340
  end
341
341
 
@@ -345,7 +345,7 @@ module Ione
345
345
  future.on_complete { |vv, ee, ff| v = vv; e = ee; f = ff }
346
346
  f.should equal(future)
347
347
  v.should be_nil
348
- e.message.should eq('bork')
348
+ e.message.should == 'bork'
349
349
  end
350
350
 
351
351
  it 'notifies listeners registered after the promise failed' do
@@ -376,8 +376,8 @@ module Ione
376
376
  future.on_value { |v| v1 = v }
377
377
  future.on_value { |v| v2 = v }
378
378
  promise.fulfill('bar')
379
- v1.should eq('bar')
380
- v2.should eq('bar')
379
+ v1.should == 'bar'
380
+ v2.should == 'bar'
381
381
  end
382
382
 
383
383
  it 'notifies all listeners even when one raises an error' do
@@ -385,7 +385,7 @@ module Ione
385
385
  future.on_value { |v| raise 'Blurgh' }
386
386
  future.on_value { |v| value = v }
387
387
  promise.fulfill('bar')
388
- value.should eq('bar')
388
+ value.should == 'bar'
389
389
  end
390
390
 
391
391
  it 'notifies listeners registered after the promise was resolved' do
@@ -393,8 +393,8 @@ module Ione
393
393
  promise.fulfill('bar')
394
394
  future.on_value { |v| v1 = v }
395
395
  future.on_value { |v| v2 = v }
396
- v1.should eq('bar')
397
- v2.should eq('bar')
396
+ v1.should == 'bar'
397
+ v2.should == 'bar'
398
398
  end
399
399
 
400
400
  it 'does not raise any error when the listener raises an error when already resolved' do
@@ -479,7 +479,7 @@ module Ione
479
479
  p.fulfill('bar')
480
480
  end
481
481
  d.value
482
- future.value.should eq('bar')
482
+ future.value.should == 'bar'
483
483
  end
484
484
 
485
485
  it 'blocks on #value until completed, when value is nil' do
@@ -506,7 +506,7 @@ module Ione
506
506
  end
507
507
  sleep 0.1
508
508
  promise.fulfill(:hello)
509
- listeners.map(&:value).should eq(Array.new(10, :hello))
509
+ listeners.map(&:value).should == Array.new(10, :hello)
510
510
  end
511
511
 
512
512
  it 'is aliased as #get' do
@@ -524,7 +524,7 @@ module Ione
524
524
  f = p.future.map { |v| v * 2 }
525
525
  f.on_value { |v| mapped_value = v }
526
526
  p.fulfill(3)
527
- mapped_value.should eq(3 * 2)
527
+ mapped_value.should == 3 * 2
528
528
  end
529
529
 
530
530
  it 'will be resolved with the specified value' do
@@ -533,7 +533,7 @@ module Ione
533
533
  f = p.future.map(7)
534
534
  f.on_value { |v| mapped_value = v }
535
535
  p.fulfill(3)
536
- mapped_value.should eq(7)
536
+ mapped_value.should == 7
537
537
  end
538
538
 
539
539
  it 'will be resolved with the result of the given block, even if a value is specified' do
@@ -542,7 +542,7 @@ module Ione
542
542
  f = p.future.map(7) { |v| v * 2 }
543
543
  f.on_value { |v| mapped_value = v }
544
544
  p.fulfill(3)
545
- mapped_value.should eq(3 * 2)
545
+ mapped_value.should == 3 * 2
546
546
  end
547
547
 
548
548
  it 'will be resolved with nil when neither value nor block is specified' do
@@ -581,7 +581,7 @@ module Ione
581
581
  p = Promise.new
582
582
  f = p.future.flat_map { |v| Future.resolved(v * 2) }
583
583
  p.fulfill(3)
584
- f.value.should eq(3 * 2)
584
+ f.value.should == 3 * 2
585
585
  end
586
586
 
587
587
  it 'fails when the block raises an error' do
@@ -598,7 +598,7 @@ module Ione
598
598
  p = Promise.new
599
599
  f = p.future.flat_map { fake_future }
600
600
  p.fulfill
601
- f.value.should eq(:foobar)
601
+ f.value.should == :foobar
602
602
  end
603
603
  end
604
604
 
@@ -608,7 +608,7 @@ module Ione
608
608
  p = Promise.new
609
609
  f = p.future.then { |v| Future.resolved(v * 2) }
610
610
  p.fulfill(3)
611
- f.value.should eq(3 * 2)
611
+ f.value.should == 3 * 2
612
612
  end
613
613
  end
614
614
 
@@ -620,7 +620,7 @@ module Ione
620
620
  p = Promise.new
621
621
  f = p.future.then { |v| fake_future }
622
622
  p.fulfill
623
- f.value.should eq(:foobar)
623
+ f.value.should == :foobar
624
624
  end
625
625
  end
626
626
 
@@ -641,7 +641,7 @@ module Ione
641
641
  p = Promise.new
642
642
  f = p.future.then { |v| v * 2 }
643
643
  p.fulfill(3)
644
- f.value.should eq(3 * 2)
644
+ f.value.should == 3 * 2
645
645
  end
646
646
  end
647
647
 
@@ -662,21 +662,21 @@ module Ione
662
662
  p = Promise.new
663
663
  f = p.future.recover { 'foo' }
664
664
  p.fail(error)
665
- f.value.should eq('foo')
665
+ f.value.should == 'foo'
666
666
  end
667
667
 
668
668
  it 'resolves to a specfied value when the source future fails' do
669
669
  p = Promise.new
670
670
  f = p.future.recover('bar')
671
671
  p.fail(error)
672
- f.value.should eq('bar')
672
+ f.value.should == 'bar'
673
673
  end
674
674
 
675
675
  it 'resovles to a value created by the block even when a value is specified when the source future fails' do
676
676
  p = Promise.new
677
677
  f = p.future.recover('bar') { 'foo' }
678
678
  p.fail(error)
679
- f.value.should eq('foo')
679
+ f.value.should == 'foo'
680
680
  end
681
681
 
682
682
  it 'resolves to nil value when no value nor block is specified and the source future fails' do
@@ -690,14 +690,14 @@ module Ione
690
690
  p = Promise.new
691
691
  f = p.future.recover { |e| e.message }
692
692
  p.fail(error)
693
- f.value.should eq(error.message)
693
+ f.value.should == error.message
694
694
  end
695
695
 
696
696
  it 'resolves to the value of the source future when the source future is resolved' do
697
697
  p = Promise.new
698
698
  f = p.future.recover { 'foo' }
699
699
  p.fulfill('bar')
700
- f.value.should eq('bar')
700
+ f.value.should == 'bar'
701
701
  end
702
702
 
703
703
  it 'fails with the error raised in the given block' do
@@ -717,16 +717,17 @@ module Ione
717
717
  f = p1.future.fallback { p2.future }
718
718
  p1.fail(error)
719
719
  p2.fulfill('foo')
720
- f.value.should eq('foo')
720
+ f.value.should == 'foo'
721
721
  end
722
722
 
723
723
  it 'yields the error to the block' do
724
- p = Promise.new
725
- f = p.future.fallback do |error|
724
+ p1 = Promise.new
725
+ p2 = Promise.new
726
+ f = p1.future.fallback do |error|
726
727
  Future.resolved(error.message)
727
728
  end
728
- p.fail(error)
729
- f.value.should eq(error.message)
729
+ p1.fail(error)
730
+ f.value.should == error.message
730
731
  end
731
732
 
732
733
  it 'is resolved with the value of the source future when the source future fullfills' do
@@ -735,7 +736,7 @@ module Ione
735
736
  f = p1.future.fallback { p2.future }
736
737
  p2.fulfill('bar')
737
738
  p1.fulfill('foo')
738
- f.value.should eq('foo')
739
+ f.value.should == 'foo'
739
740
  end
740
741
 
741
742
  it 'fails when the block raises an error' do
@@ -760,7 +761,7 @@ module Ione
760
761
  p = Promise.new
761
762
  f = p.future.fallback { fake_future }
762
763
  p.fail(error)
763
- f.value.should eq('foo')
764
+ f.value.should == 'foo'
764
765
  end
765
766
  end
766
767
  end
@@ -770,7 +771,7 @@ module Ione
770
771
  future = Future.traverse([1, 2, 3]) do |element|
771
772
  Future.resolved(element * 2)
772
773
  end
773
- future.value.should eq([2, 4, 6])
774
+ future.value.should == [2, 4, 6]
774
775
  end
775
776
 
776
777
  it 'fails if any of the source futures fail' do
@@ -799,12 +800,12 @@ module Ione
799
800
  fake_future = double(:fake_future)
800
801
  fake_future.stub(:on_complete) { |&listener| listener.call(:foobar, nil) }
801
802
  future = Future.traverse([1, 2, 3]) { fake_future }
802
- future.value.should eq([:foobar, :foobar, :foobar])
803
+ future.value.should == [:foobar, :foobar, :foobar]
803
804
  end
804
805
 
805
806
  it 'accepts an enumerable of values' do
806
807
  future = Future.traverse([1, 2, 3].to_enum) { |v| Future.resolved(v * 2) }
807
- future.value.should eq([2, 4, 6])
808
+ future.value.should == [2, 4, 6]
808
809
  end
809
810
  end
810
811
 
@@ -818,7 +819,7 @@ module Ione
818
819
  future = Future.reduce(futures, {}) do |accumulator, value|
819
820
  accumulator.merge(value)
820
821
  end
821
- future.value.should eq({'foo' => 'bar', 'qux' => 'baz', 'hello' => 'world'})
822
+ future.value.should == {'foo' => 'bar', 'qux' => 'baz', 'hello' => 'world'}
822
823
  end
823
824
 
824
825
  it 'accepts boolean accumulators' do
@@ -829,7 +830,7 @@ module Ione
829
830
  future = Future.reduce(futures, false) do |accumulator, value|
830
831
  accumulator || value.empty?
831
832
  end
832
- future.value.should eq(true)
833
+ future.value.should == true
833
834
  end
834
835
 
835
836
  it 'calls the block with the values in the order of the source futures' do
@@ -843,7 +844,7 @@ module Ione
843
844
  promises[2].fulfill(2)
844
845
  promises[4].fulfill(4)
845
846
  promises[3].fulfill(3)
846
- future.value.should eq([0, 1, 2, 3, 4])
847
+ future.value.should == [0, 1, 2, 3, 4]
847
848
  end
848
849
 
849
850
  it 'uses the first value as initial value when no intial value is given' do
@@ -855,7 +856,7 @@ module Ione
855
856
  promises[1].fulfill(2)
856
857
  promises[0].fulfill(1)
857
858
  promises[2].fulfill(3)
858
- future.value.should eq(6)
859
+ future.value.should == 6
859
860
  end
860
861
 
861
862
  it 'fails if any of the source futures fail' do
@@ -892,7 +893,7 @@ module Ione
892
893
 
893
894
  context 'when the list of futures is empty' do
894
895
  it 'returns a future that resolves to the initial value' do
895
- Future.reduce([], :foo).value.should eq(:foo)
896
+ Future.reduce([], :foo).value.should == :foo
896
897
  end
897
898
 
898
899
  it 'returns a future that resolves to nil there is also no initial value' do
@@ -906,13 +907,13 @@ module Ione
906
907
  ff2.stub(:on_complete) { |&listener| listener.call(2, nil) }
907
908
  ff3.stub(:on_complete) { |&listener| listener.call(3, nil) }
908
909
  future = Future.reduce([ff1, ff2, ff3], 0) { |sum, n| sum + n }
909
- future.value.should eq(6)
910
+ future.value.should == 6
910
911
  end
911
912
 
912
913
  it 'accepts an enumerable of futures' do
913
914
  futures = [Future.resolved(1), Future.resolved(2), Future.resolved(3)].to_enum
914
915
  future = Future.reduce(futures, 0) { |sum, n| sum + n }
915
- future.value.should eq(6)
916
+ future.value.should == 6
916
917
  end
917
918
 
918
919
  it 'handles a really long list of futures' do
@@ -931,7 +932,7 @@ module Ione
931
932
  promises[1].fulfill(1)
932
933
  promises[0].fulfill(0)
933
934
  promises[2].fulfill(2)
934
- future.value.should eq([1, 0, 2])
935
+ future.value.should == [1, 0, 2]
935
936
  end
936
937
 
937
938
  it 'fails if any of the source futures fail' do
@@ -962,7 +963,7 @@ module Ione
962
963
 
963
964
  context 'when the list of futures is empty' do
964
965
  it 'returns a future that resolves to the initial value' do
965
- Future.reduce([], :foo, ordered: false).value.should eq(:foo)
966
+ Future.reduce([], :foo, ordered: false).value.should == :foo
966
967
  end
967
968
 
968
969
  it 'returns a future that resolves to nil there is also no initial value' do
@@ -1087,7 +1088,7 @@ module Ione
1087
1088
  p2.fulfill(2)
1088
1089
  p1.fulfill(1)
1089
1090
  p3.fulfill(3)
1090
- f.value.should eq([1, 2, 3])
1091
+ f.value.should == [1, 2, 3]
1091
1092
  end
1092
1093
 
1093
1094
  it 'fails if any of the source futures fail' do
@@ -1105,20 +1106,20 @@ module Ione
1105
1106
  end
1106
1107
 
1107
1108
  it 'completes with an empty list when no futures are given' do
1108
- Future.all.value.should eq([])
1109
+ Future.all.value.should == []
1109
1110
  end
1110
1111
 
1111
1112
  it 'completes with an empty list when an empty list is given' do
1112
- Future.all([]).value.should eq([])
1113
+ Future.all([]).value.should == []
1113
1114
  end
1114
1115
 
1115
1116
  it 'completes with an empty list when an empty enumerable is given' do
1116
- Future.all([].to_enum).value.should eq([])
1117
+ Future.all([].to_enum).value.should == []
1117
1118
  end
1118
1119
 
1119
1120
  it 'completes with a list of one item when a single future is given' do
1120
1121
  f = Future.resolved(1)
1121
- Future.all(f).value.should eq([1])
1122
+ Future.all(f).value.should == [1]
1122
1123
  end
1123
1124
 
1124
1125
  it 'accepts a list of futures' do
@@ -1151,7 +1152,7 @@ module Ione
1151
1152
  ff2.stub(:on_complete) { |&listener| listener.call(2, nil) }
1152
1153
  ff3.stub(:on_complete) { |&listener| listener.call(3, nil) }
1153
1154
  future = Future.all(ff1, ff2, ff3)
1154
- future.value.should eq([1, 2, 3])
1155
+ future.value.should == [1, 2, 3]
1155
1156
  end
1156
1157
  end
1157
1158
  end
@@ -1173,7 +1174,7 @@ module Ione
1173
1174
  p3 = Promise.new
1174
1175
  f = Future.first(p1.future, p2.future, p3.future)
1175
1176
  p2.fulfill('foo')
1176
- f.value.should eq('foo')
1177
+ f.value.should == 'foo'
1177
1178
  end
1178
1179
 
1179
1180
  it 'is unaffected by the fullfillment of the other futures' do
@@ -1225,7 +1226,7 @@ module Ione
1225
1226
  end
1226
1227
 
1227
1228
  it 'completes with the value of the given future, when only one is given' do
1228
- Future.first(Future.resolved('foo')).value.should eq('foo')
1229
+ Future.first(Future.resolved('foo')).value.should == 'foo'
1229
1230
  end
1230
1231
 
1231
1232
  it 'accepts a list of futures' do
@@ -1249,7 +1250,7 @@ module Ione
1249
1250
  ff1.stub(:on_complete) { |&listener| listener.call(1, nil) }
1250
1251
  ff2.stub(:on_complete) { |&listener| listener.call(2, nil) }
1251
1252
  future = Future.first(ff1, ff2)
1252
- future.value.should eq(1)
1253
+ future.value.should == 1
1253
1254
  end
1254
1255
  end
1255
1256
  end
@@ -1275,14 +1276,14 @@ module Ione
1275
1276
  it 'calls its value callbacks immediately' do
1276
1277
  value = nil
1277
1278
  future.on_value { |v| value = v }
1278
- value.should eq('hello world')
1279
+ value.should == 'hello world'
1279
1280
  end
1280
1281
 
1281
1282
  it 'calls its complete callbacks immediately' do
1282
1283
  f, v = nil, nil
1283
1284
  future.on_complete { |vv, _, ff| f = ff; v = vv }
1284
1285
  f.should equal(future)
1285
- v.should eq('hello world')
1286
+ v.should == 'hello world'
1286
1287
  end
1287
1288
 
1288
1289
  it 'calls its complete callbacks with the right arity' do
@@ -1292,11 +1293,11 @@ module Ione
1292
1293
  future.on_complete { |vv, ee, ff| f2 = ff }
1293
1294
  f1.should equal(future)
1294
1295
  f2.should equal(future)
1295
- v.should eq('hello world')
1296
+ v.should == 'hello world'
1296
1297
  end
1297
1298
 
1298
1299
  it 'does not block on #value' do
1299
- future.value.should eq('hello world')
1300
+ future.value.should == 'hello world'
1300
1301
  end
1301
1302
 
1302
1303
  it 'defaults to the value nil' do
@@ -1326,14 +1327,14 @@ module Ione
1326
1327
  it 'call its failure callbacks immediately' do
1327
1328
  error = nil
1328
1329
  future.on_failure { |e| error = e }
1329
- error.message.should eq('bork')
1330
+ error.message.should == 'bork'
1330
1331
  end
1331
1332
 
1332
1333
  it 'calls its complete callbacks immediately' do
1333
1334
  f, e = nil, nil
1334
1335
  future.on_complete { |_, ee, ff| f = ff; e = ee }
1335
1336
  f.should equal(future)
1336
- e.message.should eq('bork')
1337
+ e.message.should == 'bork'
1337
1338
  end
1338
1339
 
1339
1340
  it 'calls its complete callbacks with the right arity' do
@@ -1343,7 +1344,7 @@ module Ione
1343
1344
  future.on_complete { |vv, ee, ff| f2 = ff }
1344
1345
  f1.should equal(future)
1345
1346
  f2.should equal(future)
1346
- e.message.should eq('bork')
1347
+ e.message.should == 'bork'
1347
1348
  end
1348
1349
 
1349
1350
  it 'does not block on #value' do
@@ -17,9 +17,9 @@ module Ione
17
17
  it 'returns the number of items in the heap' do
18
18
  heap.push(13)
19
19
  heap.push(100)
20
- heap.size.should eq(2)
20
+ heap.size.should == 2
21
21
  heap.push(101)
22
- heap.size.should eq(3)
22
+ heap.size.should == 3
23
23
  end
24
24
  end
25
25
 
@@ -40,7 +40,7 @@ module Ione
40
40
  heap.push(3)
41
41
  heap.push(6)
42
42
  heap.push(5)
43
- heap.size.should eq(4)
43
+ heap.size.should == 4
44
44
  end
45
45
 
46
46
  it 'is aliased as #<<' do
@@ -48,14 +48,14 @@ module Ione
48
48
  heap << 3
49
49
  heap << 6
50
50
  heap << 5
51
- heap.size.should eq(4)
51
+ heap.size.should == 4
52
52
  end
53
53
 
54
54
  it 'does not add duplicates' do
55
55
  heap << 3
56
56
  heap << 3
57
57
  heap << 3
58
- heap.size.should eq(1)
58
+ heap.size.should == 1
59
59
  end
60
60
  end
61
61
 
@@ -66,21 +66,21 @@ module Ione
66
66
 
67
67
  it 'returns the only item when there is only one' do
68
68
  heap.push(3)
69
- heap.peek.should eq(3)
69
+ heap.peek.should == 3
70
70
  end
71
71
 
72
72
  it 'returns the smallest item' do
73
73
  heap.push(10)
74
74
  heap.push(3)
75
75
  heap.push(7)
76
- heap.peek.should eq(3)
76
+ heap.peek.should == 3
77
77
  end
78
78
 
79
79
  it 'does not remove the item from the heap' do
80
80
  heap.push(3)
81
- heap.peek.should eq(3)
82
- heap.peek.should eq(3)
83
- heap.peek.should eq(3)
81
+ heap.peek.should == 3
82
+ heap.peek.should == 3
83
+ heap.peek.should == 3
84
84
  end
85
85
  end
86
86
 
@@ -91,7 +91,7 @@ module Ione
91
91
 
92
92
  it 'returns and removes the only item when there is only one' do
93
93
  heap.push(3)
94
- heap.pop.should eq(3)
94
+ heap.pop.should == 3
95
95
  heap.should be_empty
96
96
  end
97
97
 
@@ -99,14 +99,14 @@ module Ione
99
99
  heap.push(10)
100
100
  heap.push(3)
101
101
  heap.push(7)
102
- heap.pop.should eq(3)
103
- heap.pop.should eq(7)
104
- heap.size.should eq(1)
102
+ heap.pop.should == 3
103
+ heap.pop.should == 7
104
+ heap.size.should == 1
105
105
  end
106
106
 
107
107
  it 'removes the item from the heap' do
108
108
  heap.push(3)
109
- heap.pop.should eq(3)
109
+ heap.pop.should == 3
110
110
  heap.pop.should be_nil
111
111
  end
112
112
  end
@@ -125,8 +125,8 @@ module Ione
125
125
  heap.push(101)
126
126
  heap.delete(4)
127
127
  heap.pop
128
- heap.peek.should eq(100)
129
- heap.size.should eq(2)
128
+ heap.peek.should == 100
129
+ heap.size.should == 2
130
130
  end
131
131
 
132
132
  it 'removes the last item from the heap' do
@@ -155,7 +155,7 @@ module Ione
155
155
  heap.push(3)
156
156
  heap.push(4)
157
157
  heap.push(5)
158
- heap.delete(4).should eq(4)
158
+ heap.delete(4).should == 4
159
159
  end
160
160
 
161
161
  it 'returns nil when the item is not found' do
@@ -174,8 +174,8 @@ module Ione
174
174
  acceptor.bind
175
175
  acceptor.read
176
176
  accepted_handlers.should have(1).item
177
- accepted_handlers.first.host.should eq('example.com')
178
- accepted_handlers.first.port.should eq(3333)
177
+ accepted_handlers.first.host.should == 'example.com'
178
+ accepted_handlers.first.port.should == 3333
179
179
  end
180
180
 
181
181
  it 'passes the unblocker along to the connection handler' do
@@ -197,9 +197,9 @@ module Ione
197
197
  acceptor.on_accept { |c| received_connection2 = c }
198
198
  acceptor.bind
199
199
  acceptor.read
200
- received_connection1.host.should eq('example.com')
201
- received_connection2.host.should eq('example.com')
202
- received_connection2.port.should eq(3333)
200
+ received_connection1.host.should == 'example.com'
201
+ received_connection2.host.should == 'example.com'
202
+ received_connection2.port.should == 3333
203
203
  end
204
204
 
205
205
  it 'ignores exceptions raised by the connection callback' do
@@ -40,7 +40,7 @@ shared_examples_for 'a connection' do |options|
40
40
  handler.on_closed { calls += 1 }
41
41
  handler.close
42
42
  handler.close
43
- calls.should eq(1)
43
+ calls.should == 1
44
44
  end
45
45
 
46
46
  it 'returns false if it did nothing' do
@@ -83,6 +83,19 @@ shared_examples_for 'a connection' do |options|
83
83
  handler.should be_closed
84
84
  end
85
85
 
86
+ it 'closes the socket for reading if possible' do
87
+ socket.stub(:close_read)
88
+ handler.write('hello world')
89
+ handler.drain
90
+ socket.should have_received(:close_read)
91
+ end
92
+
93
+ it 'ignores IO errors when closing for reading' do
94
+ socket.stub(:close_read).and_raise(IOError, 'Boork')
95
+ handler.write('hello world')
96
+ expect { handler.drain }.to_not raise_error
97
+ end
98
+
86
99
  it 'returns a future that completes when the socket has closed' do
87
100
  handler.write('hello world')
88
101
  f = handler.drain
@@ -238,7 +251,7 @@ shared_examples_for 'a connection' do |options|
238
251
  data = nil
239
252
  handler.on_data { |d| data = d }
240
253
  handler.read
241
- data.should eq('foo bar')
254
+ data.should == 'foo bar'
242
255
  end
243
256
 
244
257
  context 'when #read_nonblock raises an error' do