Sha256: face9ccf825193ca3f41fd0d8b9dbb8dd59be01ad7c0d1f1abc8cd50c9dccf2f

Contents?: true

Size: 1.53 KB

Versions: 49

Compression:

Stored size: 1.53 KB

Contents

require 'promise'

describe 'Promise#then' do
  it 'calls the block when the promise has already been resolved' do
    x = 42
    Promise.value(23).then { |v| x = v }
    x.should == 23
  end

  it 'calls the block when the promise is resolved' do
    a = Promise.new
    x = 42

    a.then { |v| x = v }
    a.resolve(23)

    x.should == 23
  end

  it 'works with multiple chains' do
    x = 42
    Promise.value(2).then { |v| v * 2 }.then { |v| v * 4 }.then { |v| x = v }
    x.should == 16
  end

  it 'works when a block returns a promise' do
    a = Promise.new
    b = Promise.new

    x = 42
    a.then { b }.then { |v| x = v }

    a.resolve(42)
    b.resolve(23)

    x.should == 23
  end

  it 'sends raised exceptions as rejections' do
    x = nil

    Promise.value(2).then { raise "hue" }.rescue { |v| x = v }

    x.should be_kind_of(RuntimeError)
  end

  it 'sends raised exceptions inside rescue blocks as next errors' do
    x = nil

    Promise.value(2).then { raise "hue" }.rescue { raise "omg" }.rescue { |v| x = v }

    x.should be_kind_of(RuntimeError)
  end

  it 'allows then to be called multiple times' do
    p = Promise.value(2)
    x = 1
    p.then { x += 1 }
    p.then { x += 1 }

    x.should == 3
  end

  it 'raises with then! if a promise has already been chained' do
    p = Promise.new

    p.then! {}

    proc { p.then! {} }.should raise_error(ArgumentError)
  end

  it 'should pass a delayed falsy value' do
    p = Promise.new.resolve(5).then { nil }

    p.then do |value|
      expect(value).to eq(nil)
    end
  end
end

Version data entries

49 entries across 49 versions & 1 rubygems

Version Path
opal-1.8.3.rc1 spec/opal/stdlib/promise/then_spec.rb
opal-1.8.2 spec/opal/stdlib/promise/then_spec.rb
opal-1.8.1 spec/opal/stdlib/promise/then_spec.rb
opal-1.8.0 spec/opal/stdlib/promise/then_spec.rb
opal-1.8.0.beta1 spec/opal/stdlib/promise/then_spec.rb
opal-1.7.4 spec/opal/stdlib/promise/then_spec.rb
opal-1.8.0.alpha1 spec/opal/stdlib/promise/then_spec.rb
opal-1.7.3 spec/opal/stdlib/promise/then_spec.rb
opal-1.7.2 spec/opal/stdlib/promise/then_spec.rb
opal-1.7.1 spec/opal/stdlib/promise/then_spec.rb
opal-1.7.0 spec/opal/stdlib/promise/then_spec.rb
opal-1.7.0.rc1 spec/opal/stdlib/promise/then_spec.rb
opal-1.6.1 spec/opal/stdlib/promise/then_spec.rb
opal-1.6.0 spec/opal/stdlib/promise/then_spec.rb
opal-1.6.0.rc1 spec/opal/stdlib/promise/then_spec.rb
opal-1.6.0.alpha1 spec/opal/stdlib/promise/then_spec.rb
opal-1.5.1 spec/opal/stdlib/promise/then_spec.rb
opal-1.5.0 spec/opal/stdlib/promise/then_spec.rb
opal-1.5.0.rc1 spec/opal/stdlib/promise/then_spec.rb
opal-1.4.1 spec/opal/stdlib/promise/then_spec.rb