diff options
author | nicholas a. evans <[email protected]> | 2020-11-17 19:23:51 -0500 |
---|---|---|
committer | Samuel Williams <[email protected]> | 2020-12-12 10:18:19 +1300 |
commit | 31e8de2920935d500105949bda931f3ca22cdbff (patch) | |
tree | c2ec39c48a2930ecbbb4ed58175cf3d587270165 /spec | |
parent | e795b632467317cdea07d0599bf2c5d08b403f00 (diff) |
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.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/3795
Diffstat (limited to 'spec')
-rw-r--r-- | spec/ruby/core/fiber/raise_spec.rb | 25 |
1 files changed, 25 insertions, 0 deletions
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 |