[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