tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

decompression-buffersource.tentative.any.js (2576B)


      1 // META: global=window,worker
      2 
      3 "use strict";
      4 
      5 // The zstd-compressed bytes for the string "expected output!!!!".
      6 // Note that four exclamation points are added to make the compressed data a multiple of 8 bytes,
      7 // which is a requirement to test with Float64Array.
      8 const compressedZstdBytes = [
      9  0x28, 0xb5, 0x2f, 0xfd, 0x04, 0x58, 0x99, 0x00, 0x00, 0x65, 0x78, 0x70, 0x65,
     10  0x63, 0x74, 0x65, 0x64, 0x20, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x21, 0x21,
     11  0x21, 0x21, 0x2e, 0x4f, 0xe5, 0x2b,
     12 ];
     13 
     14 const bufferSourceChunksForZstd = [
     15  {
     16    name: "ArrayBuffer",
     17    value: new Uint8Array(compressedZstdBytes).buffer,
     18  },
     19  {
     20    name: "Int8Array",
     21    value: new Int8Array(new Uint8Array(compressedZstdBytes).buffer),
     22  },
     23  {
     24    name: "Uint8Array",
     25    value: new Uint8Array(compressedZstdBytes),
     26  },
     27  {
     28    name: "Uint8ClampedArray",
     29    value: new Uint8ClampedArray(new Uint8Array(compressedZstdBytes).buffer),
     30  },
     31  {
     32    name: "Int16Array",
     33    value: new Int16Array(new Uint8Array(compressedZstdBytes).buffer),
     34  },
     35  {
     36    name: "Uint16Array",
     37    value: new Uint16Array(new Uint8Array(compressedZstdBytes).buffer),
     38  },
     39  {
     40    name: "Int32Array",
     41    value: new Int32Array(new Uint8Array(compressedZstdBytes).buffer),
     42  },
     43  {
     44    name: "Uint32Array",
     45    value: new Uint32Array(new Uint8Array(compressedZstdBytes).buffer),
     46  },
     47  {
     48    name: "Float16Array",
     49    value: new Float16Array(new Uint8Array(compressedZstdBytes).buffer),
     50  },
     51  {
     52    name: "Float32Array",
     53    value: new Float32Array(new Uint8Array(compressedZstdBytes).buffer),
     54  },
     55  {
     56    name: "Float64Array",
     57    value: new Float64Array(new Uint8Array(compressedZstdBytes).buffer),
     58  },
     59  {
     60    name: "DataView",
     61    value: new DataView(new Uint8Array(compressedZstdBytes).buffer),
     62  },
     63 ];
     64 
     65 for (const chunk of bufferSourceChunksForZstd) {
     66  promise_test(async t => {
     67    const ds = new DecompressionStream("zstd");
     68    const writer = ds.writable.getWriter();
     69    const reader = ds.readable.getReader();
     70 
     71    const writePromise = writer.write(chunk.value);
     72    const writerClosePromise = writer.close();
     73 
     74    const { value, done } = await reader.read();
     75 
     76    assert_false(done, "Stream should not be done after reading valid data");
     77 
     78    await writePromise;
     79    await writerClosePromise;
     80 
     81    const decompressedText = new TextDecoder().decode(value);
     82    assert_equals(
     83      decompressedText,
     84      "expected output!!!!",
     85      `The decompressed text should match the expected text when reading from ${chunk.name}`
     86    );
     87  }, `chunk of type ${chunk.name} should work for zstd decompression`);
     88 }