Skip to content

Commit e502877

Browse files
authored
io.string_reader: fix read(), add tests (#25692)
1 parent 5e52f2e commit e502877

File tree

2 files changed

+107
-3
lines changed

2 files changed

+107
-3
lines changed

vlib/io/string_reader/string_reader.v

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,11 +190,11 @@ pub fn (mut r StringReader) read_string(n int) !string {
190190
pub fn (mut r StringReader) read(mut buf []u8) !int {
191191
start := r.offset
192192

193-
read := r.fill_buffer_until(buf.len - start)!
193+
read := r.fill_buffer_until(buf.len)!
194194
r.offset += read
195195

196-
copy(mut buf, r.builder[start..read])
197-
return r.builder.len - start
196+
copy(mut buf, r.builder[start..start + read])
197+
return read
198198
}
199199

200200
// read_line attempts to read a line from the reader.

vlib/io/string_reader/string_reader_test.v

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,3 +204,107 @@ fn test_fill_buffer_until_many() {
204204
assert reader.builder.len == 5
205205
assert reader.get_string() == '12345'
206206
}
207+
208+
fn test_read_all_bytes_false() {
209+
mut two := TwoByteReader{
210+
data: '12345'
211+
}
212+
mut reader := StringReader.new(reader: two)
213+
assert reader.read_all_bytes(false)! == [u8(49), 50]
214+
assert reader.read_all_bytes(false)! == [u8(51), 52]
215+
assert reader.read_all_bytes(false)! == [u8(53)]
216+
}
217+
218+
fn test_read_all_bytes_true() {
219+
mut two := TwoByteReader{
220+
data: '12345'
221+
}
222+
mut reader := StringReader.new(reader: two)
223+
assert reader.read_all_bytes(false)! == [u8(49), 50]
224+
assert reader.read_all_bytes(true)! == [u8(51), 52, 53]
225+
}
226+
227+
fn test_read_all_false() {
228+
mut two := TwoByteReader{
229+
data: '12345'
230+
}
231+
mut reader := StringReader.new(reader: two)
232+
assert reader.read_all(false)! == '12'
233+
assert reader.read_all(false)! == '34'
234+
assert reader.read_all(false)! == '5'
235+
}
236+
237+
fn test_read_all_true() {
238+
mut two := TwoByteReader{
239+
data: '12345'
240+
}
241+
mut reader := StringReader.new(reader: two)
242+
assert reader.read_all(false)! == '12'
243+
assert reader.read_all(true)! == '345'
244+
}
245+
246+
fn test_read_bytes_1() {
247+
mut two := TwoByteReader{
248+
data: '12345'
249+
}
250+
mut reader := StringReader.new(reader: two)
251+
assert reader.read_bytes(1)! == [u8(49)]
252+
assert reader.read_bytes(2)! == [u8(50), 51]
253+
assert reader.read_bytes(2)! == [u8(52), 53]
254+
assert reader.read_bytes(2) or { [u8(255)] } == [u8(255)]
255+
}
256+
257+
fn test_read_bytes_many() {
258+
mut two := TwoByteReader{
259+
data: '12345'
260+
}
261+
mut reader := StringReader.new(reader: two)
262+
assert reader.read_bytes(1)! == [u8(49)]
263+
assert reader.builder.len == 1
264+
assert reader.offset == 1
265+
assert reader.read_bytes(123)! == [u8(50), 51, 52, 53]
266+
assert reader.builder.len == 5
267+
assert reader.offset == 5
268+
}
269+
270+
fn test_read_string() {
271+
mut two := TwoByteReader{
272+
data: '12345'
273+
}
274+
mut reader := StringReader.new(reader: two)
275+
assert reader.read_string(1)! == '1'
276+
assert reader.read_string(2)! == '23'
277+
assert reader.read_string(3)! == '45'
278+
}
279+
280+
fn test_read() {
281+
mut two := TwoByteReader{
282+
data: '12345'
283+
}
284+
mut reader := StringReader.new(reader: two)
285+
mut o1 := []u8{len: 1}
286+
mut o5 := []u8{len: 5}
287+
mut res := reader.read(mut o1)!
288+
assert res == 1
289+
assert o1[..res] == [u8(49)]
290+
res = reader.read(mut o5)!
291+
assert res == 4
292+
assert o5[..res] == [u8(50), 51, 52, 53]
293+
}
294+
295+
fn test_read_many() {
296+
mut two := TwoByteReader{
297+
data: '12345'
298+
}
299+
mut reader := StringReader.new(reader: two)
300+
mut o4 := []u8{len: 4}
301+
mut res := reader.read(mut o4)!
302+
assert res == 4
303+
assert o4[..res] == [u8(49), 50, 51, 52]
304+
res = reader.read(mut o4)!
305+
assert res == 1
306+
assert o4[..res] == [u8(53)]
307+
res = reader.read(mut o4) or { -1 }
308+
assert res == -1
309+
assert o4 == [u8(53), 50, 51, 52]
310+
}

0 commit comments

Comments
 (0)