File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ module FiberSpecs
2+
3+ class LoggingScheduler
4+ attr_reader :events
5+ def initialize
6+ @events = [ ]
7+ end
8+
9+ def block ( *args )
10+ @events << { event : :block , fiber : Fiber . current , args : args }
11+ Fiber . yield
12+ end
13+
14+ def io_wait ( *args )
15+ @events << { event : :io_wait , fiber : Fiber . current , args : args }
16+ Fiber . yield
17+ end
18+
19+ def kernel_sleep ( *args )
20+ @events << { event : :kernel_sleep , fiber : Fiber . current , args : args }
21+ Fiber . yield
22+ end
23+
24+ def unblock ( *args )
25+ @events << { event : :unblock , fiber : Fiber . current , args : args }
26+ Fiber . yield
27+ end
28+ end
29+
30+ end
Original file line number Diff line number Diff line change 11require_relative '../../spec_helper'
2+ require_relative '../fiber/fixtures/scheduler'
3+ require 'fiber'
24
35describe "Kernel#sleep" do
46 it "is a private method" do
@@ -84,6 +86,40 @@ def o.divmod(*); [0, 0.001]; end
8486 t . value . should == 5
8587 end
8688 end
89+
90+ context "Kernel.sleep with Fiber scheduler" do
91+ before :each do
92+ Fiber . set_scheduler ( FiberSpecs ::LoggingScheduler . new )
93+ end
94+
95+ after :each do
96+ Fiber . set_scheduler ( nil )
97+ end
98+
99+ it "calls the scheduler without arguments when no duration is given" do
100+ sleeper = Fiber . new ( blocking : false ) do
101+ sleep
102+ end
103+ sleeper . resume
104+ Fiber . scheduler . events . should == [ { event : :kernel_sleep , fiber : sleeper , args : [ ] } ]
105+ end
106+
107+ it "calls the scheduler with the given duration" do
108+ sleeper = Fiber . new ( blocking : false ) do
109+ sleep ( 0.01 )
110+ end
111+ sleeper . resume
112+ Fiber . scheduler . events . should == [ { event : :kernel_sleep , fiber : sleeper , args : [ 0.01 ] } ]
113+ end
114+
115+ it "does not call the scheduler if the fiber is blocking" do
116+ sleeper = Fiber . new ( blocking : true ) do
117+ sleep ( 0.01 )
118+ end
119+ sleeper . resume
120+ Fiber . scheduler . events . should == [ ]
121+ end
122+ end
87123end
88124
89125describe "Kernel.sleep" do
You can’t perform that action at this time.
0 commit comments