File tree Expand file tree Collapse file tree 2 files changed +66
-0
lines changed Expand file tree Collapse file tree 2 files changed +66
-0
lines changed 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
@@ -73,6 +75,40 @@ def o.divmod(*); [0, 0.001]; end
7375 t . value . should == 5
7476 end
7577 end
78+
79+ context "Kernel.sleep with Fiber scheduler" do
80+ before :each do
81+ Fiber . set_scheduler ( FiberSpecs ::LoggingScheduler . new )
82+ end
83+
84+ after :each do
85+ Fiber . set_scheduler ( nil )
86+ end
87+
88+ it "calls the scheduler without arguments when no duration is given" do
89+ sleeper = Fiber . new ( blocking : false ) do
90+ sleep
91+ end
92+ sleeper . resume
93+ Fiber . scheduler . events . should == [ { event : :kernel_sleep , fiber : sleeper , args : [ ] } ]
94+ end
95+
96+ it "calls the scheduler with the given duration" do
97+ sleeper = Fiber . new ( blocking : false ) do
98+ sleep ( 0.01 )
99+ end
100+ sleeper . resume
101+ Fiber . scheduler . events . should == [ { event : :kernel_sleep , fiber : sleeper , args : [ 0.01 ] } ]
102+ end
103+
104+ it "does not call the scheduler if the fiber is blocking" do
105+ sleeper = Fiber . new ( blocking : true ) do
106+ sleep ( 0.01 )
107+ end
108+ sleeper . resume
109+ Fiber . scheduler . events . should == [ ]
110+ end
111+ end
76112end
77113
78114describe "Kernel.sleep" do
You can’t perform that action at this time.
0 commit comments