aboutsummaryrefslogtreecommitdiffstats
path: root/spec/ruby/optional/capi/fiber_spec.rb
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2021-09-20 14:19:52 +1200
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2021-09-20 18:30:51 +1200
commit649c87bd86d08bee8cd61584e6ece34e15e6814d (patch)
tree1bcb5d6acba21e11c6510b22e3dc87eb774e2244 /spec/ruby/optional/capi/fiber_spec.rb
parent88ba5fe547cae2370eccbe230754f59e1d5cbaf3 (diff)
downloadruby-649c87bd86d08bee8cd61584e6ece34e15e6814d.tar.gz
Add C interface spec.
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..92bac22d1a 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
+
+ describe "rb_fiber_raise" do
+ ruby_version_is '3.1' 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