summaryrefslogtreecommitdiffstats
path: root/toolkit/modules/tests/xpcshell/test_ZipUtils.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/modules/tests/xpcshell/test_ZipUtils.js')
-rw-r--r--toolkit/modules/tests/xpcshell/test_ZipUtils.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/toolkit/modules/tests/xpcshell/test_ZipUtils.js b/toolkit/modules/tests/xpcshell/test_ZipUtils.js
new file mode 100644
index 000000000..71c6884d4
--- /dev/null
+++ b/toolkit/modules/tests/xpcshell/test_ZipUtils.js
@@ -0,0 +1,79 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const ARCHIVE = "zips/zen.zip";
+const SUBDIR = "zen";
+const SYMLINK = "beyond_link";
+const ENTRIES = ["beyond.txt", SYMLINK, "waterwood.txt"];
+
+Components.utils.import("resource://gre/modules/ZipUtils.jsm");
+Components.utils.import("resource://gre/modules/FileUtils.jsm");
+Components.utils.import("resource://gre/modules/Services.jsm");
+
+const archive = do_get_file(ARCHIVE, false);
+const dir = do_get_profile().clone();
+dir.append("test_ZipUtils");
+
+function run_test() {
+ run_next_test();
+}
+
+function ensureExtracted(target) {
+ target.append(SUBDIR);
+ do_check_true(target.exists());
+
+ for (let i = 0; i < ENTRIES.length; i++) {
+ let entry = target.clone();
+ entry.append(ENTRIES[i]);
+ do_print("ENTRY " + entry.path);
+ do_check_true(entry.exists());
+ }
+}
+
+function ensureHasSymlink(target) {
+ // Just bail out if running on Windows, since symlinks do not exists there.
+ if (Services.appinfo.OS === "WINNT") {
+ return;
+ }
+
+ let entry = target.clone();
+ entry.append(SYMLINK);
+
+ do_print("ENTRY " + entry.path);
+ do_check_true(entry.exists());
+ do_check_true(entry.isSymlink());
+}
+
+add_task(function test_extractFiles() {
+ let target = dir.clone();
+ target.append("test_extractFiles");
+
+ try {
+ ZipUtils.extractFiles(archive, target);
+ } catch (e) {
+ do_throw("Failed to extract synchronously!");
+ }
+
+ ensureExtracted(target);
+ ensureHasSymlink(target);
+});
+
+add_task(function* test_extractFilesAsync() {
+ let target = dir.clone();
+ target.append("test_extractFilesAsync");
+ target.create(Components.interfaces.nsIFile.DIRECTORY_TYPE,
+ FileUtils.PERMS_DIRECTORY);
+
+ yield ZipUtils.extractFilesAsync(archive, target).then(
+ function success() {
+ do_print("SUCCESS");
+ ensureExtracted(target);
+ },
+ function failure() {
+ do_print("FAILURE");
+ do_throw("Failed to extract asynchronously!");
+ }
+ );
+});