|
194 | 194 | describe 'Future' do
|
195 | 195 | it 'has sync and async callbacks' do
|
196 | 196 | callbacks_tester = ->(future) do
|
197 |
| - queue = Queue.new |
| 197 | + queue = Queue.new |
198 | 198 | future.on_completion(:io) { |result| queue.push("async on_completion #{ result.inspect }") }
|
199 | 199 | future.on_completion! { |result| queue.push("sync on_completion #{ result.inspect }") }
|
200 | 200 | future.on_success(:io) { |value| queue.push("async on_success #{ value.inspect }") }
|
|
309 | 309 | expect(Concurrent.zip(branch1, branch2).value!).to eq [2, 3]
|
310 | 310 | end
|
311 | 311 |
|
312 |
| - it 'has flat map' do |
313 |
| - f = Concurrent.future { Concurrent.future { 1 } }.flat.then(&:succ) |
314 |
| - expect(f.value!).to eq 2 |
| 312 | + describe '#flat' do |
| 313 | + it 'returns value of inner future' do |
| 314 | + f = Concurrent.future { Concurrent.future { 1 } }.flat.then(&:succ) |
| 315 | + expect(f.value!).to eq 2 |
| 316 | + end |
315 | 317 |
|
316 |
| - err = StandardError.new('boo') |
317 |
| - f = Concurrent.future { Concurrent.failed_future(err) }.flat |
318 |
| - expect(f.reason).to eq err |
| 318 | + it 'propagates failure of inner future' do |
| 319 | + err = StandardError.new('boo') |
| 320 | + f = Concurrent.future { Concurrent.failed_future(err) }.flat |
| 321 | + expect(f.reason).to eq err |
| 322 | + end |
319 | 323 |
|
320 |
| - f = Concurrent.future { raise 'boo' }.flat |
321 |
| - expect(f.reason.message).to eq 'boo' |
| 324 | + it 'it propagates failure of the future which was suppose to provide inner future' do |
| 325 | + f = Concurrent.future { raise 'boo' }.flat |
| 326 | + expect(f.reason.message).to eq 'boo' |
| 327 | + end |
322 | 328 |
|
323 |
| - f = Concurrent.future { 'boo' }.flat |
324 |
| - expect(f.reason).to be_an_instance_of TypeError |
| 329 | + it 'fails if inner value is not a future' do |
| 330 | + f = Concurrent.future { 'boo' }.flat |
| 331 | + expect(f.reason).to be_an_instance_of TypeError |
| 332 | + |
| 333 | + f = Concurrent.future { Concurrent.completed_event }.flat |
| 334 | + expect(f.reason).to be_an_instance_of TypeError |
| 335 | + end |
325 | 336 | end
|
326 | 337 | end
|
327 | 338 |
|
|
0 commit comments