1
0
Fork 0
mirror of https://github.com/codedread/bitjs synced 2025-10-03 09:39:16 +02:00
bitjs/tests/archive-test.js

71 lines
2.6 KiB
JavaScript

/*
* archive-test.js
*
* Licensed under the MIT License
*
* Copyright(c) 2017 Google Inc.
*/
import { getUnarchiver, UnarchiveEventType } from '../archive/archive.js';
import { assertEquals, runTests } from './muther.js';
const testInputs = {
'testUnzipDeflate': 'archive-testfiles/test-unzip-deflate.json',
'testUnzipDescriptor': 'archive-testfiles/test-unzip-descriptor.json',
'testUnzipStore': 'archive-testfiles/test-unzip-store.json',
'testUnrarM1': 'archive-testfiles/test-unrar-m1.json',
'testUnrarM2': 'archive-testfiles/test-unrar-m2.json',
'testUnrarM3': 'archive-testfiles/test-unrar-m3.json',
'testUnrarM4': 'archive-testfiles/test-unrar-m4.json',
'testUnrarM5': 'archive-testfiles/test-unrar-m5.json',
'testUnrarMA4': 'archive-testfiles/test-unrar-ma4.json',
// On a Mac, tar files contain hidden files. To disable this do:
// $ COPYFILE_DISABLE=1 tar cvf lorem.tar lorem.txt
'testUntar': 'archive-testfiles/test-untar-1.json',
};
// TODO: It is an error for the Unarchiver worker not to terminate or send a FINISH event.
// We need to be able to test that here.
const testSuite = { tests: {} };
for (let testName in testInputs) {
const testInputFilename = testInputs[testName];
testSuite.tests[testName] = function () {
return new Promise((resolve, reject) => {
const scriptEl = document.createElement('script');
scriptEl.setAttribute('src', testInputFilename);
scriptEl.addEventListener('load', evt => {
const testFile = window.archiveTestFile;
try {
const archivedFile = new Uint8Array(
atob(testFile.archivedFile).split(',').map(str => parseInt(str)));
const unarchivedFile = new Uint8Array(
atob(testFile.unarchivedFile).split(',').map(str => parseInt(str)));
const unarchiver = getUnarchiver(archivedFile.buffer, {
pathToBitJS: '../',
});
unarchiver.addEventListener(UnarchiveEventType.EXTRACT, evt => {
const theUnarchivedFile = evt.unarchivedFile.fileData;
try {
assertEquals(theUnarchivedFile.length, unarchivedFile.length,
'The unarchived buffer was not the right length');
for (let i = 0; i < theUnarchivedFile.length; ++i) {
assertEquals(theUnarchivedFile[i], unarchivedFile[i],
'Byte #' + i + ' did not match');
}
resolve();
} catch (err) {
reject(err);
}
});
unarchiver.start();
} catch (err) {
reject(err);
}
});
document.body.appendChild(scriptEl);
});
}
}
runTests(testSuite);