diff --git a/core/fiber/set_scheduler_spec.rb b/core/fiber/set_scheduler_spec.rb index b34aff873..64a9d70c6 100644 --- a/core/fiber/set_scheduler_spec.rb +++ b/core/fiber/set_scheduler_spec.rb @@ -3,8 +3,12 @@ require "fiber" describe "Fiber.scheduler" do + required_methods = [:block, :unblock, :kernel_sleep, :io_wait] + ruby_version_is "4.1" do + required_methods << :fiber_interrupt + end + it "validates the scheduler for required methods" do - required_methods = [:block, :unblock, :kernel_sleep, :io_wait] required_methods.each do |missing_method| scheduler = Object.new required_methods.difference([missing_method]).each do |method| @@ -17,7 +21,6 @@ end it "can set and get the scheduler" do - required_methods = [:block, :unblock, :kernel_sleep, :io_wait] scheduler = Object.new required_methods.each do |method| scheduler.define_singleton_method(method) {} @@ -27,7 +30,6 @@ end it "returns the scheduler after setting it" do - required_methods = [:block, :unblock, :kernel_sleep, :io_wait] scheduler = Object.new required_methods.each do |method| scheduler.define_singleton_method(method) {} @@ -37,7 +39,6 @@ end it "can remove the scheduler" do - required_methods = [:block, :unblock, :kernel_sleep, :io_wait] scheduler = Object.new required_methods.each do |method| scheduler.define_singleton_method(method) {} @@ -52,4 +53,17 @@ Fiber.set_scheduler(nil) Fiber.scheduler.should == nil end + + it "closes the scheduler at exit, before any at_exit handler runs" do + code = <<-RUBY + scheduler = Object.new + #{required_methods}.each { |m| scheduler.define_singleton_method(m) {} } + scheduler.define_singleton_method(:close) { print "c" } + + at_exit { print "a" } + Fiber.set_scheduler(scheduler) + RUBY + + ruby_exe(code).should == "ca" + end end