1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-23 07:44:48 -05:00

fix(std/bufio): Remove '\r' at the end of Windows lines (#8447)

Co-authored-by: Nayeem Rahman <nayeemrmn99@gmail.com>
This commit is contained in:
Iván Canales 2020-12-05 17:41:16 +01:00 committed by GitHub
parent 2d5c742cf6
commit c10280214e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 1 deletions

View file

@ -706,5 +706,13 @@ export async function* readStringDelim(
export async function* readLines(
reader: Reader,
): AsyncIterableIterator<string> {
yield* readStringDelim(reader, "\n");
for await (let chunk of readStringDelim(reader, "\n")) {
// Finding a CR at the end of the line is evidence of a
// "\r\n" at the end of the line. The "\r" part should be
// removed too.
if (chunk.endsWith("\r")) {
chunk = chunk.slice(0, -1);
}
yield chunk;
}
}

View file

@ -436,6 +436,10 @@ Deno.test("readStringDelimAndLines", async function (): Promise<void> {
assertEquals(chunks_, ["Hello World", "Hello World 2", "Hello World 3"]);
const linesData = new Deno.Buffer(enc.encode("0\n1\n2\n3\n4\n5\n6\n7\n8\n9"));
// consider data with windows newlines too
const linesDataWindows = new Deno.Buffer(
enc.encode("0\r\n1\r\n2\r\n3\r\n4\r\n5\r\n6\r\n7\r\n8\r\n9"),
);
const lines_ = [];
for await (const l of readLines(linesData)) {
@ -444,6 +448,14 @@ Deno.test("readStringDelimAndLines", async function (): Promise<void> {
assertEquals(lines_.length, 10);
assertEquals(lines_, ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]);
// Now test for "windows" lines
lines_.length = 0;
for await (const l of readLines(linesDataWindows)) {
lines_.push(l);
}
assertEquals(lines_.length, 10);
assertEquals(lines_, ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]);
});
Deno.test(