summaryrefslogtreecommitdiff
path: root/spec/ruby/optional/capi/fiber_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/ruby/optional/capi/fiber_spec.rb')
-rw-r--r--spec/ruby/optional/capi/fiber_spec.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/spec/ruby/optional/capi/fiber_spec.rb b/spec/ruby/optional/capi/fiber_spec.rb
index 196ddc45fb..357033f860 100644
--- a/spec/ruby/optional/capi/fiber_spec.rb
+++ b/spec/ruby/optional/capi/fiber_spec.rb
@@ -48,4 +48,42 @@ describe "C-API Fiber function" do
fiber.resume(42).should == "42"
end
end
+
+ ruby_version_is '3.1' do
+ describe "rb_fiber_raise" do
+ it "raises an exception on the resumed fiber" do
+ fiber = Fiber.new do
+ begin
+ Fiber.yield
+ rescue => error
+ error
+ end
+ end
+
+ fiber.resume
+
+ result = @s.rb_fiber_raise(fiber, "Boom!")
+ result.should be_an_instance_of(RuntimeError)
+ result.message.should == "Boom!"
+ end
+
+ it "raises an exception on the transferred fiber" do
+ main = Fiber.current
+
+ fiber = Fiber.new do
+ begin
+ main.transfer
+ rescue => error
+ error
+ end
+ end
+
+ fiber.transfer
+
+ result = @s.rb_fiber_raise(fiber, "Boom!")
+ result.should be_an_instance_of(RuntimeError)
+ result.message.should == "Boom!"
+ end
+ end
+ end
end