blob: c89978d55fa65b8b7c9fadcbd75bb56f661d7108 [file] [edit]
/* global QUnit,JSZip,JSZipTestUtils */
'use strict';
QUnit.module("load", function () {
JSZipTestUtils.testZipFile("load(string) works", "ref/all.zip", function(assert, file) {
var done = assert.async();
assert.ok(typeof file === "string");
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
})
.then(function(result) {
assert.equal(result, "Hello World\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
JSZipTestUtils.testZipFile("load(string) handles bytes > 255", "ref/all.zip", function(assert, file) {
var done = assert.async();
// the method used to load zip with ajax will remove the extra bits.
// adding extra bits :)
var updatedFile = "";
for (var i = 0; i < file.length; i++) {
updatedFile += String.fromCharCode((file.charCodeAt(i) & 0xff) + 0x4200);
}
JSZip.loadAsync(updatedFile)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
})
.then(function (content) {
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
JSZipTestUtils.testZipFile("load(Array) works", "ref/deflate.zip", function(assert, file) {
var done = assert.async();
var updatedFile = new Array(file.length);
for( var i = 0; i < file.length; ++i ) {
updatedFile[i] = file.charCodeAt(i);
}
JSZip.loadAsync(updatedFile)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
})
.then(function (content) {
assert.equal(content, "This a looong file : we need to see the difference between the different compression methods.\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
JSZipTestUtils.testZipFile("load(array) handles bytes > 255", "ref/deflate.zip", function(assert, file) {
var done = assert.async();
var updatedFile = new Array(file.length);
for( var i = 0; i < file.length; ++i ) {
updatedFile[i] = file.charCodeAt(i) + 0x4200;
}
JSZip.loadAsync(updatedFile)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
})
.then(function (content) {
assert.equal(content, "This a looong file : we need to see the difference between the different compression methods.\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
if (JSZip.support.arraybuffer) {
JSZipTestUtils.testZipFile("load(ArrayBuffer) works", "ref/all.zip", function(assert, fileAsString) {
var done = assert.async(3);
var file = new ArrayBuffer(fileAsString.length);
var bufferView = new Uint8Array(file);
for( var i = 0; i < fileAsString.length; ++i ) {
bufferView[i] = fileAsString.charCodeAt(i);
}
assert.ok(file instanceof ArrayBuffer);
// when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array.
// if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file).
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("arraybuffer");
}).then(function (content){
assert.equal(content.byteLength, 12, "don't get the original buffer");
done();
})['catch'](JSZipTestUtils.assertNoError);
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("uint8array");
}).then(function (content){
assert.equal(content.buffer.byteLength, 12, "don't get a view of the original buffer");
done();
});
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content){
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
});
});
}
if (JSZip.support.nodebuffer) {
JSZipTestUtils.testZipFile("load(Buffer) works", "ref/all.zip", function(assert, fileAsString) {
var done = assert.async();
var file = new Buffer(fileAsString.length);
for( var i = 0; i < fileAsString.length; ++i ) {
file[i] = fileAsString.charCodeAt(i);
}
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content){
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
});
});
}
if (JSZip.support.uint8array) {
JSZipTestUtils.testZipFile("load(Uint8Array) works", "ref/all.zip", function(assert, fileAsString) {
var done = assert.async(3);
var file = new Uint8Array(fileAsString.length);
for( var i = 0; i < fileAsString.length; ++i ) {
file[i] = fileAsString.charCodeAt(i);
}
assert.ok(file instanceof Uint8Array);
// when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array.
// if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file).
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("arraybuffer");
}).then(function (content){
assert.equal(content.byteLength, 12, "don't get the original buffer");
done();
})['catch'](JSZipTestUtils.assertNoError);
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("uint8array");
}).then(function (content){
assert.equal(content.buffer.byteLength, 12, "don't get a view of the original buffer");
done();
})['catch'](JSZipTestUtils.assertNoError);
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content){
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
}
// zip -6 -X deflate.zip Hello.txt
JSZipTestUtils.testZipFile("zip with DEFLATE", "ref/deflate.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content){
assert.equal(content, "This a looong file : we need to see the difference between the different compression methods.\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// zip -0 -X -z -c archive_comment.zip Hello.txt
JSZipTestUtils.testZipFile("read zip with comment", "ref/archive_comment.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function (zip) {
assert.equal(zip.comment, "file comment", "the archive comment was correctly read.");
assert.equal(zip.file("Hello.txt").comment, "entry comment", "the entry comment was correctly read.");
return zip.file("Hello.txt").async("string");
}).then(function (content){
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
JSZipTestUtils.testZipFile("generate zip with comment", "ref/archive_comment.zip", function(assert, file) {
var zip = new JSZip();
zip.file("Hello.txt", "Hello World\n", {comment:"entry comment"});
var done = assert.async();
zip.generateAsync({type:"binarystring", comment:"file comment"}).then(function(generated) {
assert.ok(JSZipTestUtils.similar(generated, file, JSZipTestUtils.MAX_BYTES_DIFFERENCE_PER_ZIP_ENTRY) , "Generated ZIP matches reference ZIP");
JSZipTestUtils.checkGenerateStability(assert, generated);
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// zip -0 extra_attributes.zip Hello.txt
JSZipTestUtils.testZipFile("zip with extra attributes", "ref/extra_attributes.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content){
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// use -fz to force use of Zip64 format
// zip -fz -0 zip64.zip Hello.txt
JSZipTestUtils.testZipFile("zip 64", "ref/zip64.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content){
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// use -fd to force data descriptors as if streaming
// zip -fd -0 data_descriptor.zip Hello.txt
JSZipTestUtils.testZipFile("zip with data descriptor", "ref/data_descriptor.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content){
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// combo of zip64 and data descriptors :
// zip -fz -fd -0 data_descriptor_zip64.zip Hello.txt
// this generate a corrupted zip file :(
// TODO : find how to get the two features
// zip -0 -X zip_within_zip.zip Hello.txt && zip -0 -X nested.zip Hello.txt zip_within_zip.zip
JSZipTestUtils.testZipFile("nested zip", "ref/nested.zip", function(assert, file) {
var done = assert.async(2);
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("zip_within_zip.zip").async("binarystring");
})
.then(JSZip.loadAsync)
.then(function (innerZip) {
return innerZip.file("Hello.txt").async("string");
}).then(function (content) {
assert.equal(content, "Hello World\n", "the inner zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content){
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// zip -fd -0 nested_data_descriptor.zip data_descriptor.zip
JSZipTestUtils.testZipFile("nested zip with data descriptors", "ref/nested_data_descriptor.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("data_descriptor.zip").async("binarystring");
})
.then(JSZip.loadAsync)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content) {
assert.equal(content, "Hello World\n", "the inner zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// zip -fz -0 nested_zip64.zip zip64.zip
JSZipTestUtils.testZipFile("nested zip 64", "ref/nested_zip64.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("zip64.zip").async("binarystring");
})
.then(JSZip.loadAsync)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content) {
assert.equal(content, "Hello World\n", "the inner zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// nested zip 64 with data descriptors
// zip -fz -fd -0 nested_data_descriptor_zip64.zip data_descriptor_zip64.zip
// this generate a corrupted zip file :(
// TODO : find how to get the two features
// zip -X -0 utf8_in_name.zip €15.txt
JSZipTestUtils.testZipFile("Zip text file with UTF-8 characters in filename", "ref/utf8_in_name.zip", function(assert, file) {
var done = assert.async(2);
JSZip.loadAsync(file)
.then(function (zip){
assert.ok(zip.file("€15.txt") !== null, "the utf8 file is here.");
return zip.file("€15.txt").async("string");
})
.then(function (content) {
assert.equal(content, "€15\n", "the utf8 content was correctly read (with file().async).");
done();
})['catch'](JSZipTestUtils.assertNoError);
JSZip.loadAsync(file)
.then(function (zip){
return zip.files["€15.txt"].async("string");
})
.then(function (content) {
assert.equal(content, "€15\n", "the utf8 content was correctly read (with files[].async).");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// Created with winrar
// winrar will replace the euro symbol with a '_' but set the correct unicode path in an extra field.
JSZipTestUtils.testZipFile("Zip text file with UTF-8 characters in filename and windows compatibility", "ref/winrar_utf8_in_name.zip", function(assert, file) {
var done = assert.async(2);
JSZip.loadAsync(file)
.then(function (zip){
assert.ok(zip.file("€15.txt") !== null, "the utf8 file is here.");
return zip.file("€15.txt").async("string");
})
.then(function (content) {
assert.equal(content, "€15\n", "the utf8 content was correctly read (with file().async).");
done();
})['catch'](JSZipTestUtils.assertNoError);
JSZip.loadAsync(file)
.then(function (zip){
return zip.files["€15.txt"].async("string");
})
.then(function (content) {
assert.equal(content, "€15\n", "the utf8 content was correctly read (with files[].async).");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// zip backslash.zip -0 -X Hel\\lo.txt
JSZipTestUtils.testZipFile("Zip text file with backslash in filename", "ref/backslash.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function (zip){
return zip.file("Hel\\lo.txt").async("string");
})
.then(function (content) {
assert.equal(content, "Hello World\n", "the utf8 content was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// use izarc to generate a zip file on windows
JSZipTestUtils.testZipFile("Zip text file from windows with \\ in central dir", "ref/slashes_and_izarc.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function (zip){
return zip.folder("test").file("Hello.txt").async("string");
})
.then(function (content) {
assert.equal(content, "Hello world\r\n", "the content was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// cat Hello.txt all.zip > all_prepended_bytes.zip
JSZipTestUtils.testZipFile("zip file with prepended bytes", "ref/all_prepended_bytes.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function success(zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content) {
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// cat all.zip Hello.txt > all_appended_bytes.zip
JSZipTestUtils.testZipFile("zip file with appended bytes", "ref/all_appended_bytes.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function success(zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content) {
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// cat Hello.txt zip64.zip > zip64_prepended_bytes.zip
JSZipTestUtils.testZipFile("zip64 file with extra bytes", "ref/zip64_prepended_bytes.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function success(zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content) {
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// cat zip64.zip Hello.txt > zip64_appended_bytes.zip
JSZipTestUtils.testZipFile("zip64 file with extra bytes", "ref/zip64_appended_bytes.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function success(zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content) {
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
JSZipTestUtils.testZipFile("load(promise) works", "ref/all.zip", function(assert, fileAsString) {
var done = assert.async();
JSZip.loadAsync(JSZip.external.Promise.resolve(fileAsString))
.then(function (zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content){
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
if (JSZip.support.blob) {
JSZipTestUtils.testZipFile("load(blob) works", "ref/all.zip", function(assert, fileAsString) {
var u8 = new Uint8Array(fileAsString.length);
for( var i = 0; i < fileAsString.length; ++i ) {
u8[i] = fileAsString.charCodeAt(i);
}
var file = null;
try {
// don't use an Uint8Array, see the comment on utils.newBlob
file = new Blob([u8.buffer], {type:"application/zip"});
} catch (e) {
var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
var builder = new Builder();
builder.append(u8.buffer);
file = builder.getBlob("application/zip");
}
var done = assert.async();
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
}).then(function (content){
assert.equal(content, "Hello World\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
}
JSZipTestUtils.testZipFile("valid crc32", "ref/all.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file, {checkCRC32:true})
.then(function success() {
assert.ok(true, "no exception were thrown");
done();
}, function failure(e) {
assert.ok(false, "An exception were thrown: " + e.message);
done();
});
});
JSZipTestUtils.testZipFile("loading in a sub folder", "ref/all.zip", function(assert, file) {
var done = assert.async();
var zip = new JSZip();
zip.folder("sub").loadAsync(file)
.then(function success(zip) {
assert.ok(zip.file("Hello.txt"), "the zip was correctly read.");
assert.equal(zip.file("Hello.txt").name, "sub/Hello.txt", "the zip was read in a sub folder");
assert.equal(zip.root, "sub/", "the promise contains the correct folder level");
done();
}, function failure(e) {
assert.ok(false, "An exception were thrown: " + e.message);
done();
});
});
JSZipTestUtils.testZipFile("loading overwrite files", "ref/all.zip", function(assert, file) {
var done = assert.async();
var zip = new JSZip();
zip.file("Hello.txt", "bonjour à tous");
zip.file("Bye.txt", "au revoir");
zip.loadAsync(file)
.then(function success(zip) {
return JSZip.external.Promise.all([
zip.file("Hello.txt").async("text"),
zip.file("Bye.txt").async("text")
]);
}).then(function (result) {
var hello = result[0];
var bye = result[1];
assert.equal(hello, "Hello World\n", "conflicting content was overwritten.");
assert.equal(bye, "au revoir", "other content was kept.");
done();
}, function failure(e) {
assert.ok(false, "An exception were thrown: " + e.message);
done();
});
});
QUnit.module("not supported features");
// zip -0 -X -e encrypted.zip Hello.txt
JSZipTestUtils.testZipFile("basic encryption", "ref/encrypted.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function success() {
assert.ok(false, "Encryption is not supported, but no exception were thrown");
done();
}, function failure(e) {
assert.equal(e.message, "Encrypted zip are not supported", "the error message is useful");
done();
});
});
QUnit.module("corrupted zip");
JSZipTestUtils.testZipFile("bad compression method", "ref/invalid/compression.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function success() {
assert.ok(false, "no exception were thrown");
done();
}, function failure(e) {
assert.ok(e.message.match("Corrupted zip"), "the error message is useful");
done();
});
});
// dd if=all.zip of=all_missing_bytes.zip bs=32 skip=1
JSZipTestUtils.testZipFile("zip file with missing bytes", "ref/all_missing_bytes.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function success() {
assert.ok(false, "no exception were thrown");
done();
}, function failure(e) {
assert.ok(e.message.match("Corrupted zip"), "the error message is useful");
done();
});
});
// dd if=zip64.zip of=zip64_missing_bytes.zip bs=32 skip=1
JSZipTestUtils.testZipFile("zip64 file with missing bytes", "ref/zip64_missing_bytes.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function success() {
assert.ok(false, "no exception were thrown");
done();
}, function failure(e) {
assert.ok(e.message.match("Corrupted zip"), "the error message is useful");
done();
});
});
JSZipTestUtils.testZipFile("zip file with extra field is Non-standard", "ref/extra_filed_non_standard.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function success() {
assert.ok(true, "no exception were thrown");
done();
}, function failure(e) {
assert.ok(false, "An exception were thrown: " + e.message);
done();
});
});
QUnit.test("not a zip file", function(assert) {
var done = assert.async();
JSZip.loadAsync("this is not a zip file")
.then(function success() {
assert.ok(false, "no exception were thrown");
done();
}, function failure(e) {
assert.ok(e.message.match("stuk.github.io/jszip/documentation"), "the error message is useful");
done();
});
});
QUnit.test("truncated zip file", function(assert) {
var done = assert.async();
JSZip.loadAsync("PK\x03\x04\x0A\x00\x00\x00<cut>")
.then(function success() {
done();
assert.ok(false, "no exception were thrown");
}, function failure(e) {
assert.ok(e.message.match("Corrupted zip"), "the error message is useful");
done();
});
});
JSZipTestUtils.testZipFile("invalid crc32 but no check", "ref/invalid/crc32.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file, {checkCRC32:false})
.then(function success() {
assert.ok(true, "no exception were thrown");
done();
}, function failure(e) {
assert.ok(false, "An exception were thrown but the check should have been disabled.");
done();
});
});
JSZipTestUtils.testZipFile("invalid crc32", "ref/invalid/crc32.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file, {checkCRC32:true})
.then(function success() {
assert.ok(false, "no exception were thrown");
done();
}, function failure(e) {
assert.ok(e.message.match("Corrupted zip"), "the error message is useful");
done();
});
});
JSZipTestUtils.testZipFile("bad offset", "ref/invalid/bad_offset.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file, {checkCRC32:false})
.then(function success() {
assert.ok(false, "no exception were thrown");
done();
}, function failure(e) {
assert.ok(e.message.match("Corrupted zip"), "the error message is useful");
done();
});
});
JSZipTestUtils.testZipFile("bad decompressed size, read a file", "ref/invalid/bad_decompressed_size.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function (zip) {
return zip.file("Hello.txt").async("string");
})
.then(function success() {
assert.ok(false, "successful result in an error test");
done();
}, function failure(e) {
assert.ok(e.message.match("size mismatch"), "async call : the error message is useful");
done();
});
});
JSZipTestUtils.testZipFile("bad decompressed size, generate a zip", "ref/invalid/bad_decompressed_size.zip", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file)
.then(function (zip) {
// add other files to be sure to trigger the right code path
zip.file("zz", "zz");
return zip.generateAsync({
type:"string",
compression:"DEFLATE" // a different compression to force a read
});
})
.then(function success() {
assert.ok(false, "successful result in an error test");
done();
}, function failure(e) {
assert.ok(e.message.match("size mismatch"), "async call : the error message is useful");
done();
});
});
QUnit.module("complex files");
if (typeof window === "undefined" || QUnit.urlParams.complexfiles) {
// http://www.feedbooks.com/book/8/the-metamorphosis
JSZipTestUtils.testZipFile("Franz Kafka - The Metamorphosis.epub", "ref/complex_files/Franz Kafka - The Metamorphosis.epub", function(assert, file) {
var done = assert.async(2);
JSZip.loadAsync(file)
.then(function(zip) {
assert.equal(zip.filter(function(){return true;}).length, 26, "the zip contains the good number of elements.");
return zip.file("mimetype").async("string");
})
.then(function (content) {
assert.equal(content, "application/epub+zip\r\n", "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
JSZip.loadAsync(file)
.then(function(zip) {
return zip.file("OPS/main0.xml").async("string");
})
.then(function (content) {
// the .ncx file tells us that the first chapter is in the main0.xml file.
assert.ok(content.indexOf("One morning, as Gregor Samsa was waking up from anxious dreams") !== -1, "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// a showcase in http://msdn.microsoft.com/en-us/windows/hardware/gg463429
JSZipTestUtils.testZipFile("Outlook2007_Calendar.xps, createFolders: false", "ref/complex_files/Outlook2007_Calendar.xps", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file, {createFolders: false})
.then(function(zip) {
// the zip file contains 15 entries.
assert.equal(zip.filter(function(){return true;}).length, 15, "the zip contains the good number of elements.");
return zip.file("[Content_Types].xml").async("string");
})
.then(function (content) {
assert.ok(content.indexOf("application/vnd.ms-package.xps-fixeddocument+xml") !== -1, "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// Same test as above, but with createFolders option set to true
JSZipTestUtils.testZipFile("Outlook2007_Calendar.xps, createFolders: true", "ref/complex_files/Outlook2007_Calendar.xps", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file, {createFolders: true})
.then(function(zip) {
// the zip file contains 15 entries, but we get 23 when creating all the sub-folders.
assert.equal(zip.filter(function(){return true;}).length, 23, "the zip contains the good number of elements.");
return zip.file("[Content_Types].xml").async("string");
})
.then(function (content) {
assert.ok(content.indexOf("application/vnd.ms-package.xps-fixeddocument+xml") !== -1, "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// an example file in http://cheeso.members.winisp.net/srcview.aspx?dir=js-unzip
// the data come from http://www.antarctica.ac.uk/met/READER/upper_air/
JSZipTestUtils.testZipFile("AntarcticaTemps.xlsx, createFolders: false", "ref/complex_files/AntarcticaTemps.xlsx", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file, {createFolders: false})
.then(function(zip) {
// the zip file contains 17 entries.
assert.equal(zip.filter(function(){return true;}).length, 17, "the zip contains the good number of elements.");
return zip.file("[Content_Types].xml").async("string");
}).then(function (content) {
assert.ok(content.indexOf("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml") !== -1, "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// Same test as above, but with createFolders option set to true
JSZipTestUtils.testZipFile("AntarcticaTemps.xlsx, createFolders: true", "ref/complex_files/AntarcticaTemps.xlsx", function(assert, file) {
var done = assert.async();
JSZip.loadAsync(file, {createFolders: true})
.then(function(zip) {
// the zip file contains 16 entries, but we get 27 when creating all the sub-folders.
assert.equal(zip.filter(function(){return true;}).length, 27, "the zip contains the good number of elements.");
return zip.file("[Content_Types].xml").async("string");
}).then(function (content) {
assert.ok(content.indexOf("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml") !== -1, "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// same as two up, but in the Open Document format
JSZipTestUtils.testZipFile("AntarcticaTemps.ods, createFolders: false", "ref/complex_files/AntarcticaTemps.ods", function (assert, file) {
var done = assert.async();
JSZip.loadAsync(file, {createFolders: false})
.then(function(zip) {
// the zip file contains 20 entries.
assert.equal(zip.filter(function () {return true;}).length, 20, "the zip contains the good number of elements.");
return zip.file("META-INF/manifest.xml").async("string");
})
.then(function (content) {
assert.ok(content.indexOf("application/vnd.oasis.opendocument.spreadsheet") !== -1, "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
// same as above, but in the Open Document format
JSZipTestUtils.testZipFile("AntarcticaTemps.ods, createFolders: true", "ref/complex_files/AntarcticaTemps.ods", function (assert, file) {
var done = assert.async();
JSZip.loadAsync(file, {createFolders: true})
.then(function(zip) {
// the zip file contains 19 entries, but we get 27 when creating all the sub-folders.
assert.equal(zip.filter(function () {return true;}).length, 27, "the zip contains the good number of elements.");
return zip.file("META-INF/manifest.xml").async("string");
})
.then(function (content) {
assert.ok(content.indexOf("application/vnd.oasis.opendocument.spreadsheet") !== -1, "the zip was correctly read.");
done();
})['catch'](JSZipTestUtils.assertNoError);
});
}
});