Skip to content

Commit b8f5b80

Browse files
committed
Add spec for IO::Buffer#locked and #locked?
1 parent a18d885 commit b8f5b80

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

core/io/buffer/locked_spec.rb

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
require_relative '../../../spec_helper'
2+
3+
describe "IO::Buffer#locked" do
4+
after :each do
5+
@buffer&.free
6+
@buffer = nil
7+
end
8+
9+
it "disallows reentrant locking, raising IO::Buffer::LockedError" do
10+
@buffer = IO::Buffer.new(4)
11+
@buffer.locked do
12+
-> { @buffer.locked {} }.should raise_error(IO::Buffer::LockedError, "Buffer already locked!")
13+
end
14+
end
15+
16+
it "disallows freeing while locked, raising IO::Buffer::LockedError" do
17+
@buffer = IO::Buffer.new(4)
18+
@buffer.locked do
19+
-> { @buffer.free }.should raise_error(IO::Buffer::LockedError, "Buffer is locked!")
20+
end
21+
end
22+
23+
it "disallows resizing while locked, raising IO::Buffer::LockedError" do
24+
@buffer = IO::Buffer.new(4)
25+
@buffer.locked do
26+
-> { @buffer.resize(8) }.should raise_error(IO::Buffer::LockedError, "Cannot resize locked buffer!")
27+
end
28+
end
29+
30+
it "does not propagate to buffer's slices" do
31+
@buffer = IO::Buffer.new(4)
32+
slice = @buffer.slice(0, 2)
33+
@buffer.locked do
34+
@buffer.locked?.should be_true
35+
slice.locked?.should be_false
36+
slice.locked { slice.locked?.should be_true }
37+
end
38+
end
39+
40+
it "does not propagate backwards from buffer's slices" do
41+
@buffer = IO::Buffer.new(4)
42+
slice = @buffer.slice(0, 2)
43+
slice.locked do
44+
slice.locked?.should be_true
45+
@buffer.locked?.should be_false
46+
@buffer.locked { @buffer.locked?.should be_true }
47+
end
48+
end
49+
end
50+
51+
describe "IO::Buffer#locked?" do
52+
after :each do
53+
@buffer&.free
54+
@buffer = nil
55+
end
56+
57+
it "is false by default" do
58+
@buffer = IO::Buffer.new(4)
59+
@buffer.locked?.should be_false
60+
end
61+
62+
it "is true only inside of #locked block" do
63+
@buffer = IO::Buffer.new(4)
64+
@buffer.locked do
65+
@buffer.locked?.should be_true
66+
end
67+
@buffer.locked?.should be_false
68+
end
69+
end

0 commit comments

Comments
 (0)