Skip to content

Commit b2c8ead

Browse files
herwinweregon
authored andcommitted
Add specs for Fiber.scheduler and Fiber.set_scheduler
1 parent 2c80ae5 commit b2c8ead

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed

core/fiber/scheduler_spec.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
require_relative '../../spec_helper'
2+
require_relative 'shared/scheduler'
3+
4+
require "fiber"
5+
6+
describe "Fiber.scheduler" do
7+
it_behaves_like :scheduler, :scheduler
8+
end

core/fiber/set_scheduler_spec.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
require_relative '../../spec_helper'
2+
require_relative 'shared/scheduler'
3+
4+
require "fiber"
5+
6+
describe "Fiber.scheduler" do
7+
it_behaves_like :scheduler, :set_scheduler
8+
end

core/fiber/shared/scheduler.rb

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
describe :scheduler, shared: true do
2+
it "validates the scheduler for required methods" do
3+
required_methods = [:block, :unblock, :kernel_sleep, :io_wait]
4+
required_methods.each do |missing_method|
5+
scheduler = Object.new
6+
required_methods.difference([missing_method]).each do |method|
7+
scheduler.define_singleton_method(method) {}
8+
end
9+
-> { Fiber.set_scheduler(scheduler) }.should raise_error(ArgumentError, /Scheduler must implement ##{missing_method}/)
10+
end
11+
end
12+
13+
it "can set and get the scheduler" do
14+
required_methods = [:block, :unblock, :kernel_sleep, :io_wait]
15+
scheduler = Object.new
16+
required_methods.each do |method|
17+
scheduler.define_singleton_method(method) {}
18+
end
19+
Fiber.set_scheduler(scheduler)
20+
Fiber.scheduler.should == scheduler
21+
end
22+
23+
it "returns the scheduler after setting it" do
24+
required_methods = [:block, :unblock, :kernel_sleep, :io_wait]
25+
scheduler = Object.new
26+
required_methods.each do |method|
27+
scheduler.define_singleton_method(method) {}
28+
end
29+
result = Fiber.set_scheduler(scheduler)
30+
result.should == scheduler
31+
end
32+
33+
it "can remove the scheduler" do
34+
required_methods = [:block, :unblock, :kernel_sleep, :io_wait]
35+
scheduler = Object.new
36+
required_methods.each do |method|
37+
scheduler.define_singleton_method(method) {}
38+
end
39+
Fiber.set_scheduler(scheduler)
40+
Fiber.set_scheduler(nil)
41+
Fiber.scheduler.should be_nil
42+
end
43+
44+
it "can assign a nil scheduler multiple times" do
45+
Fiber.set_scheduler(nil)
46+
Fiber.set_scheduler(nil)
47+
Fiber.scheduler.should be_nil
48+
end
49+
end

0 commit comments

Comments
 (0)