From 31e8de2920935d500105949bda931f3ca22cdbff Mon Sep 17 00:00:00 2001 From: "nicholas a. evans" Date: Tue, 17 Nov 2020 19:23:51 -0500 Subject: Let Fiber#raise work with transferring fibers This automatically choosess whether to use transfer on a transferring fiber or resume on a yielding fiber. If the fiber is resuming, it raises a FiberError. --- spec/ruby/core/fiber/raise_spec.rb | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'spec') diff --git a/spec/ruby/core/fiber/raise_spec.rb b/spec/ruby/core/fiber/raise_spec.rb index fd1cc911b5..f56219e565 100644 --- a/spec/ruby/core/fiber/raise_spec.rb +++ b/spec/ruby/core/fiber/raise_spec.rb @@ -73,4 +73,29 @@ ruby_version_is "2.7" do -> { fiber.resume }.should raise_error(FiberError, /dead fiber called|attempt to resume a terminated fiber/) end end + +end + +ruby_version_is "2.7"..."3.0" do + describe "Fiber#raise" do + it "raises a FiberError if invoked on a transferring Fiber" do + require "fiber" + root = Fiber.current + fiber = Fiber.new { root.transfer } + fiber.transfer + -> { fiber.raise }.should raise_error(FiberError, "cannot resume transferred Fiber") + end + end +end + +ruby_version_is "3.0" do + describe "Fiber#raise" do + it "transfers and raises on a transferring fiber" do + require "fiber" + root = Fiber.current + fiber = Fiber.new { root.transfer } + fiber.transfer + -> { fiber.raise "msg" }.should raise_error(RuntimeError, "msg") + end + end end -- cgit v1.2.3