diff --git a/vlib/io/string_reader/string_reader.v b/vlib/io/string_reader/string_reader.v index a9fae873bddea2..7e0ecbc7354e60 100644 --- a/vlib/io/string_reader/string_reader.v +++ b/vlib/io/string_reader/string_reader.v @@ -52,7 +52,7 @@ pub fn (r StringReader) needs_fill() bool { // needs_fill_until returns whether the buffer needs refilling in order to read // `n` bytes pub fn (r StringReader) needs_fill_until(n int) bool { - return r.offset + n >= r.builder.len + return r.offset + n > r.builder.len } // fill_bufer tries to read data into the buffer until either a 0 length read or if read_to_end_of_stream diff --git a/vlib/io/string_reader/string_reader_test.v b/vlib/io/string_reader/string_reader_test.v index 6e6c2d9608f622..01928ea2041283 100644 --- a/vlib/io/string_reader/string_reader_test.v +++ b/vlib/io/string_reader/string_reader_test.v @@ -89,6 +89,20 @@ fn test_from_string() { } } +fn test_from_string_read_byte_one_by_one() { + mut reader := StringReader.new(source: 'test') + assert reader.read_bytes(1)![0].ascii_str() == 't' + assert reader.read_bytes(1)![0].ascii_str() == 'e' + assert reader.read_bytes(1)![0].ascii_str() == 's' + assert reader.read_bytes(1)![0].ascii_str() == 't' + + if _ := reader.read_all(false) { + assert false, 'should return Eof' + } else { + assert err is io.Eof + } +} + fn test_from_string_and_reader() { buf := Buf{ bytes: 'buffer'.bytes()