diff options
-rw-r--r-- | io/bufio.ts | 7 | ||||
-rw-r--r-- | io/bufio_test.ts | 17 |
2 files changed, 22 insertions, 2 deletions
diff --git a/io/bufio.ts b/io/bufio.ts index 9a7bf1dc1..c158e5051 100644 --- a/io/bufio.ts +++ b/io/bufio.ts @@ -211,8 +211,11 @@ export class BufReader implements Reader { * delim. * For simple uses, a Scanner may be more convenient. */ - async readString(_delim: string): Promise<string | Deno.EOF> { - throw new Error("Not implemented"); + async readString(delim: string): Promise<string | Deno.EOF> { + if (delim.length !== 1) + throw new Error("Delimiter should be a single character"); + const buffer = await this.readSlice(delim.charCodeAt(0)); + return new TextDecoder().decode(buffer || undefined); } /** `readLine()` is a low-level line-reading primitive. Most callers should diff --git a/io/bufio_test.ts b/io/bufio_test.ts index 6f50e2876..9d1ffc307 100644 --- a/io/bufio_test.ts +++ b/io/bufio_test.ts @@ -160,6 +160,23 @@ test(async function bufioBufferFull(): Promise<void> { assertEquals(actual, "world!"); }); +test(async function bufioReadString(): Promise<void> { + const string = "And now, hello, world!"; + const buf = new BufReader(stringsReader(string), MIN_READ_BUFFER_SIZE); + + const line = assertNotEOF(await buf.readString(",")); + assertEquals(line, "And now,"); + assertEquals(line.length, 8); + + try { + await buf.readString("deno"); + + fail("should throw"); + } catch (err) { + assert(err.message, "Delimiter should be a single character"); + } +}); + const testInput = encoder.encode( "012\n345\n678\n9ab\ncde\nfgh\nijk\nlmn\nopq\nrst\nuvw\nxy" ); |