Skip to content

Commit f24d492

Browse files
authored
io.string_reader: fix read_line(), add tests (#25704)
1 parent 5c1662d commit f24d492

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

vlib/io/string_reader/string_reader.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ pub fn (mut r StringReader) read_line(config io.BufferedReadLineConfig) !string
225225
// great, we hit something
226226
// do some checking for whether we hit \r\n or just \n
227227
mut x := i
228-
if i != 0 && config.delim == `\n` && r.builder[i - 1] == `\r` {
228+
if i > start && config.delim == `\n` && r.builder[i - 1] == `\r` {
229229
x--
230230
}
231231
r.offset = i + 1

vlib/io/string_reader/string_reader_test.v

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,3 +308,70 @@ fn test_read_many() {
308308
assert res == -1
309309
assert o4 == [u8(53), 50, 51, 52]
310310
}
311+
312+
fn test_read_line_2() {
313+
mut two := TwoByteReader{
314+
data: '12345\n67890'
315+
}
316+
mut reader := StringReader.new(reader: two)
317+
assert reader.read_line()! == '12345'
318+
assert reader.read_line()! == '67890'
319+
}
320+
321+
fn test_read_line_3() {
322+
mut two := TwoByteReader{
323+
data: '12345\t67890'
324+
}
325+
mut reader := StringReader.new(reader: two)
326+
assert reader.read_line(delim: `\t`)! == '12345'
327+
assert reader.read_line()! == '67890'
328+
}
329+
330+
fn test_read_line_4() {
331+
mut two := TwoByteReader{
332+
data: '12345\t67890'
333+
}
334+
mut reader := StringReader.new(reader: two)
335+
assert reader.read_line(delim: `\t`)! == '12345'
336+
assert reader.read_line(delim: `\t`)! == '67890'
337+
}
338+
339+
fn test_read_line_5() {
340+
mut two := TwoByteReader{
341+
data: '\n12345\n67890'
342+
}
343+
mut reader := StringReader.new(reader: two)
344+
assert reader.read_line()! == ''
345+
assert reader.read_line()! == '12345'
346+
assert reader.read_line()! == '67890'
347+
}
348+
349+
fn test_read_line_6() {
350+
mut two := TwoByteReader{
351+
data: '\r\n12345\r\n67890'
352+
}
353+
mut reader := StringReader.new(reader: two)
354+
assert reader.read_line()! == ''
355+
assert reader.read_line()! == '12345'
356+
assert reader.read_line()! == '67890'
357+
}
358+
359+
fn test_read_line_7() {
360+
mut two := TwoByteReader{
361+
data: '1234567890'
362+
}
363+
mut reader := StringReader.new(reader: two)
364+
assert reader.read_line(delim: `6`)! == '12345'
365+
assert reader.read_line(delim: `6`)! == '7890'
366+
assert reader.read_line() or { '777' } == '777'
367+
}
368+
369+
fn test_read_line_8() {
370+
mut two := TwoByteReader{
371+
data: '12345\r\n67890'
372+
}
373+
mut reader := StringReader.new(reader: two)
374+
assert reader.read_bytes(6)! == [u8(49), 50, 51, 52, 53, 13]
375+
reader.read_line()! // \n
376+
assert reader.read_line()! == '67890'
377+
}

0 commit comments

Comments
 (0)