compression-multiple-chunks.any.js (1982B)
1 // META: global=window,worker,shadowrealm 2 // META: script=third_party/pako/pako_inflate.min.js 3 // META: script=resources/decompress.js 4 // META: script=resources/formats.js 5 // META: timeout=long 6 7 'use strict'; 8 9 // This test asserts that compressing multiple chunks should work. 10 11 // Example: ('Hello', 3) => TextEncoder().encode('HelloHelloHello') 12 function makeExpectedChunk(input, numberOfChunks) { 13 const expectedChunk = input.repeat(numberOfChunks); 14 return new TextEncoder().encode(expectedChunk); 15 } 16 17 // Example: ('Hello', 3, 'deflate') => compress ['Hello', 'Hello', Hello'] 18 async function compressMultipleChunks(input, numberOfChunks, format) { 19 const cs = new CompressionStream(format); 20 const writer = cs.writable.getWriter(); 21 const chunk = new TextEncoder().encode(input); 22 for (let i = 0; i < numberOfChunks; ++i) { 23 writer.write(chunk); 24 } 25 const closePromise = writer.close(); 26 const out = []; 27 const reader = cs.readable.getReader(); 28 let totalSize = 0; 29 while (true) { 30 const { value, done } = await reader.read(); 31 if (done) 32 break; 33 out.push(value); 34 totalSize += value.byteLength; 35 } 36 await closePromise; 37 const concatenated = new Uint8Array(totalSize); 38 let offset = 0; 39 for (const array of out) { 40 concatenated.set(array, offset); 41 offset += array.byteLength; 42 } 43 return concatenated; 44 } 45 46 const hello = 'Hello'; 47 48 for (const format of formats) { 49 for (let numberOfChunks = 2; numberOfChunks <= 16; ++numberOfChunks) { 50 promise_test(async t => { 51 const compressedData = await compressMultipleChunks(hello, numberOfChunks, format); 52 const decompressedData = await decompressDataOrPako(compressedData, format); 53 const expectedValue = makeExpectedChunk(hello, numberOfChunks); 54 // check that we got the same result as our original string 55 assert_array_equals(decompressedData, expectedValue, 'value should match'); 56 }, `compressing ${numberOfChunks} chunks with ${format} should work`); 57 } 58 }