Sha256: f5a20f2b353253e3eb36b7f32ab1d7e99de785eb07a0a86f128140ca316f569d

Contents?: true

Size: 1.18 KB

Versions: 5

Compression:

Stored size: 1.18 KB

Contents

require 'spec/helper'

describe 'Innate::State::Fiber' do
  begin
    require 'fiber'
  rescue LoadError
    it('needs fiber'){ should.flunk('needed fiber') }
    exit
  end

  F = Innate::State::Fiber

  it 'sets value in current thread with #[]=' do
    Innate::Fiber.new{
      t = F.new
      t[:a] = :b
      Fiber.current[:a].should == :b
    }.resume
  end

  it 'gets value in current thread with #[]' do
    Innate::Fiber.new{
      t = F.new
      Fiber.current[:b] = :c
      t[:b].should == :c
    }.resume
  end

  it 'executes block in #wrap' do
    Innate::Fiber.new{
      t = F.new
      t.wrap{ :foo }.should == :foo
    }.resume
  end

  it 'reraises exceptions occured in #wrap thread' do
    Innate::Fiber.new{
      t = F.new
      Thread.abort_on_exception = false
      lambda{ t.wrap{ raise 'foo' } }.should.raise
    }.resume
  end

  it 'defers execution of passed block in #defer' do
    Innate::Fiber.new{
      t = F.new
      t.defer{ :foo }.value.should == :foo
    }.resume
  end

  it 'copies thread variables to thread spawned in #defer' do
    Innate::Fiber.new{
      t = F.new
      t[:a] = :b
      t.defer{ Fiber.current[:a] }.value.should == :b
    }.resume
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
manveru-innate-2009.04.08 spec/innate/state/fiber.rb
manveru-innate-2009.04.18 spec/innate/state/fiber.rb
manveru-innate-2009.04 spec/innate/state/fiber.rb
innate-2009.04 spec/innate/state/fiber.rb
innate-2009.04.12 spec/innate/state/fiber.rb