| 'use strict'; |
| require('../common'); |
| const assert = require('assert'); |
| const test = require('node:test'); |
| const { DecompressionStream, CompressionStream } = require('stream/web'); |
| |
| // Minimal gzip-compressed bytes for "hello" |
| const compressedGzip = new Uint8Array([ |
| 31, 139, 8, 0, 0, 0, 0, 0, 0, 3, |
| 203, 72, 205, 201, 201, 7, 0, 134, 166, 16, 54, 5, 0, 0, 0, |
| ]); |
| |
| test('DecompressionStream accepts ArrayBuffer chunks', async () => { |
| const ds = new DecompressionStream('gzip'); |
| const writer = ds.writable.getWriter(); |
| |
| const writePromise = writer.write(compressedGzip.buffer); |
| writer.close(); |
| |
| const chunks = await Array.fromAsync(ds.readable); |
| await writePromise; |
| const out = Buffer.concat(chunks.map((c) => Buffer.from(c))); |
| assert.strictEqual(out.toString(), 'hello'); |
| }); |
| |
| test('CompressionStream round-trip with ArrayBuffer input', async () => { |
| const cs = new CompressionStream('gzip'); |
| const ds = new DecompressionStream('gzip'); |
| |
| const csWriter = cs.writable.getWriter(); |
| |
| const input = new TextEncoder().encode('hello').buffer; |
| |
| await csWriter.write(input); |
| csWriter.close(); |
| |
| await cs.readable.pipeTo(ds.writable); |
| |
| const out = await Array.fromAsync(ds.readable); |
| const result = Buffer.concat(out.map((c) => Buffer.from(c))); |
| assert.strictEqual(result.toString(), 'hello'); |
| }); |