deno.land / std@0.224.0 / streams / writable_stream_from_writer_test.ts
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
import { assertEquals } from "../assert/mod.ts";import { writableStreamFromWriter } from "./writable_stream_from_writer.ts";import type { Closer, Writer } from "../io/types.ts";
class MockWriterCloser implements Writer, Closer { chunks: Uint8Array[] = []; closeCall = 0;
write(p: Uint8Array): Promise<number> { if (this.closeCall) { throw new Error("already closed"); } if (p.length) { this.chunks.push(p); } return Promise.resolve(p.length); }
close() { this.closeCall++; }}
Deno.test("writableStreamFromWriter()", async function () { const written: string[] = []; const chunks: string[] = ["hello", "deno", "land"]; const decoder = new TextDecoder();
// deno-lint-ignore require-await async function write(p: Uint8Array): Promise<number> { written.push(decoder.decode(p)); return p.length; }
const writableStream = writableStreamFromWriter({ write });
const encoder = new TextEncoder(); const streamWriter = writableStream.getWriter(); for (const chunk of chunks) { await streamWriter.write(encoder.encode(chunk)); }
assertEquals(written, chunks);});
Deno.test("writableStreamFromWriter() calls close on close", async function () { const written: string[] = []; const chunks: string[] = ["hello", "deno", "land"]; const decoder = new TextDecoder();
const writer = new MockWriterCloser(); const writableStream = writableStreamFromWriter(writer);
const encoder = new TextEncoder(); const streamWriter = writableStream.getWriter(); for (const chunk of chunks) { await streamWriter.write(encoder.encode(chunk)); } await streamWriter.close();
for (const chunk of writer.chunks) { written.push(decoder.decode(chunk)); }
assertEquals(written, chunks); assertEquals(writer.closeCall, 1);});
Deno.test("writableStreamFromWriter() calls close on abort", async function () { const written: string[] = []; const chunks: string[] = ["hello", "deno", "land"]; const decoder = new TextDecoder();
const writer = new MockWriterCloser(); const writableStream = writableStreamFromWriter(writer);
const encoder = new TextEncoder(); const streamWriter = writableStream.getWriter(); for (const chunk of chunks) { await streamWriter.write(encoder.encode(chunk)); } await streamWriter.abort();
for (const chunk of writer.chunks) { written.push(decoder.decode(chunk)); }
assertEquals(written, chunks); assertEquals(writer.closeCall, 1);});
Deno.test("writableStreamFromWriter() doesn't call close with autoClose false", async function () { const written: string[] = []; const chunks: string[] = ["hello", "deno", "land"]; const decoder = new TextDecoder();
const writer = new MockWriterCloser(); const writableStream = writableStreamFromWriter(writer, { autoClose: false });
const encoder = new TextEncoder(); const streamWriter = writableStream.getWriter(); for (const chunk of chunks) { await streamWriter.write(encoder.encode(chunk)); } await streamWriter.close();
for (const chunk of writer.chunks) { written.push(decoder.decode(chunk)); }
assertEquals(written, chunks); assertEquals(writer.closeCall, 0);});
Version Info