UNPKG

chrome-devtools-frontend

Version:
79 lines (65 loc) 3.05 kB
// Copyright 2020 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import * as Common from '../../core/common/common.js'; import * as Bindings from './bindings.js'; const ChunkedFileReader = Bindings.FileUtils.ChunkedFileReader; const StringOutputStream = Common.StringOutputStream.StringOutputStream; interface CompressionStream extends GenericTransformStream { readonly format: string; } declare const CompressionStream: { prototype: CompressionStream, new (format: string): CompressionStream, }; describe('FileUtils', () => { describe('ChunkedFileReader', () => { it('re-assembles chunks including multibyte characters', async () => { const text = [ 'Латынь из моды вышла ныне:\n', 'Так, если правду вам сказать,\n', 'Он знал довольно по-латыне,\n', 'Чтоб эпиграфы разбирать\n', ]; const blob = new Blob(text, {type: 'text/plain'}); // Most of the characters above will be encoded as 2 bytes, so make sure we use odd // chunk size to cause chunk boundaries sometimes to happen between chaacter bytes. const chunkSize = 5; let chunkCount = 0; const reader = new ChunkedFileReader(new File([blob], 'ru.txt'), chunkSize, () => ++chunkCount); const output = new StringOutputStream(); const hasNoError = await reader.read(output); assert.isTrue(hasNoError); assert.strictEqual(chunkCount, 41); assert.strictEqual(text.join(''), output.data(), 'Read text is different from written text'); }); it('can decompress gzipped data', async () => { async function getAsCompressedFile(text: string) { const blob = new Blob([text], {type: 'text/plain'}); // https://github.com/wicg/compression/blob/main/explainer.md#deflate-compress-an-arraybuffer const cstream = blob.stream().pipeThrough(new CompressionStream('gzip')); const creader = cstream.getReader(); const values: string[] = []; while (true) { const {value, done} = await creader.read(); if (done) { break; } values.push(value); } const cblob = new Blob(values, {type: 'application/gzip'}); return cblob; } const expectedText = 'This text will get compressed and then decompressed!'; const cblob = await getAsCompressedFile(expectedText); let chunkCount = 0; const chunkSize = 5; const output = new StringOutputStream(); const compressedFile = new File([cblob], 'ru.txt.gz', {type: 'application/gzip'}); const cfreader = new ChunkedFileReader(compressedFile, chunkSize, () => ++chunkCount); const hasNoError = await cfreader.read(output); assert.isTrue(hasNoError); assert.strictEqual(expectedText, output.data(), 'Read text is different from written text'); }); }); });