123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /* global Blob, FileReader */
- import * as zip from "../../index.js";
- const KB = 1024;
- const ENTRIES_DATA = [
- { name: "entry #1", blob: getBlob(8.5 * KB) }, { name: "entry #2", blob: getBlob(5.2 * KB) }, { name: "entry #3", blob: getBlob(4.7 * KB) },
- { name: "entry #4", blob: getBlob(2.8 * KB) }, { name: "entry #5", blob: getBlob(1.9 * KB) }, { name: "entry #6", blob: getBlob(2.2 * KB) },
- { name: "entry #7", blob: getBlob(5.1 * KB) }, { name: "entry #8", blob: getBlob(2.6 * KB) }, { name: "entry #9", blob: getBlob(3.1 * KB) }];
- export { test };
- async function test() {
- zip.configure({ chunkSize: 128 });
- const blobWriter = new zip.BlobWriter("application/zip");
- const zipWriter = new zip.ZipWriter(blobWriter);
- await Promise.all(ENTRIES_DATA.map(entryData => zipWriter.add(entryData.name, new zip.BlobReader(entryData.blob), { keepOrder: false, bufferedWrite: true, level: Math.random() > .5 ? 5 : 0 })));
- await zipWriter.close();
- const zipReader = new zip.ZipReader(new zip.BlobReader(blobWriter.getData()));
- const entries = await zipReader.getEntries();
- const results = await Promise.all(entries.map(async (entry, indexEntry) => {
- const blob = await entry.getData(new zip.BlobWriter("application/octet-stream"));
- return compareResult(blob, indexEntry);
- }));
- zip.terminateWorkers();
- return !results.includes(false);
- }
- function compareResult(result, index) {
- return new Promise(resolve => {
- const fileReaderInput = new FileReader();
- const fileReaderOutput = new FileReader();
- let loadCount = 0;
- fileReaderInput.readAsArrayBuffer(ENTRIES_DATA[index].blob);
- fileReaderOutput.readAsArrayBuffer(result);
- fileReaderInput.onload = fileReaderOutput.onload = () => {
- loadCount++;
- if (loadCount == 2) {
- const valueInput = new Float64Array(fileReaderInput.result);
- const valueOutput = new Float64Array(fileReaderOutput.result);
- if (valueInput.length != valueOutput.length) {
- resolve(false);
- return;
- }
- for (let indexValue = 0, n = valueInput.length; indexValue < n; indexValue++) {
- if (valueInput[indexValue] != valueOutput[indexValue]) {
- resolve(false);
- return;
- }
- }
- resolve(true);
- }
- };
- });
- }
- function getBlob(size) {
- const data = new Float64Array(Math.floor(size / 8));
- for (let indexData = 0; indexData < data.length; indexData++) {
- data[indexData] = Math.random();
- }
- return new Blob([data]);
- }
|