1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-27 16:10:57 -05:00
denoland-deno/std/node/_stream/promises_test.ts

84 lines
1.8 KiB
TypeScript

// 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",
);
});