summaryrefslogtreecommitdiffstats
path: root/toolkit/modules/tests/xpcshell/test_ZipUtils.js
blob: 71c6884d468ee46032d849627e48ca6ea1154db3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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!");
    }
  );
});