Skip to content

Commit 4b86ea3

Browse files
committedOct 24, 2024
Update specs
1 parent 0ef9c34 commit 4b86ea3

File tree

1 file changed

+22
-31
lines changed

1 file changed

+22
-31
lines changed
 

‎spec/payload_spec.cr

+22-31
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
require "./spec_helper"
22

3-
class NonPositionIO < ::IO
3+
class DummyIO < ::IO
44
def initialize(@data : Bytes)
55
end
66

@@ -31,60 +31,48 @@ describe MQTT::Protocol::Payload do
3131
it "should return true for two BytePayload with same bytes" do
3232
one = MQTT::Protocol::BytesPayload.new("foo".to_slice)
3333
two = MQTT::Protocol::BytesPayload.new("foo".to_slice)
34-
3534
(one == two).should be_true
3635
end
3736

3837
it "should return false for two BytePayload with different bytes" do
3938
one = MQTT::Protocol::BytesPayload.new("foo".to_slice)
4039
two = MQTT::Protocol::BytesPayload.new("bar".to_slice)
41-
4240
(one == two).should be_false
4341
end
4442

4543
it "should return true for two IOPayload with same content" do
4644
io_one = IO::Memory.new("foo".to_slice)
4745
io_two = IO::Memory.new("foo".to_slice)
48-
4946
io_one.rewind
5047
io_two.rewind
51-
5248
one = MQTT::Protocol::IOPayload.new(io_one, 3)
5349
two = MQTT::Protocol::IOPayload.new(io_two, 3)
54-
5550
(one == two).should be_true
5651
end
5752

5853
it "should return false for two IOPayload with different content" do
5954
io_one = IO::Memory.new("foo".to_slice)
6055
io_two = IO::Memory.new("bar".to_slice)
61-
6256
io_one.rewind
6357
io_two.rewind
64-
6558
one = MQTT::Protocol::IOPayload.new(io_one, 3)
6659
two = MQTT::Protocol::IOPayload.new(io_two, 3)
67-
6860
(one == two).should be_false
6961
end
7062

7163
it "should return true for one BytesPayload and one IOPayload with same content" do
7264
io_two = IO::Memory.new("foo".to_slice)
7365
io_two.rewind
74-
7566
one = MQTT::Protocol::BytesPayload.new("foo".to_slice)
7667
two = MQTT::Protocol::IOPayload.new(io_two, 3)
77-
7868
(one == two).should be_true
7969
end
8070

8171
it "should return false for one BytesPayload and one IOPayload with different content" do
8272
io_two = IO::Memory.new("bar".to_slice)
8373
io_two.rewind
84-
8574
one = MQTT::Protocol::BytesPayload.new("foo".to_slice)
8675
two = MQTT::Protocol::IOPayload.new(io_two, 3)
87-
8876
(one == two).should be_false
8977
end
9078
end
@@ -94,46 +82,49 @@ describe MQTT::Protocol::Payload do
9482
it "should peek if possible" do
9583
io = IO::Memory.new("foo".to_slice)
9684
io.rewind
97-
9885
obj = MQTT::Protocol::IOPayload.new(io, 3)
99-
obj.to_slice
100-
86+
obj.to_slice.should eq "foo".to_slice
10187
obj.@data.should be_nil
10288
end
10389

10490
it "should copy data if peek isn't possible" do
105-
io = NonPositionIO.new("foo".to_slice)
106-
91+
io = DummyIO.new("foo".to_slice)
10792
obj = MQTT::Protocol::IOPayload.new(io, 3)
108-
obj.to_slice
109-
93+
obj.to_slice.should eq "foo".to_slice
11094
obj.@data.should eq "foo".to_slice
11195
end
11296
end
11397

11498
describe "#to_io" do
115-
it "should not affect position if io support pos/pos=" do
116-
io = IO::Memory.new("foo".to_slice)
117-
io.rewind
99+
it "should not affect position if io is FileDescriptor" do
100+
File.open(File.tempfile.path, "w+") do |io|
101+
io.write "foo".to_slice
102+
io.rewind
103+
obj = MQTT::Protocol::IOPayload.new(io, 3)
104+
dst = IO::Memory.new
105+
obj.to_io(dst)
106+
obj.@data.should be_nil
107+
obj.@io.pos.should eq 0
108+
dst.to_slice.should eq "foo".to_slice
109+
end
110+
end
118111

112+
it "should not copy data if io is Memory" do
113+
io = ::IO::Memory.new("foo".to_slice)
119114
obj = MQTT::Protocol::IOPayload.new(io, 3)
120-
121115
dst = IO::Memory.new
122116
obj.to_io(dst)
123-
124117
obj.@data.should be_nil
125-
obj.@io.pos.should eq 0
118+
dst.to_slice.should eq "foo".to_slice
126119
end
127120

128-
it "should copy data if io doesn't support pos/pos=" do
129-
io = NonPositionIO.new("foo".to_slice)
130-
121+
it "should copy data if io is other than Memory or FileDescriptor" do
122+
io = DummyIO.new("foo".to_slice)
131123
obj = MQTT::Protocol::IOPayload.new(io, 3)
132-
133124
dst = IO::Memory.new
134125
obj.to_io(dst)
135-
136126
obj.@data.should eq "foo".to_slice
127+
dst.to_slice.should eq "foo".to_slice
137128
end
138129
end
139130
end

0 commit comments

Comments
 (0)