at trunk 1.5 kB view raw
1import { assertEquals } from '@std/assert'; 2 3import { MaybeDecompressionStream } from './mod.ts'; 4 5Deno.test({ 6 name: 'decompresses a gzip stream', 7 async fn() { 8 const { readable, writable } = new MaybeDecompressionStream(); 9 10 { 11 const writer = writable.getWriter(); 12 13 // deno-fmt-ignore 14 writer.write( 15 Uint8Array.from([ 16 31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 242, 72, 205, 201, 201, 215, 81, 17 40, 207, 47, 202, 73, 81, 4, 0, 0, 0, 255, 255, 3, 0, 230, 198, 230, 18 235, 13, 0, 0, 0, 19 ]), 20 ); 21 22 writer.close(); 23 } 24 25 { 26 const result = await toUint8Array(readable); 27 const decoded = new TextDecoder().decode(result); 28 29 assertEquals(decoded, 'Hello, world!'); 30 } 31 }, 32}); 33 34Deno.test({ 35 name: 'passthroughs a non-gzip stream', 36 async fn() { 37 const { readable, writable } = new MaybeDecompressionStream(); 38 39 const input = Uint8Array.from([1, 2, 3, 4, 5]); 40 41 { 42 const writer = writable.getWriter(); 43 writer.write(input); 44 writer.close(); 45 } 46 47 { 48 const result = await toUint8Array(readable); 49 assertEquals(result, input); 50 } 51 }, 52}); 53 54async function toUint8Array(source: AsyncIterable<Uint8Array>): Promise<Uint8Array> { 55 let buffer: Uint8Array | undefined; 56 57 for await (const value of source) { 58 if (buffer === undefined) { 59 buffer = value; 60 } else { 61 const concat = new Uint8Array(buffer.length + value.length); 62 concat.set(buffer); 63 concat.set(value, buffer.length); 64 buffer = concat; 65 } 66 } 67 68 return buffer ?? new Uint8Array(0); 69}