deno.land / std@0.166.0 / node / internal / fs / streams_test.ts
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
// @deno-types="./streams.d.ts"import { createReadStream, createWriteStream, ReadStream, WriteStream,} from "./streams.mjs";import { assertEquals } from "../../../testing/asserts.ts";import { Buffer } from "../../buffer.ts";import * as path from "../../path/mod.ts";
const moduleDir = path.dirname(path.fromFileUrl(import.meta.url));const testData = path.resolve(moduleDir, "testdata", "hello.txt");
// Need to wait for file processing to complete within each test to prevent false negatives.async function waiter( stream: ReadStream | WriteStream, interval = 100, maxCount = 50,) { for (let i = maxCount; i > 0; i--) { await new Promise((resolve) => setTimeout(resolve, interval)); if (stream.destroyed) return true; } return false;}
Deno.test({ name: "[node/fs.ReadStream] Read a chunk of data using 'new ReadStream()'", async fn() { // deno-lint-ignore ban-ts-comment // @ts-ignore const readable = new ReadStream(testData);
let data: Uint8Array; readable.on("data", (chunk: Uint8Array) => { data = chunk; });
readable.on("close", () => { assertEquals(new TextDecoder().decode(data as Uint8Array), "hello world"); });
assertEquals(await waiter(readable), true); },});
Deno.test({ name: "[node/fs.createReadStream] Read a chunk of data using 'new createReadStream()'", async fn() { // deno-lint-ignore ban-ts-comment // @ts-ignore const readable = new createReadStream(testData);
let data: Uint8Array; readable.on("data", (chunk: Uint8Array) => { data = chunk; });
readable.on("close", () => { assertEquals(new TextDecoder().decode(data as Uint8Array), "hello world"); });
assertEquals(await waiter(readable), true); },});
Deno.test({ name: "[node/fs.createReadStream] Read given amount of data", async fn() { const readable = createReadStream(testData);
const data: (Uint8Array | null)[] = []; readable.on("readable", function () { data.push(readable.read(5)); data.push(readable.read()); });
readable.on("close", () => { assertEquals(new TextDecoder().decode(data[0] as Uint8Array), "hello"); assertEquals(new TextDecoder().decode(data[1] as Uint8Array), " world"); assertEquals(data[2], null); });
assertEquals(await waiter(readable), true); },});
Deno.test({ name: "[node/fs.createReadStream] Handling of read position", async fn() { const readable = createReadStream(testData, { highWaterMark: 3, start: 1, end: 9, });
const data: (Uint8Array | null)[] = []; readable.on("readable", function () { data.push(readable.read(4)); data.push(readable.read(1)); });
readable.on("close", () => { assertEquals(data[0], null); assertEquals(new TextDecoder().decode(data[1] as Uint8Array), "e"); assertEquals(new TextDecoder().decode(data[2] as Uint8Array), "llo "); assertEquals(new TextDecoder().decode(data[3] as Uint8Array), "w"); assertEquals(new TextDecoder().decode(data[4] as Uint8Array), "orl"); assertEquals(data[5], null); });
assertEquals(await waiter(readable), true); },});
Deno.test({ name: "[node/fs.createReadStream] Specify the path as a Buffer", async fn() { const readable = createReadStream(Buffer.from(testData));
let data: Uint8Array; readable.on("data", (chunk: Uint8Array) => { data = chunk; });
readable.on("close", () => { assertEquals(new TextDecoder().decode(data as Uint8Array), "hello world"); });
assertEquals(await waiter(readable), true); },});
Deno.test({ name: "[node/fs.createReadStream] Destroy the stream with an error", async fn() { const readable = createReadStream(testData);
const data: (Uint8Array | null)[] = []; readable.on("readable", function () { data.push(readable.read(5)); readable.destroy(Error("destroy has been called.")); });
readable.on("close", () => { assertEquals(new TextDecoder().decode(data[0] as Uint8Array), "hello"); assertEquals(data.length, 1); });
readable.on("error", (err: Error) => { assertEquals(err.name, "Error"); assertEquals(err.message, "destroy has been called."); });
assertEquals(await waiter(readable), true); },});
Deno.test({ name: "[node/fs.WriteStream] Write data using 'WriteStream()'", async fn() { const tempFile: string = Deno.makeTempFileSync(); // deno-lint-ignore ban-ts-comment // @ts-ignore const writable = WriteStream(tempFile);
writable.write("hello world"); writable.end("\n");
writable.on("close", () => { const data = Deno.readFileSync(tempFile); Deno.removeSync(tempFile); assertEquals(new TextDecoder("utf-8").decode(data), "hello world\n"); });
assertEquals(await waiter(writable), true); },});
Deno.test({ name: "[node/fs.WriteStream] Write data using 'new WriteStream()'", async fn() { const tempFile: string = Deno.makeTempFileSync(); // deno-lint-ignore ban-ts-comment // @ts-ignore const writable = new WriteStream(tempFile);
writable.write("hello world"); writable.end("\n");
writable.on("close", () => { const data = Deno.readFileSync(tempFile); Deno.removeSync(tempFile); assertEquals(new TextDecoder("utf-8").decode(data), "hello world\n"); });
assertEquals(await waiter(writable), true); },});
Deno.test({ name: "[node/fs.createWriteStream] Write data using 'new createWriteStream()'", async fn() { const tempFile: string = Deno.makeTempFileSync(); // deno-lint-ignore ban-ts-comment // @ts-ignore const writable = new createWriteStream(tempFile);
writable.write("hello world"); writable.end("\n");
writable.on("close", () => { const data = Deno.readFileSync(tempFile); Deno.removeSync(tempFile); assertEquals(new TextDecoder("utf-8").decode(data), "hello world\n"); });
assertEquals(await waiter(writable), true); },});
Deno.test({ name: "[node/fs.createWriteStream] Specify the path as a Buffer", async fn() { const tempFile: string = Deno.makeTempFileSync(); const writable = createWriteStream(Buffer.from(tempFile));
writable.write("hello world"); writable.end("\n");
writable.on("close", () => { const data = Deno.readFileSync(tempFile); Deno.removeSync(tempFile); assertEquals(new TextDecoder("utf-8").decode(data), "hello world\n"); });
assertEquals(await waiter(writable), true); },});
Deno.test({ name: "[node/fs.createWriteStream] Destroy the stream with an error", async fn() { const tempFile: string = Deno.makeTempFileSync(); const writable = createWriteStream(tempFile);
writable.write("hello world"); writable.destroy(Error("destroy has been called."));
writable.on("close", () => { const data = Deno.readFileSync(tempFile); Deno.removeSync(tempFile); assertEquals(new TextDecoder("utf-8").decode(data), ""); });
writable.on("error", (err: Error) => { assertEquals(err.name, "Error"); assertEquals(err.message, "destroy has been called."); });
assertEquals(await waiter(writable), true); },});
Version Info