diff options
Diffstat (limited to 'spec/ruby/library/fiber')
| -rw-r--r-- | spec/ruby/library/fiber/alive_spec.rb | 46 | ||||
| -rw-r--r-- | spec/ruby/library/fiber/current_spec.rb | 58 | ||||
| -rw-r--r-- | spec/ruby/library/fiber/resume_spec.rb | 18 | ||||
| -rw-r--r-- | spec/ruby/library/fiber/transfer_spec.rb | 86 |
4 files changed, 0 insertions, 208 deletions
diff --git a/spec/ruby/library/fiber/alive_spec.rb b/spec/ruby/library/fiber/alive_spec.rb deleted file mode 100644 index 47149d5279..0000000000 --- a/spec/ruby/library/fiber/alive_spec.rb +++ /dev/null @@ -1,46 +0,0 @@ -require_relative '../../spec_helper' - -require 'fiber' - -describe "Fiber#alive?" do - it "returns true for a Fiber that hasn't had #resume called" do - fiber = Fiber.new { true } - fiber.alive?.should be_true - end - - # FIXME: Better description? - it "returns true for a Fiber that's yielded to the caller" do - fiber = Fiber.new { Fiber.yield } - fiber.resume - fiber.alive?.should be_true - end - - it "returns true when called from its Fiber" do - fiber = Fiber.new { fiber.alive?.should be_true } - fiber.resume - end - - it "doesn't invoke the block associated with the Fiber" do - offthehook = mock('do not call') - offthehook.should_not_receive(:ring) - fiber = Fiber.new { offthehook.ring } - fiber.alive? - end - - it "returns false for a Fiber that's dead" do - fiber = Fiber.new { true } - fiber.resume - -> { fiber.resume }.should raise_error(FiberError) - fiber.alive?.should be_false - end - - it "always returns false for a dead Fiber" do - fiber = Fiber.new { true } - fiber.resume - -> { fiber.resume }.should raise_error(FiberError) - fiber.alive?.should be_false - -> { fiber.resume }.should raise_error(FiberError) - fiber.alive?.should be_false - fiber.alive?.should be_false - end -end diff --git a/spec/ruby/library/fiber/current_spec.rb b/spec/ruby/library/fiber/current_spec.rb deleted file mode 100644 index 1467a88d0d..0000000000 --- a/spec/ruby/library/fiber/current_spec.rb +++ /dev/null @@ -1,58 +0,0 @@ -require_relative '../../spec_helper' - -require 'fiber' - -describe "Fiber.current" do - ruby_version_is "3.1" do - it "is available without an extra require" do - ruby_exe("print Fiber.current.class", options: '--disable-gems --disable-did-you-mean').should == "Fiber" - end - end - - it "returns the root Fiber when called outside of a Fiber" do - root = Fiber.current - root.should be_an_instance_of(Fiber) - # We can always transfer to the root Fiber; it will never die - 5.times do - root.transfer.should be_nil - root.alive?.should be_true - end - end - - it "returns the current Fiber when called from a Fiber" do - fiber = Fiber.new do - this = Fiber.current - this.should be_an_instance_of(Fiber) - this.should == fiber - this.alive?.should be_true - end - fiber.resume - end - - it "returns the current Fiber when called from a Fiber that transferred to another" do - states = [] - fiber = Fiber.new do - states << :fiber - this = Fiber.current - this.should be_an_instance_of(Fiber) - this.should == fiber - this.alive?.should be_true - end - - fiber2 = Fiber.new do - states << :fiber2 - fiber.transfer - flunk - end - - fiber3 = Fiber.new do - states << :fiber3 - fiber2.transfer - states << :fiber3_terminated - end - - fiber3.resume - - states.should == [:fiber3, :fiber2, :fiber, :fiber3_terminated] - end -end diff --git a/spec/ruby/library/fiber/resume_spec.rb b/spec/ruby/library/fiber/resume_spec.rb deleted file mode 100644 index fd69d3ba99..0000000000 --- a/spec/ruby/library/fiber/resume_spec.rb +++ /dev/null @@ -1,18 +0,0 @@ -require_relative '../../spec_helper' - -require 'fiber' - -describe "Fiber#resume" do - it "can work with Fiber#transfer" do - fiber1 = Fiber.new { true } - fiber2 = Fiber.new { fiber1.transfer; Fiber.yield 10 ; Fiber.yield 20; raise } - fiber2.resume.should == 10 - fiber2.resume.should == 20 - end - - it "raises a FiberError if the Fiber attempts to resume a resuming fiber" do - root_fiber = Fiber.current - fiber1 = Fiber.new { root_fiber.resume } - -> { fiber1.resume }.should raise_error(FiberError, /attempt to resume a resuming fiber/) - end -end diff --git a/spec/ruby/library/fiber/transfer_spec.rb b/spec/ruby/library/fiber/transfer_spec.rb deleted file mode 100644 index e20d51352e..0000000000 --- a/spec/ruby/library/fiber/transfer_spec.rb +++ /dev/null @@ -1,86 +0,0 @@ -require_relative '../../spec_helper' -require_relative '../../shared/fiber/resume' - -require 'fiber' - -describe "Fiber#transfer" do - it_behaves_like :fiber_resume, :transfer -end - -describe "Fiber#transfer" do - it "transfers control from one Fiber to another when called from a Fiber" do - fiber1 = Fiber.new { :fiber1 } - fiber2 = Fiber.new { fiber1.transfer; :fiber2 } - fiber2.resume.should == :fiber2 - end - - it "returns to the root Fiber when finished" do - f1 = Fiber.new { :fiber_1 } - f2 = Fiber.new { f1.transfer; :fiber_2 } - - f2.transfer.should == :fiber_1 - f2.transfer.should == :fiber_2 - end - - it "can be invoked from the same Fiber it transfers control to" do - states = [] - fiber = Fiber.new { states << :start; fiber.transfer; states << :end } - fiber.transfer - states.should == [:start, :end] - - states = [] - fiber = Fiber.new { states << :start; fiber.transfer; states << :end } - fiber.resume - states.should == [:start, :end] - end - - it "can not transfer control to a Fiber that has suspended by Fiber.yield" do - states = [] - fiber1 = Fiber.new { states << :fiber1 } - fiber2 = Fiber.new { states << :fiber2_start; Fiber.yield fiber1.transfer; states << :fiber2_end} - fiber2.resume.should == [:fiber2_start, :fiber1] - -> { fiber2.transfer }.should raise_error(FiberError) - end - - it "raises a FiberError when transferring to a Fiber which resumes itself" do - fiber = Fiber.new { fiber.resume } - -> { fiber.transfer }.should raise_error(FiberError) - end - - it "works if Fibers in different Threads each transfer to a Fiber in the same Thread" do - # This catches a bug where Fibers are running on a thread-pool - # and Fibers from a different Ruby Thread reuse the same native thread. - # Caching the Ruby Thread based on the native thread is not correct in that case, - # and the check for "fiber called across threads" in Fiber#transfer - # might be incorrect based on that. - 2.times do - Thread.new do - io_fiber = Fiber.new do |calling_fiber| - calling_fiber.transfer - end - io_fiber.transfer(Fiber.current) - value = Object.new - io_fiber.transfer(value).should equal value - end.join - end - end - - it "transfers control between a non-main thread's root fiber to a child fiber and back again" do - states = [] - thread = Thread.new do - f1 = Fiber.new do |f0| - states << 0 - value2 = f0.transfer(1) - states << value2 - 3 - end - - value1 = f1.transfer(Fiber.current) - states << value1 - value3 = f1.transfer(2) - states << value3 - end - thread.join - states.should == [0, 1, 2, 3] - end -end |
