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 1
1
require_relative '../../spec_helper'
2
+ require_relative '../fiber/fixtures/scheduler'
3
+ require 'fiber'
2
4
3
5
describe "Kernel#sleep" do
4
6
it "is a private method" do
@@ -73,6 +75,40 @@ def o.divmod(*); [0, 0.001]; end
73
75
t . value . should == 5
74
76
end
75
77
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
76
112
end
77
113
78
114
describe "Kernel.sleep" do
You can’t perform that action at this time.
0 commit comments