summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authornicholas a. evans <nicholas.evans@gmail.com>2020-11-17 19:23:51 -0500
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2020-12-12 10:18:19 +1300
commit31e8de2920935d500105949bda931f3ca22cdbff (patch)
treec2ec39c48a2930ecbbb4ed58175cf3d587270165 /spec
parente795b632467317cdea07d0599bf2c5d08b403f00 (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.rb25
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