1
1
require " ./spec_helper"
2
2
3
- class NonPositionIO < ::IO
3
+ class DummyIO < ::IO
4
4
def initialize (@data : Bytes )
5
5
end
6
6
@@ -31,60 +31,48 @@ describe MQTT::Protocol::Payload do
31
31
it " should return true for two BytePayload with same bytes" do
32
32
one = MQTT ::Protocol ::BytesPayload .new(" foo" .to_slice)
33
33
two = MQTT ::Protocol ::BytesPayload .new(" foo" .to_slice)
34
-
35
34
(one == two).should be_true
36
35
end
37
36
38
37
it " should return false for two BytePayload with different bytes" do
39
38
one = MQTT ::Protocol ::BytesPayload .new(" foo" .to_slice)
40
39
two = MQTT ::Protocol ::BytesPayload .new(" bar" .to_slice)
41
-
42
40
(one == two).should be_false
43
41
end
44
42
45
43
it " should return true for two IOPayload with same content" do
46
44
io_one = IO ::Memory .new(" foo" .to_slice)
47
45
io_two = IO ::Memory .new(" foo" .to_slice)
48
-
49
46
io_one.rewind
50
47
io_two.rewind
51
-
52
48
one = MQTT ::Protocol ::IOPayload .new(io_one, 3 )
53
49
two = MQTT ::Protocol ::IOPayload .new(io_two, 3 )
54
-
55
50
(one == two).should be_true
56
51
end
57
52
58
53
it " should return false for two IOPayload with different content" do
59
54
io_one = IO ::Memory .new(" foo" .to_slice)
60
55
io_two = IO ::Memory .new(" bar" .to_slice)
61
-
62
56
io_one.rewind
63
57
io_two.rewind
64
-
65
58
one = MQTT ::Protocol ::IOPayload .new(io_one, 3 )
66
59
two = MQTT ::Protocol ::IOPayload .new(io_two, 3 )
67
-
68
60
(one == two).should be_false
69
61
end
70
62
71
63
it " should return true for one BytesPayload and one IOPayload with same content" do
72
64
io_two = IO ::Memory .new(" foo" .to_slice)
73
65
io_two.rewind
74
-
75
66
one = MQTT ::Protocol ::BytesPayload .new(" foo" .to_slice)
76
67
two = MQTT ::Protocol ::IOPayload .new(io_two, 3 )
77
-
78
68
(one == two).should be_true
79
69
end
80
70
81
71
it " should return false for one BytesPayload and one IOPayload with different content" do
82
72
io_two = IO ::Memory .new(" bar" .to_slice)
83
73
io_two.rewind
84
-
85
74
one = MQTT ::Protocol ::BytesPayload .new(" foo" .to_slice)
86
75
two = MQTT ::Protocol ::IOPayload .new(io_two, 3 )
87
-
88
76
(one == two).should be_false
89
77
end
90
78
end
@@ -94,46 +82,49 @@ describe MQTT::Protocol::Payload do
94
82
it " should peek if possible" do
95
83
io = IO ::Memory .new(" foo" .to_slice)
96
84
io.rewind
97
-
98
85
obj = MQTT ::Protocol ::IOPayload .new(io, 3 )
99
- obj.to_slice
100
-
86
+ obj.to_slice.should eq " foo" .to_slice
101
87
obj.@data .should be_nil
102
88
end
103
89
104
90
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)
107
92
obj = MQTT ::Protocol ::IOPayload .new(io, 3 )
108
- obj.to_slice
109
-
93
+ obj.to_slice.should eq " foo" .to_slice
110
94
obj.@data .should eq " foo" .to_slice
111
95
end
112
96
end
113
97
114
98
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
118
111
112
+ it " should not copy data if io is Memory" do
113
+ io = ::IO ::Memory .new(" foo" .to_slice)
119
114
obj = MQTT ::Protocol ::IOPayload .new(io, 3 )
120
-
121
115
dst = IO ::Memory .new
122
116
obj.to_io(dst)
123
-
124
117
obj.@data .should be_nil
125
- obj. @io .pos. should eq 0
118
+ dst.to_slice. should eq " foo " .to_slice
126
119
end
127
120
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)
131
123
obj = MQTT ::Protocol ::IOPayload .new(io, 3 )
132
-
133
124
dst = IO ::Memory .new
134
125
obj.to_io(dst)
135
-
136
126
obj.@data .should eq " foo" .to_slice
127
+ dst.to_slice.should eq " foo" .to_slice
137
128
end
138
129
end
139
130
end
0 commit comments