Skip to content

Commit

Permalink
Update specs
Browse files Browse the repository at this point in the history
  • Loading branch information
spuun committed Oct 24, 2024
1 parent 0ef9c34 commit 4b86ea3
Showing 1 changed file with 22 additions and 31 deletions.
53 changes: 22 additions & 31 deletions spec/payload_spec.cr
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
require "./spec_helper"

class NonPositionIO < ::IO
class DummyIO < ::IO
def initialize(@data : Bytes)
end

Expand Down Expand Up @@ -31,60 +31,48 @@ describe MQTT::Protocol::Payload do
it "should return true for two BytePayload with same bytes" do
one = MQTT::Protocol::BytesPayload.new("foo".to_slice)
two = MQTT::Protocol::BytesPayload.new("foo".to_slice)

(one == two).should be_true
end

it "should return false for two BytePayload with different bytes" do
one = MQTT::Protocol::BytesPayload.new("foo".to_slice)
two = MQTT::Protocol::BytesPayload.new("bar".to_slice)

(one == two).should be_false
end

it "should return true for two IOPayload with same content" do
io_one = IO::Memory.new("foo".to_slice)
io_two = IO::Memory.new("foo".to_slice)

io_one.rewind
io_two.rewind

one = MQTT::Protocol::IOPayload.new(io_one, 3)
two = MQTT::Protocol::IOPayload.new(io_two, 3)

(one == two).should be_true
end

it "should return false for two IOPayload with different content" do
io_one = IO::Memory.new("foo".to_slice)
io_two = IO::Memory.new("bar".to_slice)

io_one.rewind
io_two.rewind

one = MQTT::Protocol::IOPayload.new(io_one, 3)
two = MQTT::Protocol::IOPayload.new(io_two, 3)

(one == two).should be_false
end

it "should return true for one BytesPayload and one IOPayload with same content" do
io_two = IO::Memory.new("foo".to_slice)
io_two.rewind

one = MQTT::Protocol::BytesPayload.new("foo".to_slice)
two = MQTT::Protocol::IOPayload.new(io_two, 3)

(one == two).should be_true
end

it "should return false for one BytesPayload and one IOPayload with different content" do
io_two = IO::Memory.new("bar".to_slice)
io_two.rewind

one = MQTT::Protocol::BytesPayload.new("foo".to_slice)
two = MQTT::Protocol::IOPayload.new(io_two, 3)

(one == two).should be_false
end
end
Expand All @@ -94,46 +82,49 @@ describe MQTT::Protocol::Payload do
it "should peek if possible" do
io = IO::Memory.new("foo".to_slice)
io.rewind

obj = MQTT::Protocol::IOPayload.new(io, 3)
obj.to_slice

obj.to_slice.should eq "foo".to_slice
obj.@data.should be_nil
end

it "should copy data if peek isn't possible" do
io = NonPositionIO.new("foo".to_slice)

io = DummyIO.new("foo".to_slice)
obj = MQTT::Protocol::IOPayload.new(io, 3)
obj.to_slice

obj.to_slice.should eq "foo".to_slice
obj.@data.should eq "foo".to_slice
end
end

describe "#to_io" do
it "should not affect position if io support pos/pos=" do
io = IO::Memory.new("foo".to_slice)
io.rewind
it "should not affect position if io is FileDescriptor" do
File.open(File.tempfile.path, "w+") do |io|
io.write "foo".to_slice
io.rewind
obj = MQTT::Protocol::IOPayload.new(io, 3)
dst = IO::Memory.new
obj.to_io(dst)
obj.@data.should be_nil
obj.@io.pos.should eq 0
dst.to_slice.should eq "foo".to_slice
end
end

it "should not copy data if io is Memory" do
io = ::IO::Memory.new("foo".to_slice)
obj = MQTT::Protocol::IOPayload.new(io, 3)

dst = IO::Memory.new
obj.to_io(dst)

obj.@data.should be_nil
obj.@io.pos.should eq 0
dst.to_slice.should eq "foo".to_slice
end

it "should copy data if io doesn't support pos/pos=" do
io = NonPositionIO.new("foo".to_slice)

it "should copy data if io is other than Memory or FileDescriptor" do
io = DummyIO.new("foo".to_slice)
obj = MQTT::Protocol::IOPayload.new(io, 3)

dst = IO::Memory.new
obj.to_io(dst)

obj.@data.should eq "foo".to_slice
dst.to_slice.should eq "foo".to_slice
end
end
end
Expand Down

0 comments on commit 4b86ea3

Please sign in to comment.