Skip to main content
Module

std/node/_stream/promises_test.ts

Deno standard library
Go to Latest
File
// Copyright Node.js contributors. All rights reserved. MIT License.import { Buffer } from "../buffer.ts";import Readable from "./readable.ts";import Writable from "./writable.ts";import { pipeline } from "./promises.ts";import { deferred } from "../../async/mod.ts";import { assert, assertEquals, assertThrowsAsync,} from "../../testing/asserts.ts";
Deno.test("Promise pipeline works correctly", async () => { let pipelineExecuted = 0; const pipelineExecutedExpected = 1; const pipelineExpectedExecutions = deferred();
let finished = false; // deno-lint-ignore no-explicit-any const processed: any[] = []; const expected = [ Buffer.from("a"), Buffer.from("b"), Buffer.from("c"), ];
const read = new Readable({ read() {}, });
const write = new Writable({ write(data, _enc, cb) { processed.push(data); cb(); }, });
write.on("finish", () => { finished = true; });
for (let i = 0; i < expected.length; i++) { read.push(expected[i]); } read.push(null);
pipeline(read, write).then(() => { pipelineExecuted++; if (pipelineExecuted == pipelineExecutedExpected) { pipelineExpectedExecutions.resolve(); } assert(finished); assertEquals(processed, expected); });
const pipelineTimeout = setTimeout( () => pipelineExpectedExecutions.reject(), 1000, ); await pipelineExpectedExecutions; clearTimeout(pipelineTimeout); assertEquals(pipelineExecuted, pipelineExecutedExpected);});
Deno.test("Promise pipeline throws on readable destroyed", async () => { const read = new Readable({ read() {}, });
const write = new Writable({ write(_data, _enc, cb) { cb(); }, });
read.push("data"); read.destroy();
await assertThrowsAsync( () => pipeline(read, write), Error, "Premature close", );});