diff options
Diffstat (limited to 'spec/ruby/core/fiber/yield_spec.rb')
| -rw-r--r-- | spec/ruby/core/fiber/yield_spec.rb | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/spec/ruby/core/fiber/yield_spec.rb b/spec/ruby/core/fiber/yield_spec.rb new file mode 100644 index 0000000000..12ec6ebcef --- /dev/null +++ b/spec/ruby/core/fiber/yield_spec.rb @@ -0,0 +1,49 @@ +require_relative '../../spec_helper' + +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 + fiber.resume + end + + it "returns nil to the caller if given no arguments" do + fiber = Fiber.new { true; Fiber.yield; true } + fiber.resume.should == nil + fiber.resume + 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 "does not propagate or reraise a rescued exception" do + fiber = Fiber.new do + begin + raise "an error in a Fiber" + rescue + Fiber.yield :first + end + + :second + end + + fiber.resume.should == :first + fiber.resume.should == :second + end + + it "raises a FiberError if called from the root Fiber" do + ->{ Fiber.yield }.should.raise(FiberError) + end +end |
