[macruby-changes] [1788] MacRuby/branches/experimental/spec/frozen/core/fiber
source_changes at macosforge.org
source_changes at macosforge.org
Sat Jun 6 12:59:47 PDT 2009
Revision: 1788
http://trac.macosforge.org/projects/ruby/changeset/1788
Author: eloy.de.enige at gmail.com
Date: 2009-06-06 12:59:47 -0700 (Sat, 06 Jun 2009)
Log Message:
-----------
Oops, forgot to add the renamed files
Added Paths:
-----------
MacRuby/branches/experimental/spec/frozen/core/fiber/alive_spec_disabled.rb
MacRuby/branches/experimental/spec/frozen/core/fiber/current_spec_disabled.rb
MacRuby/branches/experimental/spec/frozen/core/fiber/new_spec_disabled.rb
MacRuby/branches/experimental/spec/frozen/core/fiber/resume_spec_disabled.rb
MacRuby/branches/experimental/spec/frozen/core/fiber/transfer_spec_disabled.rb
MacRuby/branches/experimental/spec/frozen/core/fiber/yield_spec_disabled.rb
Added: MacRuby/branches/experimental/spec/frozen/core/fiber/alive_spec_disabled.rb
===================================================================
--- MacRuby/branches/experimental/spec/frozen/core/fiber/alive_spec_disabled.rb (rev 0)
+++ MacRuby/branches/experimental/spec/frozen/core/fiber/alive_spec_disabled.rb 2009-06-06 19:59:47 UTC (rev 1788)
@@ -0,0 +1,53 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+ruby_version_is "1.9" do
+ require 'fiber'
+
+ describe "Fiber#alive?" do
+
+ # 1.9.1 returns 0 for true
+ ruby_bug "#1547", "1.9.2" do
+ it "returns true for a Fiber that hasn't had #resume called" do
+ fiber = Fiber.new { true }
+ fiber.alive?.should be_true
+ end
+
+ # FIXME: Better description?
+ it "returns true for a Fiber that's yielded to the caller" do
+ fiber = Fiber.new { Fiber.yield }
+ fiber.resume
+ fiber.alive?.should be_true
+ end
+
+ it "returns true when called from its Fiber" do
+ fiber = Fiber.new { fiber.alive?.should be_true }
+ fiber.resume
+ end
+ end
+
+ it "doesn't invoke the block associated with the Fiber" do
+ offthehook = mock('do not call')
+ offthehook.should_not_receive(:ring)
+ fiber = Fiber.new { offthehook.ring }
+ fiber.alive?
+ end
+
+ it "returns false for a Fiber that's dead" do
+ fiber = Fiber.new { true }
+ fiber.resume
+ lambda { fiber.resume }.should raise_error(FiberError)
+ fiber.alive?.should be_false
+ end
+
+ it "always returns false for a dead Fiber" do
+ fiber = Fiber.new { true }
+ fiber.resume
+ lambda { fiber.resume }.should raise_error(FiberError)
+ fiber.alive?.should be_false
+ lambda { fiber.resume }.should raise_error(FiberError)
+ fiber.alive?.should be_false
+ fiber.alive?.should be_false
+ end
+
+ end
+end
Added: MacRuby/branches/experimental/spec/frozen/core/fiber/current_spec_disabled.rb
===================================================================
--- MacRuby/branches/experimental/spec/frozen/core/fiber/current_spec_disabled.rb (rev 0)
+++ MacRuby/branches/experimental/spec/frozen/core/fiber/current_spec_disabled.rb 2009-06-06 19:59:47 UTC (rev 1788)
@@ -0,0 +1,62 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+ruby_version_is "1.9" do
+ describe "Fiber.current" do
+
+ require 'fiber'
+
+ it "returns the root Fiber when called outside of a Fiber" do
+ root = Fiber.current
+ root.should be_an_instance_of(Fiber)
+ # We can always transfer to the root Fiber; it will never die
+ 5.times do
+ root.transfer.should be_nil
+ root.alive?.should_not be_false #Workaround for bug #1547
+ end
+ end
+
+ it "returns the current Fiber when called from a Fiber" do
+ fiber = Fiber.new do
+ this = Fiber.current
+ this.should be_an_instance_of(Fiber)
+ this.should == fiber
+ this.alive?.should_not be_false # Workaround for bug #1547
+ end
+ fiber.resume
+ end
+
+ it "returns the current Fiber when called from a Fiber that transferred to another" do
+
+ states = []
+ fiber = Fiber.new do
+ states << :fiber
+ this = Fiber.current
+ this.should be_an_instance_of(Fiber)
+ this.should === fiber
+ this.alive?.should_not be_false # Workaround for bug #1547
+ end
+
+ fiber2 = Fiber.new do
+ states << :fiber2
+ fiber.transfer
+ this = Fiber.current
+ this.should be_an_instance_of(Fiber)
+ this.should === fiber2
+ this.alive?.should_not be_false # Workaround for bug #1547
+ end
+
+ fiber3 = Fiber.new do
+ states << :fiber3
+ fiber2.transfer
+ this = Fiber.current
+ this.should be_an_instance_of(Fiber)
+ this.should === fiber3
+ this.alive?.should_not be_false # Workaround for bug #1547
+ fiber2.transfer
+ end
+
+ fiber3.resume
+ states.should == [:fiber3, :fiber2, :fiber]
+ end
+ end
+end
Added: MacRuby/branches/experimental/spec/frozen/core/fiber/new_spec_disabled.rb
===================================================================
--- MacRuby/branches/experimental/spec/frozen/core/fiber/new_spec_disabled.rb (rev 0)
+++ MacRuby/branches/experimental/spec/frozen/core/fiber/new_spec_disabled.rb 2009-06-06 19:59:47 UTC (rev 1788)
@@ -0,0 +1,48 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+ruby_version_is "1.9" do
+ describe "Fiber.new" do
+ it "creates a fiber from the given block" do
+ fiber = Fiber.new {}
+ fiber.should be_an_instance_of(Fiber)
+ end
+
+ it "raises an ArgumentError if called without a block" do
+ lambda { Fiber.new }.should raise_error(ArgumentError)
+ end
+
+ it "does not invoke the block" do
+ invoked = false
+ fiber = Fiber.new { invoked = true }
+ invoked.should be_false
+ end
+
+ it "closes over lexical environments" do
+ o = Object.new
+ def o.f
+ a = 1
+ f = Fiber.new { a = 2 }
+ f.resume
+ a
+ end
+ o.f.should == 2
+ end
+
+ it "escapes an inner ensure block" do
+ f = Fiber.new do
+ begin
+ :begin
+ rescue
+ :rescue
+ ensure
+ :ensure
+ end
+ end
+ f.resume.should == :begin
+ end
+
+ it "raises a SyntaxError when the block contains a retry statement" do
+ lambda { eval 'Fiber.new { retry; }' }.should raise_error(SyntaxError)
+ end
+ end
+end
Added: MacRuby/branches/experimental/spec/frozen/core/fiber/resume_spec_disabled.rb
===================================================================
--- MacRuby/branches/experimental/spec/frozen/core/fiber/resume_spec_disabled.rb (rev 0)
+++ MacRuby/branches/experimental/spec/frozen/core/fiber/resume_spec_disabled.rb 2009-06-06 19:59:47 UTC (rev 1788)
@@ -0,0 +1,22 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+require File.dirname(__FILE__) + '/shared/resume'
+
+ruby_version_is "1.9" do
+ describe "Fiber#resume" do
+
+ it_behaves_like(:resume, :transfer)
+
+ it "returns control to the calling Fiber if called from one" do
+ fiber1 = Fiber.new { :fiber1 }
+ fiber2 = Fiber.new { fiber1.resume; :fiber2 }
+ fiber2.resume.should == :fiber2
+ end
+
+ it "raises a FiberError if the Fiber has transfered control to another Fiber" do
+ fiber1 = Fiber.new { true }
+ fiber2 = Fiber.new { fiber1.transfer; Fiber.yield }
+ fiber2.resume
+ lambda { fiber2.resume }.should raise_error(FiberError)
+ end
+ end
+end
Added: MacRuby/branches/experimental/spec/frozen/core/fiber/transfer_spec_disabled.rb
===================================================================
--- MacRuby/branches/experimental/spec/frozen/core/fiber/transfer_spec_disabled.rb (rev 0)
+++ MacRuby/branches/experimental/spec/frozen/core/fiber/transfer_spec_disabled.rb 2009-06-06 19:59:47 UTC (rev 1788)
@@ -0,0 +1,44 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+require File.dirname(__FILE__) + '/shared/resume'
+
+ruby_version_is "1.9" do
+ describe "Fiber#transfer" do
+
+ require 'fiber'
+
+ it_behaves_like(:resume, :transfer)
+
+ it "transfers control from one Fiber to another when called from a Fiber" do
+ fiber1 = Fiber.new { :fiber1 }
+ fiber2 = Fiber.new { fiber1.transfer; :fiber2 }
+ fiber2.resume.should == :fiber1
+ end
+
+ it "can be invoked from the same Fiber it transfers control to" do
+ states = []
+ fiber = Fiber.new { states << :start; fiber.transfer; states << :end }
+ fiber.transfer
+ states.should == [:start, :end]
+
+ states = []
+ fiber = Fiber.new { states << :start; fiber.transfer; states << :end }
+ fiber.resume
+ states.should == [:start, :end]
+ end
+
+ it "can transfer control to a Fiber that has transfered to another Fiber" do
+ states = []
+ fiber1 = Fiber.new { states << :fiber1 }
+ fiber2 = Fiber.new { states << :fiber2_start; fiber1.transfer; states << :fiber2_end}
+ fiber2.resume.should == [:fiber2_start, :fiber1]
+ fiber2.transfer.should == [:fiber2_start, :fiber1, :fiber2_end]
+ end
+
+ ruby_bug "#1548", "1.9.2" do
+ it "raises a FiberError when transferring to a Fiber which resumes itself" do
+ fiber = Fiber.new { fiber.resume }
+ lambda { fiber.transfer }.should raise_error(FiberError)
+ end
+ end
+ end
+end
Added: MacRuby/branches/experimental/spec/frozen/core/fiber/yield_spec_disabled.rb
===================================================================
--- MacRuby/branches/experimental/spec/frozen/core/fiber/yield_spec_disabled.rb (rev 0)
+++ MacRuby/branches/experimental/spec/frozen/core/fiber/yield_spec_disabled.rb 2009-06-06 19:59:47 UTC (rev 1788)
@@ -0,0 +1,35 @@
+require File.dirname(__FILE__) + '/../../spec_helper'
+
+ruby_version_is "1.9" do
+ describe "Fiber.yield" do
+
+ it "passes control to the Fiber's caller" do
+ step = 0
+ fiber = Fiber.new { step = 1; Fiber.yield; step = 2; Fiber.yield; step = 3 }
+ fiber.resume
+ step.should == 1
+ fiber.resume
+ step.should == 2
+ end
+
+ it "returns its arguments to the caller" do
+ fiber = Fiber.new { true; Fiber.yield :glark; true }
+ fiber.resume.should == :glark
+ end
+
+ it "returns nil to the caller if given no arguments" do
+ fiber = Fiber.new { true; Fiber.yield; true }
+ fiber.resume.should be_nil
+ end
+
+ it "returns to the Fiber the value of the #resume call that invoked it" do
+ fiber = Fiber.new { Fiber.yield.should == :caller }
+ fiber.resume
+ fiber.resume :caller
+ end
+
+ it "raises a FiberError if called from the root Fiber" do
+ lambda{ Fiber.yield }.should raise_error(FiberError)
+ end
+ end
+end
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20090606/3254effc/attachment.html>
More information about the macruby-changes
mailing list