diff options
Diffstat (limited to 'toolkit/modules/tests/xpcshell/test_ZipUtils.js')
-rw-r--r-- | toolkit/modules/tests/xpcshell/test_ZipUtils.js | 79 |
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!"); + } + ); +}); |