summaryrefslogtreecommitdiff
path: root/toolkit/components/osfile/tests/xpcshell
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/osfile/tests/xpcshell')
-rw-r--r--toolkit/components/osfile/tests/xpcshell/.eslintrc.js7
-rw-r--r--toolkit/components/osfile/tests/xpcshell/head.js99
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_available_free_space.js38
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_compression.js98
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_constants.js26
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_creationDate.js31
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_duration.js91
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_exception.js89
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_file_URL_conversion.js114
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_loader.js37
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_loader/module_test_loader.js9
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_logging.js74
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_makeDir.js142
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_open.js70
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_osfile_async.js16
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_osfile_async_append.js122
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_osfile_async_bytes.js39
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_osfile_async_copy.js113
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_osfile_async_flush.js30
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_osfile_async_largefiles.js153
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_osfile_async_setDates.js211
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_osfile_async_setPermissions.js103
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_osfile_closed.js48
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_osfile_error.js63
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_osfile_kill.js100
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_osfile_win_async_setPermissions.js114
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_osfile_writeAtomic_backupTo_option.js143
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_osfile_writeAtomic_zerobytes.js27
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_path.js159
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_path_constants.js83
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_queue.js38
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_read_write.js103
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_remove.js56
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_removeDir.js177
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_removeEmptyDir.js55
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_reset.js95
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_shutdown.js98
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_telemetry.js63
-rw-r--r--toolkit/components/osfile/tests/xpcshell/test_unique.js88
-rw-r--r--toolkit/components/osfile/tests/xpcshell/xpcshell.ini51
40 files changed, 0 insertions, 3273 deletions
diff --git a/toolkit/components/osfile/tests/xpcshell/.eslintrc.js b/toolkit/components/osfile/tests/xpcshell/.eslintrc.js
deleted file mode 100644
index d35787cd2c..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/.eslintrc.js
+++ /dev/null
@@ -1,7 +0,0 @@
-"use strict";
-
-module.exports = {
- "extends": [
- "../../../../../testing/xpcshell/xpcshell.eslintrc.js"
- ]
-};
diff --git a/toolkit/components/osfile/tests/xpcshell/head.js b/toolkit/components/osfile/tests/xpcshell/head.js
deleted file mode 100644
index eef29962af..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/head.js
+++ /dev/null
@@ -1,99 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-var {utils: Cu, interfaces: Ci} = Components;
-
-var {XPCOMUtils} = Cu.import("resource://gre/modules/XPCOMUtils.jsm", {});
-
-// Bug 1014484 can only be reproduced by loading OS.File first from the
-// CommonJS loader, so we do not want OS.File to be loaded eagerly for
-// all the tests in this directory.
-XPCOMUtils.defineLazyModuleGetter(this, "OS",
- "resource://gre/modules/osfile.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "FileUtils",
- "resource://gre/modules/FileUtils.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
- "resource://gre/modules/NetUtil.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "Services",
- "resource://gre/modules/Services.jsm");
-
-var {Promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
-var {Task} = Cu.import("resource://gre/modules/Task.jsm", {});
-
-Services.prefs.setBoolPref("toolkit.osfile.log", true);
-
-/**
- * As add_task, but execute the test both with native operations and
- * without.
- */
-function add_test_pair(generator) {
- add_task(function*() {
- do_print("Executing test " + generator.name + " with native operations");
- Services.prefs.setBoolPref("toolkit.osfile.native", true);
- return Task.spawn(generator);
- });
- add_task(function*() {
- do_print("Executing test " + generator.name + " without native operations");
- Services.prefs.setBoolPref("toolkit.osfile.native", false);
- return Task.spawn(generator);
- });
-}
-
-/**
- * Fetch asynchronously the contents of a file using xpcom.
- *
- * Used for comparing xpcom-based results to os.file-based results.
- *
- * @param {string} path The _absolute_ path to the file.
- * @return {promise}
- * @resolves {string} The contents of the file.
- */
-function reference_fetch_file(path, test) {
- do_print("Fetching file " + path);
- let deferred = Promise.defer();
- let file = new FileUtils.File(path);
- NetUtil.asyncFetch({
- uri: NetUtil.newURI(file),
- loadUsingSystemPrincipal: true
- }, function(stream, status) {
- if (!Components.isSuccessCode(status)) {
- deferred.reject(status);
- return;
- }
- let result, reject;
- try {
- result = NetUtil.readInputStreamToString(stream, stream.available());
- } catch (x) {
- reject = x;
- }
- stream.close();
- if (reject) {
- deferred.reject(reject);
- } else {
- deferred.resolve(result);
- }
- });
-
- return deferred.promise;
-};
-
-/**
- * Compare asynchronously the contents two files using xpcom.
- *
- * Used for comparing xpcom-based results to os.file-based results.
- *
- * @param {string} a The _absolute_ path to the first file.
- * @param {string} b The _absolute_ path to the second file.
- *
- * @resolves {null}
- */
-function reference_compare_files(a, b, test) {
- return Task.spawn(function*() {
- do_print("Comparing files " + a + " and " + b);
- let a_contents = yield reference_fetch_file(a, test);
- let b_contents = yield reference_fetch_file(b, test);
- do_check_eq(a_contents, b_contents);
- });
-};
diff --git a/toolkit/components/osfile/tests/xpcshell/test_available_free_space.js b/toolkit/components/osfile/tests/xpcshell/test_available_free_space.js
deleted file mode 100644
index 08e67763b5..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_available_free_space.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/Services.jsm");
-
-do_register_cleanup(function() {
- Services.prefs.setBoolPref("toolkit.osfile.log", false);
-});
-
-function run_test() {
- Services.prefs.setBoolPref("toolkit.osfile.log", true);
-
- run_next_test();
-}
-
-/**
- * Test OS.File.getAvailableFreeSpace
- */
-add_task(function() {
- // Set up profile. We will use profile path to query for available free
- // space.
- do_get_profile();
-
- let dir = OS.Constants.Path.profileDir;
-
- // Sanity checking for the test
- do_check_true((yield OS.File.exists(dir)));
-
- // Query for available bytes for user
- let availableBytes = yield OS.File.getAvailableFreeSpace(dir);
-
- do_check_true(!!availableBytes);
- do_check_true(availableBytes > 0);
-});
diff --git a/toolkit/components/osfile/tests/xpcshell/test_compression.js b/toolkit/components/osfile/tests/xpcshell/test_compression.js
deleted file mode 100644
index b40235615e..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_compression.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-
-function run_test() {
- do_test_pending();
- run_next_test();
-}
-
-add_task(function test_compress_lz4() {
- let path = OS.Path.join(OS.Constants.Path.tmpDir, "compression.lz");
- let length = 1024;
- let array = new Uint8Array(length);
- for (let i = 0; i < array.byteLength; ++i) {
- array[i] = i;
- }
- let arrayAsString = Array.prototype.join.call(array);
-
- do_print("Writing data with lz4 compression");
- let bytes = yield OS.File.writeAtomic(path, array, { compression: "lz4" });
- do_print("Compressed " + length + " bytes into " + bytes);
-
- do_print("Reading back with lz4 decompression");
- let decompressed = yield OS.File.read(path, { compression: "lz4" });
- do_print("Decompressed into " + decompressed.byteLength + " bytes");
- do_check_eq(arrayAsString, Array.prototype.join.call(decompressed));
-});
-
-add_task(function test_uncompressed() {
- do_print("Writing data without compression");
- let path = OS.Path.join(OS.Constants.Path.tmpDir, "no_compression.tmp");
- let array = new Uint8Array(1024);
- for (let i = 0; i < array.byteLength; ++i) {
- array[i] = i;
- }
- let bytes = yield OS.File.writeAtomic(path, array); // No compression
-
- let exn;
- // Force decompression, reading should fail
- try {
- yield OS.File.read(path, { compression: "lz4" });
- } catch (ex) {
- exn = ex;
- }
- do_check_true(!!exn);
- // Check the exception message (and that it contains the file name)
- do_check_true(exn.message.indexOf(`Invalid header (no magic number) - Data: ${ path }`) != -1);
-});
-
-add_task(function test_no_header() {
- let path = OS.Path.join(OS.Constants.Path.tmpDir, "no_header.tmp");
- let array = new Uint8Array(8).fill(0,0); // Small array with no header
-
- do_print("Writing data with no header");
-
- let bytes = yield OS.File.writeAtomic(path, array); // No compression
- let exn;
- // Force decompression, reading should fail
- try {
- yield OS.File.read(path, { compression: "lz4" });
- } catch (ex) {
- exn = ex;
- }
- do_check_true(!!exn);
- // Check the exception message (and that it contains the file name)
- do_check_true(exn.message.indexOf(`Buffer is too short (no header) - Data: ${ path }`) != -1);
-});
-
-add_task(function test_invalid_content() {
- let path = OS.Path.join(OS.Constants.Path.tmpDir, "invalid_content.tmp");
- let arr1 = new Uint8Array([109, 111, 122, 76, 122, 52, 48, 0]);
- let arr2 = new Uint8Array(248).fill(1,0);
-
- let array = new Uint8Array(arr1.length + arr2.length);
- array.set(arr1);
- array.set(arr2, arr1.length);
-
- do_print("Writing invalid data (with a valid header and only ones after that)");
-
- let bytes = yield OS.File.writeAtomic(path, array); // No compression
- let exn;
- // Force decompression, reading should fail
- try {
- yield OS.File.read(path, { compression: "lz4" });
- } catch (ex) {
- exn = ex;
- }
- do_check_true(!!exn);
- // Check the exception message (and that it contains the file name)
- do_check_true(exn.message.indexOf(`Invalid content: Decompression stopped at 0 - Data: ${ path }`) != -1);
-});
-
-add_task(function() {
- do_test_finished();
-}); \ No newline at end of file
diff --git a/toolkit/components/osfile/tests/xpcshell/test_constants.js b/toolkit/components/osfile/tests/xpcshell/test_constants.js
deleted file mode 100644
index 5b91484bd9..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_constants.js
+++ /dev/null
@@ -1,26 +0,0 @@
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/Services.jsm");
-Components.utils.import("resource://gre/modules/Services.jsm", this);
-
-function run_test() {
- run_next_test();
-}
-
-// Test that OS.Constants is defined correctly.
-add_task(function* check_definition() {
- do_check_true(OS.Constants!=null);
- do_check_true(!!OS.Constants.Win || !!OS.Constants.libc);
- do_check_true(OS.Constants.Path!=null);
- do_check_true(OS.Constants.Sys!=null);
- //check system name
- do_check_eq(Services.appinfo.OS, OS.Constants.Sys.Name);
-
- //check if using DEBUG build
- if (Components.classes["@mozilla.org/xpcom/debug;1"].getService(Components.interfaces.nsIDebug2).isDebugBuild == true) {
- do_check_true(OS.Constants.Sys.DEBUG);
- } else {
- do_check_true(typeof(OS.Constants.Sys.DEBUG) == 'undefined');
- }
-});
diff --git a/toolkit/components/osfile/tests/xpcshell/test_creationDate.js b/toolkit/components/osfile/tests/xpcshell/test_creationDate.js
deleted file mode 100644
index 9c4fa1dfc4..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_creationDate.js
+++ /dev/null
@@ -1,31 +0,0 @@
-"use strict";
-
-function run_test() {
- do_test_pending();
- run_next_test();
-}
-
-/**
- * Test to ensure that deprecation warning is issued on use
- * of creationDate.
- */
-add_task(function test_deprecatedCreationDate () {
- let deferred = Promise.defer();
- let consoleListener = {
- observe: function (aMessage) {
- if(aMessage.message.indexOf("Field 'creationDate' is deprecated.") > -1) {
- do_print("Deprecation message printed");
- do_check_true(true);
- Services.console.unregisterListener(consoleListener);
- deferred.resolve();
- }
- }
- };
- let currentDir = yield OS.File.getCurrentDirectory();
- let path = OS.Path.join(currentDir, "test_creationDate.js");
-
- Services.console.registerListener(consoleListener);
- (yield OS.File.stat(path)).creationDate;
-});
-
-add_task(do_test_finished);
diff --git a/toolkit/components/osfile/tests/xpcshell/test_duration.js b/toolkit/components/osfile/tests/xpcshell/test_duration.js
deleted file mode 100644
index 305c03da86..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_duration.js
+++ /dev/null
@@ -1,91 +0,0 @@
-var {OS} = Components.utils.import("resource://gre/modules/osfile.jsm", {});
-var {Services} = Components.utils.import("resource://gre/modules/Services.jsm", {});
-
-/**
- * Test optional duration reporting that can be used for telemetry.
- */
-add_task(function* duration() {
- Services.prefs.setBoolPref("toolkit.osfile.log", true);
- // Options structure passed to a OS.File copy method.
- let copyOptions = {
- // This field should be overridden with the actual duration
- // measurement.
- outExecutionDuration: null
- };
- let currentDir = yield OS.File.getCurrentDirectory();
- let pathSource = OS.Path.join(currentDir, "test_duration.js");
- let copyFile = pathSource + ".bak";
- function testOptions(options, name) {
- do_print("Checking outExecutionDuration for operation: " + name);
- do_print(name + ": Gathered method duration time: " +
- options.outExecutionDuration + "ms");
- // Making sure that duration was updated.
- do_check_eq(typeof options.outExecutionDuration, "number");
- do_check_true(options.outExecutionDuration >= 0);
- };
- // Testing duration of OS.File.copy.
- yield OS.File.copy(pathSource, copyFile, copyOptions);
- testOptions(copyOptions, "OS.File.copy");
- yield OS.File.remove(copyFile);
-
- // Trying an operation where options are cloned.
- let pathDest = OS.Path.join(OS.Constants.Path.tmpDir,
- "osfile async test read writeAtomic.tmp");
- let tmpPath = pathDest + ".tmp";
- let readOptions = {
- outExecutionDuration: null
- };
- let contents = yield OS.File.read(pathSource, undefined, readOptions);
- testOptions(readOptions, "OS.File.read");
- // Options structure passed to a OS.File writeAtomic method.
- let writeAtomicOptions = {
- // This field should be first initialized with the actual
- // duration measurement then progressively incremented.
- outExecutionDuration: null,
- tmpPath: tmpPath
- };
- yield OS.File.writeAtomic(pathDest, contents, writeAtomicOptions);
- testOptions(writeAtomicOptions, "OS.File.writeAtomic");
- yield OS.File.remove(pathDest);
-
- do_print("Ensuring that we can use outExecutionDuration to accumulate durations");
-
- let ARBITRARY_BASE_DURATION = 5;
- copyOptions = {
- // This field should now be incremented with the actual duration
- // measurement.
- outExecutionDuration: ARBITRARY_BASE_DURATION
- };
- let backupDuration = ARBITRARY_BASE_DURATION;
- // Testing duration of OS.File.copy.
- yield OS.File.copy(pathSource, copyFile, copyOptions);
-
- do_check_true(copyOptions.outExecutionDuration >= backupDuration);
-
- backupDuration = copyOptions.outExecutionDuration;
- yield OS.File.remove(copyFile, copyOptions);
- do_check_true(copyOptions.outExecutionDuration >= backupDuration);
-
- // Trying an operation where options are cloned.
- // Options structure passed to a OS.File writeAtomic method.
- writeAtomicOptions = {
- // This field should be overridden with the actual duration
- // measurement.
- outExecutionDuration: copyOptions.outExecutionDuration,
- tmpPath: tmpPath
- };
- backupDuration = writeAtomicOptions.outExecutionDuration;
-
- yield OS.File.writeAtomic(pathDest, contents, writeAtomicOptions);
- do_check_true(copyOptions.outExecutionDuration >= backupDuration);
- OS.File.remove(pathDest);
-
- // Testing an operation that doesn't take arguments at all
- let file = yield OS.File.open(pathSource);
- yield file.stat();
- yield file.close();
-});
-
-function run_test() {
- run_next_test();
-}
diff --git a/toolkit/components/osfile/tests/xpcshell/test_exception.js b/toolkit/components/osfile/tests/xpcshell/test_exception.js
deleted file mode 100644
index 1282adb3e1..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_exception.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/**
- * Test that functions throw the appropriate exceptions.
- */
-
-"use strict";
-
-var EXISTING_FILE = do_get_file("xpcshell.ini").path;
-
-
-// Tests on |open|
-
-add_test_pair(function test_typeerror() {
- let exn;
- try {
- let fd = yield OS.File.open("/tmp", {no_such_key: 1});
- do_print("Fd: " + fd);
- } catch (ex) {
- exn = ex;
- }
- do_print("Exception: " + exn);
- do_check_true(exn.constructor.name == "TypeError");
-});
-
-// Tests on |read|
-
-add_test_pair(function* test_bad_encoding() {
- do_print("Testing with a wrong encoding");
- try {
- yield OS.File.read(EXISTING_FILE, { encoding: "baby-speak-encoded" });
- do_throw("Should have thrown with an ex.becauseInvalidArgument");
- } catch (ex if ex.becauseInvalidArgument) {
- do_print("Wrong encoding caused the correct exception");
- }
-
- try {
- yield OS.File.read(EXISTING_FILE, { encoding: 4 });
- do_throw("Should have thrown a TypeError");
- } catch (ex if ex.constructor.name == "TypeError") {
- // Note that TypeError doesn't carry across compartments
- do_print("Non-string encoding caused the correct exception");
- }
- });
-
-add_test_pair(function* test_bad_compression() {
- do_print("Testing with a non-existing compression");
- try {
- yield OS.File.read(EXISTING_FILE, { compression: "mmmh-crunchy" });
- do_throw("Should have thrown with an ex.becauseInvalidArgument");
- } catch (ex if ex.becauseInvalidArgument) {
- do_print("Wrong encoding caused the correct exception");
- }
-
- do_print("Testing with a bad type for option compression");
- try {
- yield OS.File.read(EXISTING_FILE, { compression: 5 });
- do_throw("Should have thrown a TypeError");
- } catch (ex if ex.constructor.name == "TypeError") {
- // Note that TypeError doesn't carry across compartments
- do_print("Non-string encoding caused the correct exception");
- }
-});
-
-add_test_pair(function* test_bad_bytes() {
- do_print("Testing with a bad type for option bytes");
- try {
- yield OS.File.read(EXISTING_FILE, { bytes: "five" });
- do_throw("Should have thrown a TypeError");
- } catch (ex if ex.constructor.name == "TypeError") {
- // Note that TypeError doesn't carry across compartments
- do_print("Non-number bytes caused the correct exception");
- }
-});
-
-add_test_pair(function* read_non_existent() {
- do_print("Testing with a non-existent file");
- try {
- yield OS.File.read("I/do/not/exist");
- do_throw("Should have thrown with an ex.becauseNoSuchFile");
- } catch (ex if ex.becauseNoSuchFile) {
- do_print("Correct exceptions");
- }
-});
-
-function run_test() {
- run_next_test();
-}
diff --git a/toolkit/components/osfile/tests/xpcshell/test_file_URL_conversion.js b/toolkit/components/osfile/tests/xpcshell/test_file_URL_conversion.js
deleted file mode 100644
index 3ec42065bd..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_file_URL_conversion.js
+++ /dev/null
@@ -1,114 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-function run_test() {
- Components.utils.import("resource://gre/modules/Services.jsm");
- Components.utils.import("resource://gre/modules/osfile.jsm");
- Components.utils.import("resource://gre/modules/FileUtils.jsm");
-
- let isWindows = ("@mozilla.org/windows-registry-key;1" in Components.classes);
-
- // Test cases for filePathToURI
- let paths = isWindows ? [
- 'C:\\',
- 'C:\\test',
- 'C:\\test\\',
- 'C:\\test%2f',
- 'C:\\test\\test\\test',
- 'C:\\test;+%',
- 'C:\\test?action=index\\',
- 'C:\\test\ test',
- '\\\\C:\\a\\b\\c',
- '\\\\Server\\a\\b\\c',
-
- // note that per http://support.microsoft.com/kb/177506 (under more info),
- // the following characters are allowed on Windows:
- 'C:\\char^',
- 'C:\\char&',
- 'C:\\char\'',
- 'C:\\char@',
- 'C:\\char{',
- 'C:\\char}',
- 'C:\\char[',
- 'C:\\char]',
- 'C:\\char,',
- 'C:\\char$',
- 'C:\\char=',
- 'C:\\char!',
- 'C:\\char-',
- 'C:\\char#',
- 'C:\\char(',
- 'C:\\char)',
- 'C:\\char%',
- 'C:\\char.',
- 'C:\\char+',
- 'C:\\char~',
- 'C:\\char_'
- ] : [
- '/',
- '/test',
- '/test/',
- '/test%2f',
- '/test/test/test',
- '/test;+%',
- '/test?action=index/',
- '/test\ test',
- '/punctuation/;,/?:@&=+$-_.!~*\'()[]"#',
- '/CasePreserving'
- ];
-
- // some additional URIs to test, beyond those generated from paths
- let uris = isWindows ? [
- 'file:///C:/test/',
- 'file://localhost/C:/test',
- 'file:///c:/test/test.txt',
- //'file:///C:/foo%2f', // trailing, encoded slash
- 'file:///C:/%3f%3F',
- 'file:///C:/%3b%3B',
- 'file:///C:/%3c%3C', // not one of the special-cased ? or ;
- 'file:///C:/%78', // 'x', not usually uri encoded
- 'file:///C:/test#frag', // a fragment identifier
- 'file:///C:/test?action=index' // an actual query component
- ] : [
- 'file:///test/',
- 'file://localhost/test',
- 'file:///test/test.txt',
- 'file:///foo%2f', // trailing, encoded slash
- 'file:///%3f%3F',
- 'file:///%3b%3B',
- 'file:///%3c%3C', // not one of the special-cased ? or ;
- 'file:///%78', // 'x', not usually uri encoded
- 'file:///test#frag', // a fragment identifier
- 'file:///test?action=index' // an actual query component
- ];
-
- for (let path of paths) {
- // convert that to a uri using FileUtils and Services, which toFileURI is trying to model
- let file = FileUtils.File(path);
- let uri = Services.io.newFileURI(file).spec;
- do_check_eq(uri, OS.Path.toFileURI(path));
-
- // keep the resulting URI to try the reverse, except for "C:\" for which the
- // behavior of nsIFileURL and OS.File is inconsistent
- if (path != "C:\\") {
- uris.push(uri);
- }
- }
-
- for (let uri of uris) {
- // convert URIs to paths with nsIFileURI, which fromFileURI is trying to model
- let path = Services.io.newURI(uri, null, null).QueryInterface(Components.interfaces.nsIFileURL).file.path;
- do_check_eq(path, OS.Path.fromFileURI(uri));
- }
-
- // check that non-file URLs aren't allowed
- let thrown = false;
- try {
- OS.Path.fromFileURI('http://test.com')
- } catch (e) {
- do_check_eq(e.message, "fromFileURI expects a file URI");
- thrown = true;
- }
- do_check_true(thrown);
-}
diff --git a/toolkit/components/osfile/tests/xpcshell/test_loader.js b/toolkit/components/osfile/tests/xpcshell/test_loader.js
deleted file mode 100644
index dcfa819be8..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_loader.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-/**
- * Test that OS.File can be loaded using the CommonJS loader.
- */
-
-var { Loader } = Components.utils.import('resource://gre/modules/commonjs/toolkit/loader.js', {});
-
-function run_test() {
- run_next_test();
-}
-
-
-add_task(function*() {
- let dataDir = Services.io.newFileURI(do_get_file("test_loader/", true)).spec + "/";
- let loader = Loader.Loader({
- paths: {'': dataDir }
- });
-
- let require = Loader.Require(loader, Loader.Module('module_test_loader', 'foo'));
- do_print("Require is ready");
- try {
- require('module_test_loader');
- } catch (error) {
- dump('Bootstrap error: ' +
- (error.message ? error.message : String(error)) + '\n' +
- (error.stack || error.fileName + ': ' + error.lineNumber) + '\n');
-
- throw error;
- }
-
- do_print("Require has worked");
-});
-
diff --git a/toolkit/components/osfile/tests/xpcshell/test_loader/module_test_loader.js b/toolkit/components/osfile/tests/xpcshell/test_loader/module_test_loader.js
deleted file mode 100644
index 18356d6ad8..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_loader/module_test_loader.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-// Load OS.File from a module loaded with the CommonJS/addon-sdk loader
-
-var {Cu} = require("chrome");
-Cu.import('resource://gre/modules/osfile.jsm');
diff --git a/toolkit/components/osfile/tests/xpcshell/test_logging.js b/toolkit/components/osfile/tests/xpcshell/test_logging.js
deleted file mode 100644
index 133909e0be..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_logging.js
+++ /dev/null
@@ -1,74 +0,0 @@
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/Services.jsm");
-
-/**
- * Tests logging by passing OS.Shared.LOG both an object with its own
- * toString method, and one with the default.
- */
-function run_test() {
- do_test_pending();
- let messageCount = 0;
-
- do_print("Test starting");
-
- // Create a console listener.
- let consoleListener = {
- observe: function (aMessage) {
- //Ignore unexpected messages.
- if (!(aMessage instanceof Components.interfaces.nsIConsoleMessage)) {
- return;
- }
- // This is required, as printing to the |Services.console|
- // while in the observe function causes an exception.
- do_execute_soon(function() {
- do_print("Observing message " + aMessage.message);
- if (aMessage.message.indexOf("TEST OS") < 0) {
- return;
- }
-
- ++messageCount;
- if(messageCount == 1) {
- do_check_eq(aMessage.message, "TEST OS {\"name\":\"test\"}\n");
- }
- if(messageCount == 2) {
- do_check_eq(aMessage.message, "TEST OS name is test\n");
- toggleConsoleListener(false);
- do_test_finished();
- }
- });
- }
- };
-
- // Set/Unset the console listener.
- function toggleConsoleListener (pref) {
- do_print("Setting console listener: " + pref);
- Services.prefs.setBoolPref("toolkit.osfile.log", pref);
- Services.prefs.setBoolPref("toolkit.osfile.log.redirect", pref);
- Services.console[pref ? "registerListener" : "unregisterListener"](
- consoleListener);
- }
-
- toggleConsoleListener(true);
-
- let objectDefault = {name: "test"};
- let CustomToString = function() {
- this.name = "test";
- };
- CustomToString.prototype.toString = function() {
- return "name is " + this.name;
- };
- let objectCustom = new CustomToString();
-
- do_print(OS.Shared.LOG.toSource());
-
- do_print("Logging 1");
- OS.Shared.LOG(objectDefault);
-
- do_print("Logging 2");
- OS.Shared.LOG(objectCustom);
- // Once both messages are observed OS.Shared.DEBUG, and OS.Shared.TEST
- // are reset to false.
-}
-
diff --git a/toolkit/components/osfile/tests/xpcshell/test_makeDir.js b/toolkit/components/osfile/tests/xpcshell/test_makeDir.js
deleted file mode 100644
index 5b9740a7ff..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_makeDir.js
+++ /dev/null
@@ -1,142 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/Services.jsm");
-
-var Path = OS.Path;
-var profileDir;
-
-do_register_cleanup(function() {
- Services.prefs.setBoolPref("toolkit.osfile.log", false);
-});
-
-function run_test() {
- run_next_test();
-}
-
-/**
- * Test OS.File.makeDir
- */
-
-add_task(function init() {
- // Set up profile. We create the directory in the profile, because the profile
- // is removed after every test run.
- do_get_profile();
- profileDir = OS.Constants.Path.profileDir;
- Services.prefs.setBoolPref("toolkit.osfile.log", true);
-});
-
-/**
- * Basic use
- */
-
-add_task(function* test_basic() {
- let dir = Path.join(profileDir, "directory");
-
- // Sanity checking for the test
- do_check_false((yield OS.File.exists(dir)));
-
- // Make a directory
- yield OS.File.makeDir(dir);
-
- //check if the directory exists
- yield OS.File.stat(dir);
-
- // Make a directory that already exists, this should succeed
- yield OS.File.makeDir(dir);
-
- // Make a directory with ignoreExisting
- yield OS.File.makeDir(dir, {ignoreExisting: true});
-
- // Make a directory with ignoreExisting false
- let exception = null;
- try {
- yield OS.File.makeDir(dir, {ignoreExisting: false});
- } catch (ex) {
- exception = ex;
- }
-
- do_check_true(!!exception);
- do_check_true(exception instanceof OS.File.Error);
- do_check_true(exception.becauseExists);
-});
-
-// Make a root directory that already exists
-add_task(function* test_root() {
- if (OS.Constants.Win) {
- yield OS.File.makeDir("C:");
- yield OS.File.makeDir("C:\\");
- } else {
- yield OS.File.makeDir("/");
- }
-});
-
-/**
- * Creating subdirectories
- */
-add_task(function test_option_from() {
- let dir = Path.join(profileDir, "a", "b", "c");
-
- // Sanity checking for the test
- do_check_false((yield OS.File.exists(dir)));
-
- // Make a directory
- yield OS.File.makeDir(dir, {from: profileDir});
-
- //check if the directory exists
- yield OS.File.stat(dir);
-
- // Make a directory that already exists, this should succeed
- yield OS.File.makeDir(dir);
-
- // Make a directory with ignoreExisting
- yield OS.File.makeDir(dir, {ignoreExisting: true});
-
- // Make a directory with ignoreExisting false
- let exception = null;
- try {
- yield OS.File.makeDir(dir, {ignoreExisting: false});
- } catch (ex) {
- exception = ex;
- }
-
- do_check_true(!!exception);
- do_check_true(exception instanceof OS.File.Error);
- do_check_true(exception.becauseExists);
-
- // Make a directory without |from| and fail
- let dir2 = Path.join(profileDir, "g", "h", "i");
- exception = null;
- try {
- yield OS.File.makeDir(dir2);
- } catch (ex) {
- exception = ex;
- }
-
- do_check_true(!!exception);
- do_check_true(exception instanceof OS.File.Error);
- do_check_true(exception.becauseNoSuchFile);
-
- // Test edge cases on paths
-
- let dir3 = Path.join(profileDir, "d", "", "e", "f");
- do_check_false((yield OS.File.exists(dir3)));
- yield OS.File.makeDir(dir3, {from: profileDir});
- do_check_true((yield OS.File.exists(dir3)));
-
- let dir4;
- if (OS.Constants.Win) {
- // Test that we can create a directory recursively even
- // if we have too many "\\".
- dir4 = profileDir + "\\\\g";
- } else {
- dir4 = profileDir + "////g";
- }
- do_check_false((yield OS.File.exists(dir4)));
- yield OS.File.makeDir(dir4, {from: profileDir});
- do_check_true((yield OS.File.exists(dir4)));
-});
diff --git a/toolkit/components/osfile/tests/xpcshell/test_open.js b/toolkit/components/osfile/tests/xpcshell/test_open.js
deleted file mode 100644
index 78772ad09a..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_open.js
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-
-function run_test() {
- run_next_test();
-}
-
-/**
- * Test OS.File.open for reading:
- * - with an existing file (should succeed);
- * - with a non-existing file (should fail);
- * - with inconsistent arguments (should fail).
- */
-add_task(function() {
- // Attempt to open a file that does not exist, ensure that it yields the
- // appropriate error.
- try {
- let fd = yield OS.File.open(OS.Path.join(".", "This file does not exist"));
- do_check_true(false, "File opening 1 succeeded (it should fail)");
- } catch (err if err instanceof OS.File.Error && err.becauseNoSuchFile) {
- do_print("File opening 1 failed " + err);
- }
-
- // Attempt to open a file with the wrong args, so that it fails before
- // serialization, ensure that it yields the appropriate error.
- do_print("Attempting to open a file with wrong arguments");
- try {
- let fd = yield OS.File.open(1, 2, 3);
- do_check_true(false, "File opening 2 succeeded (it should fail)" + fd);
- } catch (err) {
- do_print("File opening 2 failed " + err);
- do_check_false(err instanceof OS.File.Error,
- "File opening 2 returned something that is not a file error");
- do_check_true(err.constructor.name == "TypeError",
- "File opening 2 returned a TypeError");
- }
-
- // Attempt to open a file correctly
- do_print("Attempting to open a file correctly");
- let openedFile = yield OS.File.open(OS.Path.join(do_get_cwd().path, "test_open.js"));
- do_print("File opened correctly");
-
- do_print("Attempting to close a file correctly");
- yield openedFile.close();
-
- do_print("Attempting to close a file again");
- yield openedFile.close();
-});
-
-/**
- * Test the error thrown by OS.File.open when attempting to open a directory
- * that does not exist.
- */
-add_task(function test_error_attributes () {
-
- let dir = OS.Path.join(do_get_profile().path, "test_osfileErrorAttrs");
- let fpath = OS.Path.join(dir, "test_error_attributes.txt");
-
- try {
- yield OS.File.open(fpath, {truncate: true}, {});
- do_check_true(false, "Opening path suceeded (it should fail) " + fpath);
- } catch (err) {
- do_check_true(err instanceof OS.File.Error);
- do_check_true(err.becauseNoSuchFile);
- }
-});
diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_async.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_async.js
deleted file mode 100644
index 0f86b2ea8b..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_osfile_async.js
+++ /dev/null
@@ -1,16 +0,0 @@
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-
-/**
- * A trivial test ensuring that we can call osfile from xpcshell.
- * (see bug 808161)
- */
-
-function run_test() {
- do_test_pending();
- OS.File.getCurrentDirectory().then(
- do_test_finished,
- do_test_finished
- );
-}
diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_async_append.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_async_append.js
deleted file mode 100644
index 0aef2c58af..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_osfile_async_append.js
+++ /dev/null
@@ -1,122 +0,0 @@
-"use strict";
-
-do_print("starting tests");
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/Task.jsm");
-
-/**
- * A test to check that the |append| mode flag is correctly implemented.
- * (see bug 925865)
- */
-
-function setup_mode(mode) {
- // Complete mode.
- let realMode = {
- read: true,
- write: true
- };
- for (let k in mode) {
- realMode[k] = mode[k];
- }
- return realMode;
-}
-
-// Test append mode.
-function test_append(mode) {
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_async_append.tmp");
-
- // Clear any left-over files from previous runs.
- try {
- yield OS.File.remove(path);
- } catch (ex if ex.becauseNoSuchFile) {
- // ignore
- }
-
- try {
- mode = setup_mode(mode);
- mode.append = true;
- if (mode.trunc) {
- // Pre-fill file with some data to see if |trunc| actually works.
- yield OS.File.writeAtomic(path, new Uint8Array(500));
- }
- let file = yield OS.File.open(path, mode);
- try {
- yield file.write(new Uint8Array(1000));
- yield file.setPosition(0, OS.File.POS_START);
- yield file.read(100);
- // Should be at offset 100, length 1000 now.
- yield file.write(new Uint8Array(100));
- // Should be at offset 1100, length 1100 now.
- let stat = yield file.stat();
- do_check_eq(1100, stat.size);
- } finally {
- yield file.close();
- }
- } catch(ex) {
- try {
- yield OS.File.remove(path);
- } catch (ex if ex.becauseNoSuchFile) {
- // ignore.
- }
- }
-}
-
-// Test no-append mode.
-function test_no_append(mode) {
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_async_noappend.tmp");
-
- // Clear any left-over files from previous runs.
- try {
- yield OS.File.remove(path);
- } catch (ex if ex.becauseNoSuchFile) {
- // ignore
- }
-
- try {
- mode = setup_mode(mode);
- mode.append = false;
- if (mode.trunc) {
- // Pre-fill file with some data to see if |trunc| actually works.
- yield OS.File.writeAtomic(path, new Uint8Array(500));
- }
- let file = yield OS.File.open(path, mode);
- try {
- yield file.write(new Uint8Array(1000));
- yield file.setPosition(0, OS.File.POS_START);
- yield file.read(100);
- // Should be at offset 100, length 1000 now.
- yield file.write(new Uint8Array(100));
- // Should be at offset 200, length 1000 now.
- let stat = yield file.stat();
- do_check_eq(1000, stat.size);
- } finally {
- yield file.close();
- }
- } finally {
- try {
- yield OS.File.remove(path);
- } catch (ex if ex.becauseNoSuchFile) {
- // ignore.
- }
- }
-}
-
-var test_flags = [
- {},
- {create:true},
- {trunc:true}
-];
-function run_test() {
- do_test_pending();
-
- for (let t of test_flags) {
- add_task(test_append.bind(null, t));
- add_task(test_no_append.bind(null, t));
- }
- add_task(do_test_finished);
-
- run_next_test();
-}
diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_async_bytes.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_async_bytes.js
deleted file mode 100644
index 68fa9152cd..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_osfile_async_bytes.js
+++ /dev/null
@@ -1,39 +0,0 @@
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/Task.jsm");
-
-function run_test() {
- do_test_pending();
- run_next_test();
-}
-
-/**
- * Test to ensure that {bytes:} in options to |write| is correctly
- * preserved.
- */
-add_task(function* test_bytes() {
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_async_bytes.tmp");
- let file = yield OS.File.open(path, {trunc: true, read: true, write: true});
- try {
- try {
- // 1. Test write, by supplying {bytes:} options smaller than the actual
- // buffer.
- yield file.write(new Uint8Array(2048), {bytes: 1024});
- do_check_eq((yield file.stat()).size, 1024);
-
- // 2. Test that passing nullish values for |options| still works.
- yield file.setPosition(0, OS.File.POS_END);
- yield file.write(new Uint8Array(1024), null);
- yield file.write(new Uint8Array(1024), undefined);
- do_check_eq((yield file.stat()).size, 3072);
- } finally {
- yield file.close();
- }
- } finally {
- yield OS.File.remove(path);
- }
-});
-
-add_task(do_test_finished);
diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_async_copy.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_async_copy.js
deleted file mode 100644
index 9c52c8a80d..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_osfile_async_copy.js
+++ /dev/null
@@ -1,113 +0,0 @@
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/FileUtils.jsm");
-Components.utils.import("resource://gre/modules/NetUtil.jsm");
-Components.utils.import("resource://gre/modules/Services.jsm");
-Components.utils.import("resource://gre/modules/Promise.jsm");
-Components.utils.import("resource://gre/modules/Task.jsm");
-
-function run_test() {
- do_test_pending();
- run_next_test();
-}
-
-/**
- * A file that we know exists and that can be used for reading.
- */
-var EXISTING_FILE = "test_osfile_async_copy.js";
-
-/**
- * Fetch asynchronously the contents of a file using xpcom.
- *
- * Used for comparing xpcom-based results to os.file-based results.
- *
- * @param {string} path The _absolute_ path to the file.
- * @return {promise}
- * @resolves {string} The contents of the file.
- */
-var reference_fetch_file = function reference_fetch_file(path) {
- let promise = Promise.defer();
- let file = new FileUtils.File(path);
- NetUtil.asyncFetch({
- uri: NetUtil.newURI(file),
- loadUsingSystemPrincipal: true
- }, function(stream, status) {
- if (!Components.isSuccessCode(status)) {
- promise.reject(status);
- return;
- }
- let result, reject;
- try {
- result = NetUtil.readInputStreamToString(stream, stream.available());
- } catch (x) {
- reject = x;
- }
- stream.close();
- if (reject) {
- promise.reject(reject);
- } else {
- promise.resolve(result);
- }
- });
-
- return promise.promise;
-};
-
-/**
- * Compare asynchronously the contents two files using xpcom.
- *
- * Used for comparing xpcom-based results to os.file-based results.
- *
- * @param {string} a The _absolute_ path to the first file.
- * @param {string} b The _absolute_ path to the second file.
- *
- * @resolves {null}
- */
-var reference_compare_files = function reference_compare_files(a, b) {
- let a_contents = yield reference_fetch_file(a);
- let b_contents = yield reference_fetch_file(b);
- // Not using do_check_eq to avoid dumping the whole file to the log.
- // It is OK to === compare here, as both variables contain a string.
- do_check_true(a_contents === b_contents);
-};
-
-/**
- * Test to ensure that OS.File.copy works.
- */
-function test_copymove(options = {}) {
- let source = OS.Path.join((yield OS.File.getCurrentDirectory()),
- EXISTING_FILE);
- let dest = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_async_copy_dest.tmp");
- let dest2 = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_async_copy_dest2.tmp");
- try {
- // 1. Test copy.
- yield OS.File.copy(source, dest, options);
- yield reference_compare_files(source, dest);
- // 2. Test subsequent move.
- yield OS.File.move(dest, dest2);
- yield reference_compare_files(source, dest2);
- // 3. Check that the moved file was really moved.
- do_check_eq((yield OS.File.exists(dest)), false);
- } finally {
- try {
- yield OS.File.remove(dest);
- } catch (ex if ex.becauseNoSuchFile) {
- // ignore
- }
- try {
- yield OS.File.remove(dest2);
- } catch (ex if ex.becauseNoSuchFile) {
- // ignore
- }
- }
-}
-
-// Regular copy test.
-add_task(test_copymove);
-// Userland copy test.
-add_task(test_copymove.bind(null, {unixUserland: true}));
-
-add_task(do_test_finished);
diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_async_flush.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_async_flush.js
deleted file mode 100644
index 9ed087f4e9..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_osfile_async_flush.js
+++ /dev/null
@@ -1,30 +0,0 @@
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/Task.jsm");
-
-function run_test() {
- do_test_pending();
- run_next_test();
-}
-
-/**
- * Test to ensure that |File.prototype.flush| is available in the async API.
- */
-
-add_task(function test_flush() {
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_async_flush.tmp");
- let file = yield OS.File.open(path, {trunc: true, write: true});
- try {
- try {
- yield file.flush();
- } finally {
- yield file.close();
- }
- } finally {
- yield OS.File.remove(path);
- }
-});
-
-add_task(do_test_finished);
diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_async_largefiles.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_async_largefiles.js
deleted file mode 100644
index a9ac776b0b..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_osfile_async_largefiles.js
+++ /dev/null
@@ -1,153 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-Components.utils.import("resource://gre/modules/ctypes.jsm");
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/Task.jsm");
-
-/**
- * A test to check that .getPosition/.setPosition work with large files.
- * (see bug 952997)
- */
-
-// Test setPosition/getPosition.
-function test_setPosition(forward, current, backward) {
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_async_largefiles.tmp");
-
- // Clear any left-over files from previous runs.
- try {
- yield OS.File.remove(path);
- } catch (ex if ex.becauseNoSuchFile) {
- // ignore
- }
-
- try {
- let file = yield OS.File.open(path, {write:true, append:false});
- try {
- let pos = 0;
-
- // 1. seek forward from start
- do_print("Moving forward: " + forward);
- yield file.setPosition(forward, OS.File.POS_START);
- pos += forward;
- do_check_eq((yield file.getPosition()), pos);
-
- // 2. seek forward from current position
- do_print("Moving current: " + current);
- yield file.setPosition(current, OS.File.POS_CURRENT);
- pos += current;
- do_check_eq((yield file.getPosition()), pos);
-
- // 3. seek backward from current position
- do_print("Moving current backward: " + backward);
- yield file.setPosition(-backward, OS.File.POS_CURRENT);
- pos -= backward;
- do_check_eq((yield file.getPosition()), pos);
-
- } finally {
- yield file.setPosition(0, OS.File.POS_START);
- yield file.close();
- }
- } catch(ex) {
- try {
- yield OS.File.remove(path);
- } catch (ex if ex.becauseNoSuchFile) {
- // ignore.
- }
- do_throw(ex);
- }
-}
-
-// Test setPosition/getPosition expected failures.
-function test_setPosition_failures() {
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_async_largefiles.tmp");
-
- // Clear any left-over files from previous runs.
- try {
- yield OS.File.remove(path);
- } catch (ex if ex.becauseNoSuchFile) {
- // ignore
- }
-
- try {
- let file = yield OS.File.open(path, {write:true, append:false});
- try {
- let pos = 0;
-
- // 1. Use an invalid position value
- try {
- yield file.setPosition(0.5, OS.File.POS_START);
- do_throw("Shouldn't have succeeded");
- } catch (ex) {
- do_check_true(ex.toString().includes("can't pass"));
- }
- // Since setPosition should have bailed, it shouldn't have moved the
- // file pointer at all.
- do_check_eq((yield file.getPosition()), 0);
-
- // 2. Use an invalid position value
- try {
- yield file.setPosition(0xffffffff + 0.5, OS.File.POS_START);
- do_throw("Shouldn't have succeeded");
- } catch (ex) {
- do_check_true(ex.toString().includes("can't pass"));
- }
- // Since setPosition should have bailed, it shouldn't have moved the
- // file pointer at all.
- do_check_eq((yield file.getPosition()), 0);
-
- // 3. Use a position that cannot be represented as a double
- try {
- // Not all numbers after 9007199254740992 can be represented as a
- // double. E.g. in js 9007199254740992 + 1 == 9007199254740992
- yield file.setPosition(9007199254740992, OS.File.POS_START);
- yield file.setPosition(1, OS.File.POS_CURRENT);
- do_throw("Shouldn't have succeeded");
- } catch (ex) {
- do_print(ex.toString());
- do_check_true(!!ex);
- }
-
- } finally {
- yield file.setPosition(0, OS.File.POS_START);
- yield file.close();
- try {
- yield OS.File.remove(path);
- } catch (ex if ex.becauseNoSuchFile) {
- // ignore.
- }
- }
- } catch(ex) {
- do_throw(ex);
- }
-}
-
-function run_test() {
- // First verify stuff works for small values.
- add_task(test_setPosition.bind(null, 0, 100, 50));
- add_task(test_setPosition.bind(null, 1000, 100, 50));
- add_task(test_setPosition.bind(null, 1000, -100, -50));
-
- if (OS.Constants.Win || ctypes.off_t.size >= 8) {
- // Now verify stuff still works for large values.
- // 1. Multiple small seeks, which add up to > MAXINT32
- add_task(test_setPosition.bind(null, 0x7fffffff, 0x7fffffff, 0));
- // 2. Plain large seek, that should end up at 0 again.
- // 0xffffffff also happens to be the INVALID_SET_FILE_POINTER value on
- // Windows, so this also tests the error handling
- add_task(test_setPosition.bind(null, 0, 0xffffffff, 0xffffffff));
- // 3. Multiple large seeks that should end up > MAXINT32.
- add_task(test_setPosition.bind(null, 0xffffffff, 0xffffffff, 0xffffffff));
- // 5. Multiple large seeks with negative offsets.
- add_task(test_setPosition.bind(null, 0xffffffff, -0x7fffffff, 0x7fffffff));
-
- // 6. Check failures
- add_task(test_setPosition_failures);
- }
-
- run_next_test();
-}
diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_async_setDates.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_async_setDates.js
deleted file mode 100644
index 6a5ecd5e35..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_osfile_async_setDates.js
+++ /dev/null
@@ -1,211 +0,0 @@
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/Task.jsm");
-
-/**
- * A test to ensure that OS.File.setDates and OS.File.prototype.setDates are
- * working correctly.
- * (see bug 924916)
- */
-
-function run_test() {
- run_next_test();
-}
-
-// Non-prototypical tests, operating on path names.
-add_task(function* test_nonproto() {
- // First, create a file we can mess with.
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_async_setDates_nonproto.tmp");
- yield OS.File.writeAtomic(path, new Uint8Array(1));
-
- try {
- // 1. Try to set some well known dates.
- // We choose multiples of 2000ms, because the time stamp resolution of
- // the underlying OS might not support something more precise.
- const accDate = 2000;
- const modDate = 4000;
- {
- yield OS.File.setDates(path, accDate, modDate);
- let stat = yield OS.File.stat(path);
- do_check_eq(accDate, stat.lastAccessDate.getTime());
- do_check_eq(modDate, stat.lastModificationDate.getTime());
- }
-
- // 2.1 Try to omit modificationDate (which should then default to
- // |Date.now()|, expect for resolution differences).
- {
- yield OS.File.setDates(path, accDate);
- let stat = yield OS.File.stat(path);
- do_check_eq(accDate, stat.lastAccessDate.getTime());
- do_check_neq(modDate, stat.lastModificationDate.getTime());
- }
-
- // 2.2 Try to omit accessDate as well (which should then default to
- // |Date.now()|, expect for resolution differences).
- {
- yield OS.File.setDates(path);
- let stat = yield OS.File.stat(path);
- do_check_neq(accDate, stat.lastAccessDate.getTime());
- do_check_neq(modDate, stat.lastModificationDate.getTime());
- }
-
- // 3. Repeat 1., but with Date objects this time
- {
- yield OS.File.setDates(path, new Date(accDate), new Date(modDate));
- let stat = yield OS.File.stat(path);
- do_check_eq(accDate, stat.lastAccessDate.getTime());
- do_check_eq(modDate, stat.lastModificationDate.getTime());
- }
-
- // 4. Check that invalid params will cause an exception/rejection.
- {
- for (let p of ["invalid", new Uint8Array(1), NaN]) {
- try {
- yield OS.File.setDates(path, p, modDate);
- do_throw("Invalid access date should have thrown for: " + p);
- } catch (ex) {
- let stat = yield OS.File.stat(path);
- do_check_eq(accDate, stat.lastAccessDate.getTime());
- do_check_eq(modDate, stat.lastModificationDate.getTime());
- }
- try {
- yield OS.File.setDates(path, accDate, p);
- do_throw("Invalid modification date should have thrown for: " + p);
- } catch (ex) {
- let stat = yield OS.File.stat(path);
- do_check_eq(accDate, stat.lastAccessDate.getTime());
- do_check_eq(modDate, stat.lastModificationDate.getTime());
- }
- try {
- yield OS.File.setDates(path, p, p);
- do_throw("Invalid dates should have thrown for: " + p);
- } catch (ex) {
- let stat = yield OS.File.stat(path);
- do_check_eq(accDate, stat.lastAccessDate.getTime());
- do_check_eq(modDate, stat.lastModificationDate.getTime());
- }
- }
- }
- } finally {
- // Remove the temp file again
- yield OS.File.remove(path);
- }
-});
-
-// Prototypical tests, operating on |File| handles.
-add_task(function* test_proto() {
- if (OS.Constants.Sys.Name == "Android") {
- do_print("File.prototype.setDates is not implemented for Android");
- do_check_eq(OS.File.prototype.setDates, undefined);
- return;
- }
-
- // First, create a file we can mess with.
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_async_setDates_proto.tmp");
- yield OS.File.writeAtomic(path, new Uint8Array(1));
-
- try {
- let fd = yield OS.File.open(path, {write: true});
-
- try {
- // 1. Try to set some well known dates.
- // We choose multiples of 2000ms, because the time stamp resolution of
- // the underlying OS might not support something more precise.
- const accDate = 2000;
- const modDate = 4000;
- {
- yield fd.setDates(accDate, modDate);
- let stat = yield fd.stat();
- do_check_eq(accDate, stat.lastAccessDate.getTime());
- do_check_eq(modDate, stat.lastModificationDate.getTime());
- }
-
- // 2.1 Try to omit modificationDate (which should then default to
- // |Date.now()|, expect for resolution differences).
- {
- yield fd.setDates(accDate);
- let stat = yield fd.stat();
- do_check_eq(accDate, stat.lastAccessDate.getTime());
- do_check_neq(modDate, stat.lastModificationDate.getTime());
- }
-
- // 2.2 Try to omit accessDate as well (which should then default to
- // |Date.now()|, expect for resolution differences).
- {
- yield fd.setDates();
- let stat = yield fd.stat();
- do_check_neq(accDate, stat.lastAccessDate.getTime());
- do_check_neq(modDate, stat.lastModificationDate.getTime());
- }
-
- // 3. Repeat 1., but with Date objects this time
- {
- yield fd.setDates(new Date(accDate), new Date(modDate));
- let stat = yield fd.stat();
- do_check_eq(accDate, stat.lastAccessDate.getTime());
- do_check_eq(modDate, stat.lastModificationDate.getTime());
- }
-
- // 4. Check that invalid params will cause an exception/rejection.
- {
- for (let p of ["invalid", new Uint8Array(1), NaN]) {
- try {
- yield fd.setDates(p, modDate);
- do_throw("Invalid access date should have thrown for: " + p);
- } catch (ex) {
- let stat = yield fd.stat();
- do_check_eq(accDate, stat.lastAccessDate.getTime());
- do_check_eq(modDate, stat.lastModificationDate.getTime());
- }
- try {
- yield fd.setDates(accDate, p);
- do_throw("Invalid modification date should have thrown for: " + p);
- } catch (ex) {
- let stat = yield fd.stat();
- do_check_eq(accDate, stat.lastAccessDate.getTime());
- do_check_eq(modDate, stat.lastModificationDate.getTime());
- }
- try {
- yield fd.setDates(p, p);
- do_throw("Invalid dates should have thrown for: " + p);
- } catch (ex) {
- let stat = yield fd.stat();
- do_check_eq(accDate, stat.lastAccessDate.getTime());
- do_check_eq(modDate, stat.lastModificationDate.getTime());
- }
- }
- }
- } finally {
- yield fd.close();
- }
- } finally {
- // Remove the temp file again
- yield OS.File.remove(path);
- }
-});
-
-// Tests setting dates on directories.
-add_task(function* test_dirs() {
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_async_setDates_dir");
- yield OS.File.makeDir(path);
-
- try {
- // 1. Try to set some well known dates.
- // We choose multiples of 2000ms, because the time stamp resolution of
- // the underlying OS might not support something more precise.
- const accDate = 2000;
- const modDate = 4000;
- {
- yield OS.File.setDates(path, accDate, modDate);
- let stat = yield OS.File.stat(path);
- do_check_eq(accDate, stat.lastAccessDate.getTime());
- do_check_eq(modDate, stat.lastModificationDate.getTime());
- }
- } finally {
- yield OS.File.removeEmptyDir(path);
- }
-});
diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_async_setPermissions.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_async_setPermissions.js
deleted file mode 100644
index ab8bf7dd9b..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_osfile_async_setPermissions.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-/**
- * A test to ensure that OS.File.setPermissions and
- * OS.File.prototype.setPermissions are all working correctly.
- * (see bug 1001849)
- * These functions are currently Unix-specific. The manifest skips
- * the test on Windows.
- */
-
-/**
- * Helper function for test logging: prints a POSIX file permission mode as an
- * octal number, with a leading '0' per C (not JS) convention. When the
- * numeric value is 0o777 or lower, it is padded on the left with zeroes to
- * four digits wide.
- * Sample outputs: 0022, 0644, 04755.
- */
-function format_mode(mode) {
- if (mode <= 0o777) {
- return ("0000" + mode.toString(8)).slice(-4);
- } else {
- return "0" + mode.toString(8);
- }
-}
-
-const _umask = OS.Constants.Sys.umask;
-do_print("umask: " + format_mode(_umask));
-
-/**
- * Compute the mode that a file should have after applying the umask,
- * whatever it happens to be.
- */
-function apply_umask(mode) {
- return mode & ~_umask;
-}
-
-// Sequence of setPermission parameters and expected file mode. The first test
-// checks the permissions when the file is first created.
-var testSequence = [
- [null, apply_umask(0o600)],
- [{ unixMode: 0o4777 }, apply_umask(0o4777)],
- [{ unixMode: 0o4777, unixHonorUmask: false }, 0o4777],
- [{ unixMode: 0o4777, unixHonorUmask: true }, apply_umask(0o4777)],
- [undefined, apply_umask(0o600)],
- [{ unixMode: 0o666 }, apply_umask(0o666)],
- [{ unixMode: 0o600 }, apply_umask(0o600)],
- [{ unixMode: 0 }, 0],
- [{}, apply_umask(0o600)],
-];
-
-// Test application to paths.
-add_task(function* test_path_setPermissions() {
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_async_setPermissions_path.tmp");
- yield OS.File.writeAtomic(path, new Uint8Array(1));
-
- try {
- for (let [options, expectedMode] of testSequence) {
- if (options !== null) {
- do_print("Setting permissions to " + JSON.stringify(options));
- yield OS.File.setPermissions(path, options);
- }
-
- let stat = yield OS.File.stat(path);
- do_check_eq(format_mode(stat.unixMode), format_mode(expectedMode));
- }
- } finally {
- yield OS.File.remove(path);
- }
-});
-
-// Test application to open files.
-add_task(function* test_file_setPermissions() {
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_async_setPermissions_file.tmp");
- yield OS.File.writeAtomic(path, new Uint8Array(1));
-
- try {
- let fd = yield OS.File.open(path, { write: true });
- try {
- for (let [options, expectedMode] of testSequence) {
- if (options !== null) {
- do_print("Setting permissions to " + JSON.stringify(options));
- yield fd.setPermissions(options);
- }
-
- let stat = yield fd.stat();
- do_check_eq(format_mode(stat.unixMode), format_mode(expectedMode));
- }
- } finally {
- yield fd.close();
- }
- } finally {
- yield OS.File.remove(path);
- }
-});
-
-function run_test() {
- run_next_test();
-}
diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_closed.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_closed.js
deleted file mode 100644
index 5740f7f1ad..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_osfile_closed.js
+++ /dev/null
@@ -1,48 +0,0 @@
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/Task.jsm");
-
-function run_test() {
- do_test_pending();
- run_next_test();
-}
-
-add_task(function test_closed() {
- OS.Shared.DEBUG = true;
- let currentDir = yield OS.File.getCurrentDirectory();
- do_print("Open a file, ensure that we can call stat()");
- let path = OS.Path.join(currentDir, "test_osfile_closed.js");
- let file = yield OS.File.open(path);
- yield file.stat();
- do_check_true(true);
-
- yield file.close();
-
- do_print("Ensure that we cannot stat() on closed file");
- let exn;
- try {
- yield file.stat();
- } catch (ex) {
- exn = ex;
- }
- do_print("Ensure that this raises the correct error");
- do_check_true(!!exn);
- do_check_true(exn instanceof OS.File.Error);
- do_check_true(exn.becauseClosed);
-
- do_print("Ensure that we cannot read() on closed file");
- exn = null;
- try {
- yield file.read();
- } catch (ex) {
- exn = ex;
- }
- do_print("Ensure that this raises the correct error");
- do_check_true(!!exn);
- do_check_true(exn instanceof OS.File.Error);
- do_check_true(exn.becauseClosed);
-
-});
-
-add_task(do_test_finished);
diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_error.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_error.js
deleted file mode 100644
index a1c319eca7..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_osfile_error.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-var {OS: {File, Path, Constants}} = Components.utils.import("resource://gre/modules/osfile.jsm", {});
-Components.utils.import("resource://gre/modules/Task.jsm");
-
-function run_test() {
- run_next_test();
-}
-
-add_task(function* testFileError_with_writeAtomic() {
- let DEFAULT_CONTENTS = "default contents" + Math.random();
- let path = Path.join(Constants.Path.tmpDir,
- "testFileError.tmp");
- yield File.remove(path);
- yield File.writeAtomic(path, DEFAULT_CONTENTS);
- let exception;
- try {
- yield File.writeAtomic(path, DEFAULT_CONTENTS, { noOverwrite: true });
- } catch (ex) {
- exception = ex;
- }
- do_check_true(exception instanceof File.Error);
- do_check_true(exception.path == path);
-});
-
-add_task(function* testFileError_with_makeDir() {
- let path = Path.join(Constants.Path.tmpDir,
- "directory");
- yield File.removeDir(path);
- yield File.makeDir(path);
- let exception;
- try {
- yield File.makeDir(path, { ignoreExisting: false });
- } catch (ex) {
- exception = ex;
- }
- do_check_true(exception instanceof File.Error);
- do_check_true(exception.path == path);
-});
-
-add_task(function* testFileError_with_move() {
- let DEFAULT_CONTENTS = "default contents" + Math.random();
- let sourcePath = Path.join(Constants.Path.tmpDir,
- "src.tmp");
- let destPath = Path.join(Constants.Path.tmpDir,
- "dest.tmp");
- yield File.remove(sourcePath);
- yield File.remove(destPath);
- yield File.writeAtomic(sourcePath, DEFAULT_CONTENTS);
- yield File.writeAtomic(destPath, DEFAULT_CONTENTS);
- let exception;
- try {
- yield File.move(sourcePath, destPath, { noOverwrite: true });
- } catch (ex) {
- exception = ex;
- }
- do_print(exception);
- do_check_true(exception instanceof File.Error);
- do_check_true(exception.path == sourcePath);
-});
diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_kill.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_kill.js
deleted file mode 100644
index e32c37224f..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_osfile_kill.js
+++ /dev/null
@@ -1,100 +0,0 @@
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-
-// We want the actual global to get at the internals since Scheduler is not
-// exported.
-var AsyncFrontGlobal = Components.utils.import(
- "resource://gre/modules/osfile/osfile_async_front.jsm",
- null);
-var Scheduler = AsyncFrontGlobal.Scheduler;
-
-/**
- * Verify that Scheduler.kill() interacts with other OS.File requests correctly,
- * and that no requests are lost. This is relevant because on B2G we
- * auto-kill the worker periodically, making it very possible for valid requests
- * to be interleaved with the automatic kill().
- *
- * This test is being created with the fix for Bug 1125989 where `kill` queue
- * management was found to be buggy. It is a glass-box test that explicitly
- * re-creates the observed failure situation; it is not guaranteed to prevent
- * all future regressions. The following is a detailed explanation of the test
- * for your benefit if this test ever breaks or you are wondering what was the
- * point of all this. You might want to skim the code below first.
- *
- * OS.File maintains a `queue` of operations to be performed. This queue is
- * nominally implemented as a chain of promises. Every time a new job is
- * OS.File.push()ed, it effectively becomes the new `queue` promise. (An
- * extra promise is interposed with a rejection handler to avoid the rejection
- * cascading, but that does not matter for our purposes.)
- *
- * The flaw in `kill` was that it would wait for the `queue` to complete before
- * replacing `queue`. As a result, another OS.File operation could use `push`
- * (by way of OS.File.post()) to also use .then() on the same `queue` promise.
- * Accordingly, assuming that promise was not yet resolved (due to a pending
- * OS.File request), when it was resolved, both the task scheduled in `kill`
- * and in `post` would be triggered. Both of those tasks would run until
- * encountering a call to worker.post().
- *
- * Re-creating this race is not entirely trivial because of the large number of
- * promises used by the code causing control flow to repeatedly be deferred. In
- * a slightly simpler world we could run the follwing in the same turn of the
- * event loop and trigger the problem.
- * - any OS.File request
- * - Scheduler.kill()
- * - any OS.File request
- *
- * However, we need the Scheduler.kill task to reach the point where it is
- * waiting on the same `queue` that another task has been scheduled against.
- * Since the `kill` task yields on the `killQueue` promise prior to yielding
- * on `queue`, however, some turns of the event loop are required. Happily,
- * for us, as discussed above, the problem triggers when we have two promises
- * scheduled on the `queue`, so we can just wait to schedule the second OS.File
- * request on the queue. (Note that because of the additional then() added to
- * eat rejections, there is an important difference between the value of
- * `queue` and the value returned by the first OS.File request.)
- */
-add_task(function* test_kill_race() {
- // Ensure the worker has been created and that SET_DEBUG has taken effect.
- // We have chosen OS.File.exists for our tests because it does not trigger
- // a rejection and we absolutely do not care what the operation is other
- // than it does not invoke a native fast-path.
- yield OS.File.exists('foo.foo');
-
- do_print('issuing first request');
- let firstRequest = OS.File.exists('foo.bar');
- let secondRequest;
- let secondResolved = false;
-
- // As noted in our big block comment, we want to wait to schedule the
- // second request so that it races `kill`'s call to `worker.post`. Having
- // ourselves wait on the same promise, `queue`, and registering ourselves
- // before we issue the kill request means we will get run before the `kill`
- // task resumes and allow us to precisely create the desired race.
- Scheduler.queue.then(function() {
- do_print('issuing second request');
- secondRequest = OS.File.exists('foo.baz');
- secondRequest.then(function() {
- secondResolved = true;
- });
- });
-
- do_print('issuing kill request');
- let killRequest = Scheduler.kill({ reset: true, shutdown: false });
-
- // Wait on the killRequest so that we can schedule a new OS.File request
- // after it completes...
- yield killRequest;
- // ...because our ordering guarantee ensures that there is at most one
- // worker (and this usage here should not be vulnerable even with the
- // bug present), so when this completes the secondRequest has either been
- // resolved or lost.
- yield OS.File.exists('foo.goz');
-
- ok(secondResolved,
- 'The second request was resolved so we avoided the bug. Victory!');
-});
-
-function run_test() {
- run_next_test();
-}
diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_win_async_setPermissions.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_win_async_setPermissions.js
deleted file mode 100644
index 990d722f5c..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_osfile_win_async_setPermissions.js
+++ /dev/null
@@ -1,114 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-/**
- * A test to ensure that OS.File.setPermissions and
- * OS.File.prototype.setPermissions are all working correctly.
- * (see bug 1022816)
- * The manifest tests on Windows.
- */
-
-// Sequence of setPermission parameters.
-var testSequence = [
- [ { winAttributes: { readOnly: true, system: true, hidden: true } },
- { readOnly: true, system: true, hidden: true } ],
- [ { winAttributes: { readOnly: false } },
- { readOnly: false, system: true, hidden: true } ],
- [ { winAttributes: { system: false } },
- { readOnly: false, system: false, hidden: true } ],
- [ { winAttributes: { hidden: false } },
- { readOnly: false, system: false, hidden: false } ],
- [ { winAttributes: {readOnly: true, system: false, hidden: false} },
- { readOnly: true, system: false, hidden: false } ],
- [ { winAttributes: {readOnly: false, system: true, hidden: false} },
- { readOnly: false, system: true, hidden: false } ],
- [ { winAttributes: {readOnly: false, system: false, hidden: true} },
- { readOnly: false, system: false, hidden: true } ],
-];
-
-// Test application to paths.
-add_task(function* test_path_setPermissions() {
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_win_async_setPermissions_path.tmp");
- yield OS.File.writeAtomic(path, new Uint8Array(1));
-
- try {
- for (let [options, attributesExpected] of testSequence) {
- if (options !== null) {
- do_print("Setting permissions to " + JSON.stringify(options));
- yield OS.File.setPermissions(path, options);
- }
-
- let stat = yield OS.File.stat(path);
- do_print("Got stat winAttributes: " + JSON.stringify(stat.winAttributes));
-
- do_check_eq(stat.winAttributes.readOnly, attributesExpected.readOnly);
- do_check_eq(stat.winAttributes.system, attributesExpected.system);
- do_check_eq(stat.winAttributes.hidden, attributesExpected.hidden);
-
- }
- } finally {
- yield OS.File.remove(path);
- }
-});
-
-// Test application to open files.
-add_task(function* test_file_setPermissions() {
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_win_async_setPermissions_file.tmp");
- yield OS.File.writeAtomic(path, new Uint8Array(1));
-
- try {
- let fd = yield OS.File.open(path, { write: true });
- try {
- for (let [options, attributesExpected] of testSequence) {
- if (options !== null) {
- do_print("Setting permissions to " + JSON.stringify(options));
- yield fd.setPermissions(options);
- }
-
- let stat = yield fd.stat();
- do_print("Got stat winAttributes: " + JSON.stringify(stat.winAttributes));
- do_check_eq(stat.winAttributes.readOnly, attributesExpected.readOnly);
- do_check_eq(stat.winAttributes.system, attributesExpected.system);
- do_check_eq(stat.winAttributes.hidden, attributesExpected.hidden);
- }
- } finally {
- yield fd.close();
- }
- } finally {
- yield OS.File.remove(path);
- }
-});
-
-// Test application to Check setPermissions on a non-existant file path.
-add_task(function* test_non_existant_file_path_setPermissions() {
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_win_async_setPermissions_path.tmp");
- Assert.rejects(OS.File.setPermissions(path, {winAttributes: {readOnly: true}}),
- /The system cannot find the file specified/,
- "setPermissions failed as expected on a non-existant file path");
-});
-
-// Test application to Check setPermissions on a invalid file handle.
-add_task(function* test_closed_file_handle_setPermissions() {
- let path = OS.Path.join(OS.Constants.Path.tmpDir,
- "test_osfile_win_async_setPermissions_path.tmp");
- yield OS.File.writeAtomic(path, new Uint8Array(1));
-
- try {
- let fd = yield OS.File.open(path, { write: true });
- yield fd.close();
- Assert.rejects(fd.setPermissions(path, {winAttributes: {readOnly: true}}),
- /The handle is invalid/,
- "setPermissions failed as expected on a invalid file handle");
- } finally {
- yield OS.File.remove(path);
- }
-});
-
-function run_test() {
- run_next_test();
-}
diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_writeAtomic_backupTo_option.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_writeAtomic_backupTo_option.js
deleted file mode 100644
index adf345b0c6..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_osfile_writeAtomic_backupTo_option.js
+++ /dev/null
@@ -1,143 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-var {OS: {File, Path, Constants}} = Components.utils.import("resource://gre/modules/osfile.jsm", {});
-Components.utils.import("resource://gre/modules/Task.jsm");
-
-/**
- * Remove all temporary files and back up files, including
- * test_backupTo_option_with_tmpPath.tmp
- * test_backupTo_option_with_tmpPath.tmp.backup
- * test_backupTo_option_without_tmpPath.tmp
- * test_backupTo_option_without_tmpPath.tmp.backup
- * test_non_backupTo_option.tmp
- * test_non_backupTo_option.tmp.backup
- * test_backupTo_option_without_destination_file.tmp
- * test_backupTo_option_without_destination_file.tmp.backup
- * test_backupTo_option_with_backup_file.tmp
- * test_backupTo_option_with_backup_file.tmp.backup
- */
-function clearFiles() {
- return Task.spawn(function () {
- let files = ["test_backupTo_option_with_tmpPath.tmp",
- "test_backupTo_option_without_tmpPath.tmp",
- "test_non_backupTo_option.tmp",
- "test_backupTo_option_without_destination_file.tmp",
- "test_backupTo_option_with_backup_file.tmp"];
- for (let file of files) {
- let path = Path.join(Constants.Path.tmpDir, file);
- yield File.remove(path);
- yield File.remove(path + ".backup");
- }
- });
-}
-
-function run_test() {
- run_next_test();
-}
-
-add_task(function* init() {
- yield clearFiles();
-});
-
-/**
- * test when
- * |backupTo| specified
- * |tmpPath| specified
- * destination file exists
- * @result destination file will be backed up
- */
-add_task(function* test_backupTo_option_with_tmpPath() {
- let DEFAULT_CONTENTS = "default contents" + Math.random();
- let WRITE_CONTENTS = "abc" + Math.random();
- let path = Path.join(Constants.Path.tmpDir,
- "test_backupTo_option_with_tmpPath.tmp");
- yield File.writeAtomic(path, DEFAULT_CONTENTS);
- yield File.writeAtomic(path, WRITE_CONTENTS, { tmpPath: path + ".tmp",
- backupTo: path + ".backup" });
- do_check_true((yield File.exists(path + ".backup")));
- let contents = yield File.read(path + ".backup");
- do_check_eq(DEFAULT_CONTENTS, (new TextDecoder()).decode(contents));
-});
-
-/**
- * test when
- * |backupTo| specified
- * |tmpPath| not specified
- * destination file exists
- * @result destination file will be backed up
- */
-add_task(function* test_backupTo_option_without_tmpPath() {
- let DEFAULT_CONTENTS = "default contents" + Math.random();
- let WRITE_CONTENTS = "abc" + Math.random();
- let path = Path.join(Constants.Path.tmpDir,
- "test_backupTo_option_without_tmpPath.tmp");
- yield File.writeAtomic(path, DEFAULT_CONTENTS);
- yield File.writeAtomic(path, WRITE_CONTENTS, { backupTo: path + ".backup" });
- do_check_true((yield File.exists(path + ".backup")));
- let contents = yield File.read(path + ".backup");
- do_check_eq(DEFAULT_CONTENTS, (new TextDecoder()).decode(contents));
-});
-
-/**
- * test when
- * |backupTo| not specified
- * |tmpPath| not specified
- * destination file exists
- * @result destination file will not be backed up
- */
-add_task(function* test_non_backupTo_option() {
- let DEFAULT_CONTENTS = "default contents" + Math.random();
- let WRITE_CONTENTS = "abc" + Math.random();
- let path = Path.join(Constants.Path.tmpDir,
- "test_non_backupTo_option.tmp");
- yield File.writeAtomic(path, DEFAULT_CONTENTS);
- yield File.writeAtomic(path, WRITE_CONTENTS);
- do_check_false((yield File.exists(path + ".backup")));
-});
-
-/**
- * test when
- * |backupTo| specified
- * |tmpPath| not specified
- * destination file not exists
- * @result no back up file exists
- */
-add_task(function* test_backupTo_option_without_destination_file() {
- let DEFAULT_CONTENTS = "default contents" + Math.random();
- let WRITE_CONTENTS = "abc" + Math.random();
- let path = Path.join(Constants.Path.tmpDir,
- "test_backupTo_option_without_destination_file.tmp");
- yield File.remove(path);
- yield File.writeAtomic(path, WRITE_CONTENTS, { backupTo: path + ".backup" });
- do_check_false((yield File.exists(path + ".backup")));
-});
-
-/**
- * test when
- * |backupTo| specified
- * |tmpPath| not specified
- * backup file exists
- * destination file exists
- * @result destination file will be backed up
- */
-add_task(function* test_backupTo_option_with_backup_file() {
- let DEFAULT_CONTENTS = "default contents" + Math.random();
- let WRITE_CONTENTS = "abc" + Math.random();
- let path = Path.join(Constants.Path.tmpDir,
- "test_backupTo_option_with_backup_file.tmp");
- yield File.writeAtomic(path, DEFAULT_CONTENTS);
-
- yield File.writeAtomic(path + ".backup", new Uint8Array(1000));
-
- yield File.writeAtomic(path, WRITE_CONTENTS, { backupTo: path + ".backup" });
- do_check_true((yield File.exists(path + ".backup")));
- let contents = yield File.read(path + ".backup");
- do_check_eq(DEFAULT_CONTENTS, (new TextDecoder()).decode(contents));
-});
-
-add_task(function* cleanup() {
- yield clearFiles();
-});
diff --git a/toolkit/components/osfile/tests/xpcshell/test_osfile_writeAtomic_zerobytes.js b/toolkit/components/osfile/tests/xpcshell/test_osfile_writeAtomic_zerobytes.js
deleted file mode 100644
index a32a690e6f..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_osfile_writeAtomic_zerobytes.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-var SHARED_PATH;
-
-add_task(function* init() {
- do_get_profile();
- SHARED_PATH = OS.Path.join(OS.Constants.Path.profileDir, "test_osfile_write_zerobytes.tmp");
-});
-
-add_test_pair(function* test_osfile_writeAtomic_zerobytes() {
- let encoder = new TextEncoder();
- let string1 = "";
- let outbin = encoder.encode(string1);
- yield OS.File.writeAtomic(SHARED_PATH, outbin);
-
- let decoder = new TextDecoder();
- let bin = yield OS.File.read(SHARED_PATH);
- let string2 = decoder.decode(bin);
- // Checking if writeAtomic supports writing encoded zero-byte strings
- Assert.equal(string2, string1, "Read the expected (empty) string.");
-});
-
-function run_test() {
- run_next_test();
-} \ No newline at end of file
diff --git a/toolkit/components/osfile/tests/xpcshell/test_path.js b/toolkit/components/osfile/tests/xpcshell/test_path.js
deleted file mode 100644
index 76a507ee38..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_path.js
+++ /dev/null
@@ -1,159 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-Components.utils.import("resource://gre/modules/Services.jsm", this);
-Services.prefs.setBoolPref("toolkit.osfile.test.syslib_necessary", false);
- // We don't need libc/kernel32.dll for this test
-
-var ImportWin = {};
-var ImportUnix = {};
-Components.utils.import("resource://gre/modules/osfile/ospath_win.jsm", ImportWin);
-Components.utils.import("resource://gre/modules/osfile/ospath_unix.jsm", ImportUnix);
-
-var Win = ImportWin;
-var Unix = ImportUnix;
-
-function do_check_fail(f)
-{
- try {
- let result = f();
- do_print("Failed do_check_fail: " + result);
- do_check_true(false);
- } catch (ex) {
- do_check_true(true);
- }
-};
-
-function run_test()
-{
- do_print("Testing Windows paths");
-
- do_print("Backslash-separated, no drive");
- do_check_eq(Win.basename("a\\b"), "b");
- do_check_eq(Win.basename("a\\b\\"), "");
- do_check_eq(Win.basename("abc"), "abc");
- do_check_eq(Win.dirname("a\\b"), "a");
- do_check_eq(Win.dirname("a\\b\\"), "a\\b");
- do_check_eq(Win.dirname("a\\\\\\\\b"), "a");
- do_check_eq(Win.dirname("abc"), ".");
- do_check_eq(Win.normalize("\\a\\b\\c"), "\\a\\b\\c");
- do_check_eq(Win.normalize("\\a\\b\\\\\\\\c"), "\\a\\b\\c");
- do_check_eq(Win.normalize("\\a\\b\\c\\\\\\"), "\\a\\b\\c");
- do_check_eq(Win.normalize("\\a\\b\\c\\..\\..\\..\\d\\e\\f"), "\\d\\e\\f");
- do_check_eq(Win.normalize("a\\b\\c\\..\\..\\..\\d\\e\\f"), "d\\e\\f");
- do_check_fail(() => Win.normalize("\\a\\b\\c\\..\\..\\..\\..\\d\\e\\f"));
-
- do_check_eq(Win.join("\\tmp", "foo", "bar"), "\\tmp\\foo\\bar", "join \\tmp,foo,bar");
- do_check_eq(Win.join("\\tmp", "\\foo", "bar"), "\\foo\\bar", "join \\tmp,\\foo,bar");
- do_check_eq(Win.winGetDrive("\\tmp"), null);
- do_check_eq(Win.winGetDrive("\\tmp\\a\\b\\c\\d\\e"), null);
- do_check_eq(Win.winGetDrive("\\"), null);
-
-
- do_print("Backslash-separated, with a drive");
- do_check_eq(Win.basename("c:a\\b"), "b");
- do_check_eq(Win.basename("c:a\\b\\"), "");
- do_check_eq(Win.basename("c:abc"), "abc");
- do_check_eq(Win.dirname("c:a\\b"), "c:a");
- do_check_eq(Win.dirname("c:a\\b\\"), "c:a\\b");
- do_check_eq(Win.dirname("c:a\\\\\\\\b"), "c:a");
- do_check_eq(Win.dirname("c:abc"), "c:");
- let options = {
- winNoDrive: true
- };
- do_check_eq(Win.dirname("c:a\\b", options), "a");
- do_check_eq(Win.dirname("c:a\\b\\", options), "a\\b");
- do_check_eq(Win.dirname("c:a\\\\\\\\b", options), "a");
- do_check_eq(Win.dirname("c:abc", options), ".");
- do_check_eq(Win.join("c:", "abc"), "c:\\abc", "join c:,abc");
-
- do_check_eq(Win.normalize("c:"), "c:\\");
- do_check_eq(Win.normalize("c:\\"), "c:\\");
- do_check_eq(Win.normalize("c:\\a\\b\\c"), "c:\\a\\b\\c");
- do_check_eq(Win.normalize("c:\\a\\b\\\\\\\\c"), "c:\\a\\b\\c");
- do_check_eq(Win.normalize("c:\\\\\\\\a\\b\\c"), "c:\\a\\b\\c");
- do_check_eq(Win.normalize("c:\\a\\b\\c\\\\\\"), "c:\\a\\b\\c");
- do_check_eq(Win.normalize("c:\\a\\b\\c\\..\\..\\..\\d\\e\\f"), "c:\\d\\e\\f");
- do_check_eq(Win.normalize("c:a\\b\\c\\..\\..\\..\\d\\e\\f"), "c:\\d\\e\\f");
- do_check_fail(() => Win.normalize("c:\\a\\b\\c\\..\\..\\..\\..\\d\\e\\f"));
-
- do_check_eq(Win.join("c:\\", "foo"), "c:\\foo", "join c:\,foo");
- do_check_eq(Win.join("c:\\tmp", "foo", "bar"), "c:\\tmp\\foo\\bar", "join c:\\tmp,foo,bar");
- do_check_eq(Win.join("c:\\tmp", "\\foo", "bar"), "c:\\foo\\bar", "join c:\\tmp,\\foo,bar");
- do_check_eq(Win.join("c:\\tmp", "c:\\foo", "bar"), "c:\\foo\\bar", "join c:\\tmp,c:\\foo,bar");
- do_check_eq(Win.join("c:\\tmp", "c:foo", "bar"), "c:\\foo\\bar", "join c:\\tmp,c:foo,bar");
- do_check_eq(Win.winGetDrive("c:"), "c:");
- do_check_eq(Win.winGetDrive("c:\\"), "c:");
- do_check_eq(Win.winGetDrive("c:abc"), "c:");
- do_check_eq(Win.winGetDrive("c:abc\\d\\e\\f\\g"), "c:");
- do_check_eq(Win.winGetDrive("c:\\abc"), "c:");
- do_check_eq(Win.winGetDrive("c:\\abc\\d\\e\\f\\g"), "c:");
-
- do_print("Forwardslash-separated, no drive");
- do_check_eq(Win.normalize("/a/b/c"), "\\a\\b\\c");
- do_check_eq(Win.normalize("/a/b////c"), "\\a\\b\\c");
- do_check_eq(Win.normalize("/a/b/c///"), "\\a\\b\\c");
- do_check_eq(Win.normalize("/a/b/c/../../../d/e/f"), "\\d\\e\\f");
- do_check_eq(Win.normalize("a/b/c/../../../d/e/f"), "d\\e\\f");
-
- do_print("Forwardslash-separated, with a drive");
- do_check_eq(Win.normalize("c:/"), "c:\\");
- do_check_eq(Win.normalize("c:/a/b/c"), "c:\\a\\b\\c");
- do_check_eq(Win.normalize("c:/a/b////c"), "c:\\a\\b\\c");
- do_check_eq(Win.normalize("c:////a/b/c"), "c:\\a\\b\\c");
- do_check_eq(Win.normalize("c:/a/b/c///"), "c:\\a\\b\\c");
- do_check_eq(Win.normalize("c:/a/b/c/../../../d/e/f"), "c:\\d\\e\\f");
- do_check_eq(Win.normalize("c:a/b/c/../../../d/e/f"), "c:\\d\\e\\f");
-
- do_print("Backslash-separated, UNC-style");
- do_check_eq(Win.basename("\\\\a\\b"), "b");
- do_check_eq(Win.basename("\\\\a\\b\\"), "");
- do_check_eq(Win.basename("\\\\abc"), "");
- do_check_eq(Win.dirname("\\\\a\\b"), "\\\\a");
- do_check_eq(Win.dirname("\\\\a\\b\\"), "\\\\a\\b");
- do_check_eq(Win.dirname("\\\\a\\\\\\\\b"), "\\\\a");
- do_check_eq(Win.dirname("\\\\abc"), "\\\\abc");
- do_check_eq(Win.normalize("\\\\a\\b\\c"), "\\\\a\\b\\c");
- do_check_eq(Win.normalize("\\\\a\\b\\\\\\\\c"), "\\\\a\\b\\c");
- do_check_eq(Win.normalize("\\\\a\\b\\c\\\\\\"), "\\\\a\\b\\c");
- do_check_eq(Win.normalize("\\\\a\\b\\c\\..\\..\\d\\e\\f"), "\\\\a\\d\\e\\f");
- do_check_fail(() => Win.normalize("\\\\a\\b\\c\\..\\..\\..\\d\\e\\f"));
-
- do_check_eq(Win.join("\\\\a\\tmp", "foo", "bar"), "\\\\a\\tmp\\foo\\bar");
- do_check_eq(Win.join("\\\\a\\tmp", "\\foo", "bar"), "\\\\a\\foo\\bar");
- do_check_eq(Win.join("\\\\a\\tmp", "\\\\foo\\", "bar"), "\\\\foo\\bar");
- do_check_eq(Win.winGetDrive("\\\\"), null);
- do_check_eq(Win.winGetDrive("\\\\c"), "\\\\c");
- do_check_eq(Win.winGetDrive("\\\\c\\abc"), "\\\\c");
-
- do_print("Testing unix paths");
- do_check_eq(Unix.basename("a/b"), "b");
- do_check_eq(Unix.basename("a/b/"), "");
- do_check_eq(Unix.basename("abc"), "abc");
- do_check_eq(Unix.dirname("a/b"), "a");
- do_check_eq(Unix.dirname("a/b/"), "a/b");
- do_check_eq(Unix.dirname("a////b"), "a");
- do_check_eq(Unix.dirname("abc"), ".");
- do_check_eq(Unix.normalize("/a/b/c"), "/a/b/c");
- do_check_eq(Unix.normalize("/a/b////c"), "/a/b/c");
- do_check_eq(Unix.normalize("////a/b/c"), "/a/b/c");
- do_check_eq(Unix.normalize("/a/b/c///"), "/a/b/c");
- do_check_eq(Unix.normalize("/a/b/c/../../../d/e/f"), "/d/e/f");
- do_check_eq(Unix.normalize("a/b/c/../../../d/e/f"), "d/e/f");
- do_check_fail(() => Unix.normalize("/a/b/c/../../../../d/e/f"));
-
- do_check_eq(Unix.join("/tmp", "foo", "bar"), "/tmp/foo/bar", "join /tmp,foo,bar");
- do_check_eq(Unix.join("/tmp", "/foo", "bar"), "/foo/bar", "join /tmp,/foo,bar");
-
- do_print("Testing the presence of ospath.jsm");
- let Scope = {};
- try {
- Components.utils.import("resource://gre/modules/osfile/ospath.jsm", Scope);
- } catch (ex) {
- // Can't load ospath
- }
- do_check_true(!!Scope.basename);
-}
diff --git a/toolkit/components/osfile/tests/xpcshell/test_path_constants.js b/toolkit/components/osfile/tests/xpcshell/test_path_constants.js
deleted file mode 100644
index 9b9868bb29..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_path_constants.js
+++ /dev/null
@@ -1,83 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-Cu.import("resource://gre/modules/ctypes.jsm", this);
-Cu.import("resource://testing-common/AppData.jsm", this);
-
-
-function run_test() {
- run_next_test();
-}
-
-function compare_paths(ospath, key) {
- let file;
- try {
- file = Services.dirsvc.get(key, Components.interfaces.nsIFile);
- } catch(ex) {}
-
- if (file) {
- do_check_true(!!ospath);
- do_check_eq(ospath, file.path);
- } else {
- do_print("WARNING: " + key + " is not defined. Test may not be testing anything!");
- do_check_false(!!ospath);
- }
-}
-
-// Some path constants aren't set up until the profile is available. This
-// test verifies that behavior.
-add_task(function* test_before_after_profile() {
- do_check_null(OS.Constants.Path.profileDir);
- do_check_null(OS.Constants.Path.localProfileDir);
- do_check_null(OS.Constants.Path.userApplicationDataDir);
-
- do_get_profile();
- do_check_true(!!OS.Constants.Path.profileDir);
- do_check_true(!!OS.Constants.Path.localProfileDir);
-
- // UAppData is still null because the xpcshell profile doesn't set it up.
- // This test is mostly here to fail in case behavior of do_get_profile() ever
- // changes. We want to know if our assumptions no longer hold!
- do_check_null(OS.Constants.Path.userApplicationDataDir);
-
- yield makeFakeAppDir();
- do_check_true(!!OS.Constants.Path.userApplicationDataDir);
-
- // FUTURE: verify AppData too (bug 964291).
-});
-
-// Test simple paths
-add_task(function* test_simple_paths() {
- do_check_true(!!OS.Constants.Path.tmpDir);
- compare_paths(OS.Constants.Path.tmpDir, "TmpD");
-
-});
-
-// Test presence of paths that only exist on Desktop platforms
-add_task(function* test_desktop_paths() {
- if (OS.Constants.Sys.Name == "Android") {
- return;
- }
- do_check_true(!!OS.Constants.Path.desktopDir);
- do_check_true(!!OS.Constants.Path.homeDir);
-
- compare_paths(OS.Constants.Path.homeDir, "Home");
- compare_paths(OS.Constants.Path.desktopDir, "Desk");
- compare_paths(OS.Constants.Path.userApplicationDataDir, "UAppData");
-
- compare_paths(OS.Constants.Path.winAppDataDir, "AppData");
- compare_paths(OS.Constants.Path.winStartMenuProgsDir, "Progs");
-
- compare_paths(OS.Constants.Path.macUserLibDir, "ULibDir");
- compare_paths(OS.Constants.Path.macLocalApplicationsDir, "LocApp");
- compare_paths(OS.Constants.Path.macTrashDir, "Trsh");
-});
-
-// Open libxul
-add_task(function* test_libxul() {
- ctypes.open(OS.Constants.Path.libxul);
- do_print("Linked to libxul");
-});
diff --git a/toolkit/components/osfile/tests/xpcshell/test_queue.js b/toolkit/components/osfile/tests/xpcshell/test_queue.js
deleted file mode 100644
index c9d23eabc4..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_queue.js
+++ /dev/null
@@ -1,38 +0,0 @@
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-
-function run_test() {
- run_next_test();
-}
-
-// Check if Scheduler.queue returned by OS.File.queue is resolved initially.
-add_task(function* check_init() {
- yield OS.File.queue;
- do_print("Function resolved");
-});
-
-// Check if Scheduler.queue returned by OS.File.queue is resolved
-// after an operation is successful.
-add_task(function* check_success() {
- do_print("Attempting to open a file correctly");
- let openedFile = yield OS.File.open(OS.Path.join(do_get_cwd().path, "test_queue.js"));
- do_print("File opened correctly");
- yield OS.File.queue;
- do_print("Function resolved");
-});
-
-// Check if Scheduler.queue returned by OS.File.queue is resolved
-// after an operation fails.
-add_task(function* check_failure() {
- let exception;
- try {
- do_print("Attempting to open a non existing file");
- yield OS.File.open(OS.Path.join(".", "Bigfoot"));
- } catch (err) {
- exception = err;
- yield OS.File.queue;
- }
- do_check_true(exception!=null);
- do_print("Function resolved");
-}); \ No newline at end of file
diff --git a/toolkit/components/osfile/tests/xpcshell/test_read_write.js b/toolkit/components/osfile/tests/xpcshell/test_read_write.js
deleted file mode 100644
index 00235ed8c5..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_read_write.js
+++ /dev/null
@@ -1,103 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-var {utils: Cu} = Components;
-
-var SHARED_PATH;
-
-var EXISTING_FILE = do_get_file("xpcshell.ini").path;
-
-add_task(function* init() {
- do_get_profile();
- SHARED_PATH = OS.Path.join(OS.Constants.Path.profileDir, "test_osfile_read.tmp");
-});
-
-
-// Check that OS.File.read() is executed after the previous operation
-add_test_pair(function* ordering() {
- let string1 = "Initial state " + Math.random();
- let string2 = "After writing " + Math.random();
- yield OS.File.writeAtomic(SHARED_PATH, string1);
- OS.File.writeAtomic(SHARED_PATH, string2);
- let string3 = yield OS.File.read(SHARED_PATH, { encoding: "utf-8" });
- do_check_eq(string3, string2);
-});
-
-add_test_pair(function* read_write_all() {
- let DEST_PATH = SHARED_PATH + Math.random();
- let TMP_PATH = DEST_PATH + ".tmp";
-
- let test_with_options = function(options, suffix) {
- return Task.spawn(function*() {
- do_print("Running test read_write_all with options " + JSON.stringify(options));
- let TEST = "read_write_all " + suffix;
-
- let optionsBackup = JSON.parse(JSON.stringify(options));
-
- // Check that read + writeAtomic performs a correct copy
- let currentDir = yield OS.File.getCurrentDirectory();
- let pathSource = OS.Path.join(currentDir, EXISTING_FILE);
- let contents = yield OS.File.read(pathSource);
- do_check_true(!!contents); // Content is not empty
- let bytesRead = contents.byteLength;
-
- let bytesWritten = yield OS.File.writeAtomic(DEST_PATH, contents, options);
- do_check_eq(bytesRead, bytesWritten); // Correct number of bytes written
-
- // Check that options are not altered
- do_check_eq(JSON.stringify(options), JSON.stringify(optionsBackup));
- yield reference_compare_files(pathSource, DEST_PATH, TEST);
-
- // Check that temporary file was removed or never created exist
- do_check_false(new FileUtils.File(TMP_PATH).exists());
-
- // Check that writeAtomic fails if noOverwrite is true and the destination
- // file already exists!
- contents = new Uint8Array(300);
- let view = new Uint8Array(contents.buffer, 10, 200);
- try {
- let opt = JSON.parse(JSON.stringify(options));
- opt.noOverwrite = true;
- yield OS.File.writeAtomic(DEST_PATH, view, opt);
- do_throw("With noOverwrite, writeAtomic should have refused to overwrite file (" + suffix + ")");
- } catch (err if err instanceof OS.File.Error && err.becauseExists) {
- do_print("With noOverwrite, writeAtomic correctly failed (" + suffix + ")");
- }
- yield reference_compare_files(pathSource, DEST_PATH, TEST);
-
- // Check that temporary file was removed or never created
- do_check_false(new FileUtils.File(TMP_PATH).exists());
-
- // Now write a subset
- let START = 10;
- let LENGTH = 100;
- contents = new Uint8Array(300);
- for (var i = 0; i < contents.byteLength; i++)
- contents[i] = i % 256;
- view = new Uint8Array(contents.buffer, START, LENGTH);
- bytesWritten = yield OS.File.writeAtomic(DEST_PATH, view, options);
- do_check_eq(bytesWritten, LENGTH);
-
- let array2 = yield OS.File.read(DEST_PATH);
- do_check_eq(LENGTH, array2.length);
- for (var i = 0; i < LENGTH; i++)
- do_check_eq(array2[i], (i + START) % 256);
-
- // Cleanup.
- yield OS.File.remove(DEST_PATH);
- yield OS.File.remove(TMP_PATH);
- });
- };
-
- yield test_with_options({tmpPath: TMP_PATH}, "Renaming, not flushing");
- yield test_with_options({tmpPath: TMP_PATH, flush: true}, "Renaming, flushing");
- yield test_with_options({}, "Not renaming, not flushing");
- yield test_with_options({flush: true}, "Not renaming, flushing");
-});
-
-
-function run_test() {
- run_next_test();
-}
diff --git a/toolkit/components/osfile/tests/xpcshell/test_remove.js b/toolkit/components/osfile/tests/xpcshell/test_remove.js
deleted file mode 100644
index c8dc330545..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_remove.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/Task.jsm");
-Components.utils.import("resource://gre/modules/Services.jsm");
-
-do_register_cleanup(function() {
- Services.prefs.setBoolPref("toolkit.osfile.log", false);
-});
-
-function run_test() {
- Services.prefs.setBoolPref("toolkit.osfile.log", true);
- run_next_test();
-}
-
-add_task(function* test_ignoreAbsent() {
- let absent_file_name = "test_osfile_front_absent.tmp";
-
- // Removing absent files should throw if "ignoreAbsent" is true.
- yield Assert.rejects(OS.File.remove(absent_file_name, {ignoreAbsent: false}),
- "OS.File.remove throws if there is no such file.");
-
- // Removing absent files should not throw if "ignoreAbsent" is true or not
- // defined.
- let exception = null;
- try {
- yield OS.File.remove(absent_file_name, {ignoreAbsent: true});
- yield OS.File.remove(absent_file_name);
- } catch (ex) {
- exception = ex;
- }
- Assert.ok(!exception, "OS.File.remove should not throw when not requested.");
-});
-
-add_task(function* test_ignoreAbsent_directory_missing() {
- let absent_file_name = OS.Path.join("absent_parent", "test.tmp");
-
- // Removing absent files should throw if "ignoreAbsent" is true.
- yield Assert.rejects(OS.File.remove(absent_file_name, {ignoreAbsent: false}),
- "OS.File.remove throws if there is no such file.");
-
- // Removing files from absent directories should not throw if "ignoreAbsent"
- // is true or not defined.
- let exception = null;
- try {
- yield OS.File.remove(absent_file_name, {ignoreAbsent: true});
- yield OS.File.remove(absent_file_name);
- } catch (ex) {
- exception = ex;
- }
- Assert.ok(!exception, "OS.File.remove should not throw when not requested.");
-});
diff --git a/toolkit/components/osfile/tests/xpcshell/test_removeDir.js b/toolkit/components/osfile/tests/xpcshell/test_removeDir.js
deleted file mode 100644
index 41ad0eb8ce..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_removeDir.js
+++ /dev/null
@@ -1,177 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/Task.jsm");
-Components.utils.import("resource://gre/modules/Services.jsm");
-
-do_register_cleanup(function() {
- Services.prefs.setBoolPref("toolkit.osfile.log", false);
-});
-
-function run_test() {
- Services.prefs.setBoolPref("toolkit.osfile.log", true);
-
- run_next_test();
-}
-
-add_task(function() {
- // Set up profile. We create the directory in the profile, because the profile
- // is removed after every test run.
- do_get_profile();
-
- let file = OS.Path.join(OS.Constants.Path.profileDir, "file");
- let dir = OS.Path.join(OS.Constants.Path.profileDir, "directory");
- let file1 = OS.Path.join(dir, "file1");
- let file2 = OS.Path.join(dir, "file2");
- let subDir = OS.Path.join(dir, "subdir");
- let fileInSubDir = OS.Path.join(subDir, "file");
-
- // Sanity checking for the test
- do_check_false((yield OS.File.exists(dir)));
-
- // Remove non-existent directory
- let exception = null;
- try {
- yield OS.File.removeDir(dir, {ignoreAbsent: false});
- } catch (ex) {
- exception = ex;
- }
-
- do_check_true(!!exception);
- do_check_true(exception instanceof OS.File.Error);
-
- // Remove non-existent directory with ignoreAbsent
- yield OS.File.removeDir(dir, {ignoreAbsent: true});
- yield OS.File.removeDir(dir);
-
- // Remove file with ignoreAbsent: false
- yield OS.File.writeAtomic(file, "content", { tmpPath: file + ".tmp" });
- exception = null;
- try {
- yield OS.File.removeDir(file, {ignoreAbsent: false});
- } catch (ex) {
- exception = ex;
- }
-
- do_check_true(!!exception);
- do_check_true(exception instanceof OS.File.Error);
-
- // Remove empty directory
- yield OS.File.makeDir(dir);
- yield OS.File.removeDir(dir);
- do_check_false((yield OS.File.exists(dir)));
-
- // Remove directory that contains one file
- yield OS.File.makeDir(dir);
- yield OS.File.writeAtomic(file1, "content", { tmpPath: file1 + ".tmp" });
- yield OS.File.removeDir(dir);
- do_check_false((yield OS.File.exists(dir)));
-
- // Remove directory that contains multiple files
- yield OS.File.makeDir(dir);
- yield OS.File.writeAtomic(file1, "content", { tmpPath: file1 + ".tmp" });
- yield OS.File.writeAtomic(file2, "content", { tmpPath: file2 + ".tmp" });
- yield OS.File.removeDir(dir);
- do_check_false((yield OS.File.exists(dir)));
-
- // Remove directory that contains a file and a directory
- yield OS.File.makeDir(dir);
- yield OS.File.writeAtomic(file1, "content", { tmpPath: file1 + ".tmp" });
- yield OS.File.makeDir(subDir);
- yield OS.File.writeAtomic(fileInSubDir, "content", { tmpPath: fileInSubDir + ".tmp" });
- yield OS.File.removeDir(dir);
- do_check_false((yield OS.File.exists(dir)));
-});
-
-add_task(function* test_unix_symlink() {
- // Windows does not implement OS.File.unixSymLink()
- if (OS.Constants.Win) {
- return;
- }
-
- // Android / B2G file systems typically don't support symlinks.
- if (OS.Constants.Sys.Name == "Android") {
- return;
- }
-
- let file = OS.Path.join(OS.Constants.Path.profileDir, "file");
- let dir = OS.Path.join(OS.Constants.Path.profileDir, "directory");
- let file1 = OS.Path.join(dir, "file1");
-
- // This test will create the following directory structure:
- // <profileDir>/file (regular file)
- // <profileDir>/file.link => file (symlink)
- // <profileDir>/directory (directory)
- // <profileDir>/linkdir => directory (directory)
- // <profileDir>/directory/file1 (regular file)
- // <profileDir>/directory3 (directory)
- // <profileDir>/directory3/file3 (directory)
- // <profileDir>/directory/link2 => ../directory3 (regular file)
-
- // Sanity checking for the test
- do_check_false((yield OS.File.exists(dir)));
-
- yield OS.File.writeAtomic(file, "content", { tmpPath: file + ".tmp" });
- do_check_true((yield OS.File.exists(file)));
- let info = yield OS.File.stat(file, {unixNoFollowingLinks: true});
- do_check_false(info.isDir);
- do_check_false(info.isSymLink);
-
- yield OS.File.unixSymLink(file, file + ".link");
- do_check_true((yield OS.File.exists(file + ".link")));
- info = yield OS.File.stat(file + ".link", {unixNoFollowingLinks: true});
- do_check_false(info.isDir);
- do_check_true(info.isSymLink);
- info = yield OS.File.stat(file + ".link");
- do_check_false(info.isDir);
- do_check_false(info.isSymLink);
- yield OS.File.remove(file + ".link");
- do_check_false((yield OS.File.exists(file + ".link")));
-
- yield OS.File.makeDir(dir);
- do_check_true((yield OS.File.exists(dir)));
- info = yield OS.File.stat(dir, {unixNoFollowingLinks: true});
- do_check_true(info.isDir);
- do_check_false(info.isSymLink);
-
- let link = OS.Path.join(OS.Constants.Path.profileDir, "linkdir");
-
- yield OS.File.unixSymLink(dir, link);
- do_check_true((yield OS.File.exists(link)));
- info = yield OS.File.stat(link, {unixNoFollowingLinks: true});
- do_check_false(info.isDir);
- do_check_true(info.isSymLink);
- info = yield OS.File.stat(link);
- do_check_true(info.isDir);
- do_check_false(info.isSymLink);
-
- let dir3 = OS.Path.join(OS.Constants.Path.profileDir, "directory3");
- let file3 = OS.Path.join(dir3, "file3");
- let link2 = OS.Path.join(dir, "link2");
-
- yield OS.File.writeAtomic(file1, "content", { tmpPath: file1 + ".tmp" });
- do_check_true((yield OS.File.exists(file1)));
- yield OS.File.makeDir(dir3);
- do_check_true((yield OS.File.exists(dir3)));
- yield OS.File.writeAtomic(file3, "content", { tmpPath: file3 + ".tmp" });
- do_check_true((yield OS.File.exists(file3)));
- yield OS.File.unixSymLink("../directory3", link2);
- do_check_true((yield OS.File.exists(link2)));
-
- yield OS.File.removeDir(link);
- do_check_false((yield OS.File.exists(link)));
- do_check_true((yield OS.File.exists(file1)));
- yield OS.File.removeDir(dir);
- do_check_false((yield OS.File.exists(dir)));
- do_check_true((yield OS.File.exists(file3)));
- yield OS.File.removeDir(dir3);
- do_check_false((yield OS.File.exists(dir3)));
-
- // This task will be executed only on Unix-like systems.
- // Please do not add tests independent to operating systems here
- // or implement symlink() on Windows.
-});
diff --git a/toolkit/components/osfile/tests/xpcshell/test_removeEmptyDir.js b/toolkit/components/osfile/tests/xpcshell/test_removeEmptyDir.js
deleted file mode 100644
index 95f8d5cd1d..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_removeEmptyDir.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/Services.jsm");
-
-do_register_cleanup(function() {
- Services.prefs.setBoolPref("toolkit.osfile.log", false);
-});
-
-function run_test() {
- Services.prefs.setBoolPref("toolkit.osfile.log", true);
-
- run_next_test();
-}
-
-/**
- * Test OS.File.removeEmptyDir
- */
-add_task(function() {
- // Set up profile. We create the directory in the profile, because the profile
- // is removed after every test run.
- do_get_profile();
-
- let dir = OS.Path.join(OS.Constants.Path.profileDir, "directory");
-
- // Sanity checking for the test
- do_check_false((yield OS.File.exists(dir)));
-
- // Remove non-existent directory
- yield OS.File.removeEmptyDir(dir);
-
- // Remove non-existent directory with ignoreAbsent
- yield OS.File.removeEmptyDir(dir, {ignoreAbsent: true});
-
- // Remove non-existent directory with ignoreAbsent false
- let exception = null;
- try {
- yield OS.File.removeEmptyDir(dir, {ignoreAbsent: false});
- } catch (ex) {
- exception = ex;
- }
-
- do_check_true(!!exception);
- do_check_true(exception instanceof OS.File.Error);
- do_check_true(exception.becauseNoSuchFile);
-
- // Remove empty directory
- yield OS.File.makeDir(dir);
- yield OS.File.removeEmptyDir(dir);
- do_check_false((yield OS.File.exists(dir)));
-});
diff --git a/toolkit/components/osfile/tests/xpcshell/test_reset.js b/toolkit/components/osfile/tests/xpcshell/test_reset.js
deleted file mode 100644
index f1e1b14d14..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_reset.js
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-var Path = OS.Constants.Path;
-
-add_task(function* init() {
- do_get_profile();
-});
-
-add_task(function* reset_before_launching() {
- do_print("Reset without launching OS.File, it shouldn't break");
- yield OS.File.resetWorker();
-});
-
-add_task(function* transparent_reset() {
- for (let i = 1; i < 3; ++i) {
- do_print("Do stome stuff before and after " + i + " reset(s), " +
- "it shouldn't break");
- let CONTENT = "some content " + i;
- let path = OS.Path.join(Path.profileDir, "tmp");
- yield OS.File.writeAtomic(path, CONTENT);
- for (let j = 0; j < i; ++j) {
- yield OS.File.resetWorker();
- }
- let data = yield OS.File.read(path);
- let string = (new TextDecoder()).decode(data);
- do_check_eq(string, CONTENT);
- }
-});
-
-add_task(function* file_open_cannot_reset() {
- let TEST_FILE = OS.Path.join(Path.profileDir, "tmp-" + Math.random());
- do_print("Leaking file descriptor " + TEST_FILE + ", we shouldn't be able to reset");
- let openedFile = yield OS.File.open(TEST_FILE, { create: true} );
- let thrown = false;
- try {
- yield OS.File.resetWorker();
- } catch (ex if ex.message.indexOf(OS.Path.basename(TEST_FILE)) != -1 ) {
- thrown = true;
- }
- do_check_true(thrown);
-
- do_print("Closing the file, we should now be able to reset");
- yield openedFile.close();
- yield OS.File.resetWorker();
-});
-
-add_task(function* dir_open_cannot_reset() {
- let TEST_DIR = yield OS.File.getCurrentDirectory();
- do_print("Leaking directory " + TEST_DIR + ", we shouldn't be able to reset");
- let iterator = new OS.File.DirectoryIterator(TEST_DIR);
- let thrown = false;
- try {
- yield OS.File.resetWorker();
- } catch (ex if ex.message.indexOf(OS.Path.basename(TEST_DIR)) != -1 ) {
- thrown = true;
- }
- do_check_true(thrown);
-
- do_print("Closing the directory, we should now be able to reset");
- yield iterator.close();
- yield OS.File.resetWorker();
-});
-
-add_task(function* race_against_itself() {
- do_print("Attempt to get resetWorker() to race against itself");
- // Arbitrary operation, just to wake up the worker
- try {
- yield OS.File.read("/foo");
- } catch (ex) {
- }
-
- let all = [];
- for (let i = 0; i < 100; ++i) {
- all.push(OS.File.resetWorker());
- }
-
- yield Promise.all(all);
-});
-
-
-add_task(function* finish_with_a_reset() {
- do_print("Reset without waiting for the result");
- // Arbitrary operation, just to wake up the worker
- try {
- yield OS.File.read("/foo");
- } catch (ex) {
- }
- // Now reset
- /*don't yield*/ OS.File.resetWorker();
-});
-
-function run_test() {
- run_next_test();
-}
diff --git a/toolkit/components/osfile/tests/xpcshell/test_shutdown.js b/toolkit/components/osfile/tests/xpcshell/test_shutdown.js
deleted file mode 100644
index 667965d9ee..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_shutdown.js
+++ /dev/null
@@ -1,98 +0,0 @@
-Components.utils.import("resource://gre/modules/Services.jsm", this);
-Components.utils.import("resource://gre/modules/Promise.jsm", this);
-Components.utils.import("resource://gre/modules/Task.jsm", this);
-Components.utils.import("resource://gre/modules/osfile.jsm", this);
-
-add_task(function init() {
- do_get_profile();
-});
-
-/**
- * Test logging of file descriptors leaks.
- */
-add_task(function system_shutdown() {
-
- // Test that unclosed files cause warnings
- // Test that unclosed directories cause warnings
- // Test that closed files do not cause warnings
- // Test that closed directories do not cause warnings
- function testLeaksOf(resource, topic) {
- return Task.spawn(function() {
- let deferred = Promise.defer();
-
- // Register observer
- Services.prefs.setBoolPref("toolkit.asyncshutdown.testing", true);
- Services.prefs.setBoolPref("toolkit.osfile.log", true);
- Services.prefs.setBoolPref("toolkit.osfile.log.redirect", true);
- Services.prefs.setCharPref("toolkit.osfile.test.shutdown.observer", topic);
-
- let observer = function(aMessage) {
- try {
- do_print("Got message: " + aMessage);
- if (!(aMessage instanceof Components.interfaces.nsIConsoleMessage)) {
- return;
- }
- let message = aMessage.message;
- do_print("Got message: " + message);
- if (message.indexOf("TEST OS Controller WARNING") < 0) {
- return;
- }
- do_print("Got message: " + message + ", looking for resource " + resource);
- if (message.indexOf(resource) < 0) {
- return;
- }
- do_print("Resource: " + resource + " found");
- do_execute_soon(deferred.resolve);
- } catch (ex) {
- do_execute_soon(function() {
- deferred.reject(ex);
- });
- }
- };
- Services.console.registerListener(observer);
- Services.obs.notifyObservers(null, topic, null);
- do_timeout(1000, function() {
- do_print("Timeout while waiting for resource: " + resource);
- deferred.reject("timeout");
- });
-
- let resolved = false;
- try {
- yield deferred.promise;
- resolved = true;
- } catch (ex if ex == "timeout") {
- resolved = false;
- }
- Services.console.unregisterListener(observer);
- Services.prefs.clearUserPref("toolkit.osfile.log");
- Services.prefs.clearUserPref("toolkit.osfile.log.redirect");
- Services.prefs.clearUserPref("toolkit.osfile.test.shutdown.observer");
- Services.prefs.clearUserPref("toolkit.async_shutdown.testing", true);
-
- throw new Task.Result(resolved);
- });
- }
-
- let TEST_DIR = OS.Path.join((yield OS.File.getCurrentDirectory()), "..");
- do_print("Testing for leaks of directory iterator " + TEST_DIR);
- let iterator = new OS.File.DirectoryIterator(TEST_DIR);
- do_print("At this stage, we leak the directory");
- do_check_true((yield testLeaksOf(TEST_DIR, "test.shutdown.dir.leak")));
- yield iterator.close();
- do_print("At this stage, we don't leak the directory anymore");
- do_check_false((yield testLeaksOf(TEST_DIR, "test.shutdown.dir.noleak")));
-
- let TEST_FILE = OS.Path.join(OS.Constants.Path.profileDir, "test");
- do_print("Testing for leaks of file descriptor: " + TEST_FILE);
- let openedFile = yield OS.File.open(TEST_FILE, { create: true} );
- do_print("At this stage, we leak the file");
- do_check_true((yield testLeaksOf(TEST_FILE, "test.shutdown.file.leak")));
- yield openedFile.close();
- do_print("At this stage, we don't leak the file anymore");
- do_check_false((yield testLeaksOf(TEST_FILE, "test.shutdown.file.leak.2")));
-});
-
-
-function run_test() {
- run_next_test();
-}
diff --git a/toolkit/components/osfile/tests/xpcshell/test_telemetry.js b/toolkit/components/osfile/tests/xpcshell/test_telemetry.js
deleted file mode 100644
index dc5104443d..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_telemetry.js
+++ /dev/null
@@ -1,63 +0,0 @@
-"use strict";
-
-var {OS: {File, Path, Constants}} = Components.utils.import("resource://gre/modules/osfile.jsm", {});
-var {Services} = Components.utils.import("resource://gre/modules/Services.jsm", {});
-
-// Ensure that we have a profile but that the OS.File worker is not launched
-add_task(function* init() {
- do_get_profile();
- yield File.resetWorker();
-});
-
-function getCount(histogram) {
- if (histogram == null) {
- return 0;
- }
-
- let total = 0;
- for (let i of histogram.counts) {
- total += i;
- }
- return total;
-}
-
-// Ensure that launching the OS.File worker adds data to the relevant
-// histograms
-add_task(function* test_startup() {
- let LAUNCH = "OSFILE_WORKER_LAUNCH_MS";
- let READY = "OSFILE_WORKER_READY_MS";
-
- let before = Services.telemetry.histogramSnapshots;
-
- // Launch the OS.File worker
- yield File.getCurrentDirectory();
-
- let after = Services.telemetry.histogramSnapshots;
-
-
- do_print("Ensuring that we have recorded measures for histograms");
- do_check_eq(getCount(after[LAUNCH]), getCount(before[LAUNCH]) + 1);
- do_check_eq(getCount(after[READY]), getCount(before[READY]) + 1);
-
- do_print("Ensuring that launh <= ready");
- do_check_true(after[LAUNCH].sum <= after[READY].sum);
-});
-
-// Ensure that calling writeAtomic adds data to the relevant histograms
-add_task(function* test_writeAtomic() {
- let LABEL = "OSFILE_WRITEATOMIC_JANK_MS";
-
- let before = Services.telemetry.histogramSnapshots;
-
- // Perform a write.
- let path = Path.join(Constants.Path.profileDir, "test_osfile_telemetry.tmp");
- yield File.writeAtomic(path, LABEL, { tmpPath: path + ".tmp" } );
-
- let after = Services.telemetry.histogramSnapshots;
-
- do_check_eq(getCount(after[LABEL]), getCount(before[LABEL]) + 1);
-});
-
-function run_test() {
- run_next_test();
-}
diff --git a/toolkit/components/osfile/tests/xpcshell/test_unique.js b/toolkit/components/osfile/tests/xpcshell/test_unique.js
deleted file mode 100644
index 8aa81b8034..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/test_unique.js
+++ /dev/null
@@ -1,88 +0,0 @@
-"use strict";
-
-Components.utils.import("resource://gre/modules/osfile.jsm");
-Components.utils.import("resource://gre/modules/Task.jsm");
-
-function run_test() {
- do_get_profile();
- run_next_test();
-}
-
-function testFiles(filename) {
- return Task.spawn(function() {
- const MAX_TRIES = 10;
- let profileDir = OS.Constants.Path.profileDir;
- let path = OS.Path.join(profileDir, filename);
-
- // Ensure that openUnique() uses the file name if there is no file with that name already.
- let openedFile = yield OS.File.openUnique(path);
- do_print("\nCreate new file: " + openedFile.path);
- yield openedFile.file.close();
- let exists = yield OS.File.exists(openedFile.path);
- do_check_true(exists);
- do_check_eq(path, openedFile.path);
- let fileInfo = yield OS.File.stat(openedFile.path);
- do_check_true(fileInfo.size == 0);
-
- // Ensure that openUnique() creates a new file name using a HEX number, as the original name is already taken.
- openedFile = yield OS.File.openUnique(path);
- do_print("\nCreate unique HEX file: " + openedFile.path);
- yield openedFile.file.close();
- exists = yield OS.File.exists(openedFile.path);
- do_check_true(exists);
- fileInfo = yield OS.File.stat(openedFile.path);
- do_check_true(fileInfo.size == 0);
-
- // Ensure that openUnique() generates different file names each time, using the HEX number algorithm
- let filenames = new Set();
- for (let i=0; i < MAX_TRIES; i++) {
- openedFile = yield OS.File.openUnique(path);
- yield openedFile.file.close();
- filenames.add(openedFile.path);
- }
-
- do_check_eq(filenames.size, MAX_TRIES);
-
- // Ensure that openUnique() creates a new human readable file name using, as the original name is already taken.
- openedFile = yield OS.File.openUnique(path, {humanReadable : true});
- do_print("\nCreate unique Human Readable file: " + openedFile.path);
- yield openedFile.file.close();
- exists = yield OS.File.exists(openedFile.path);
- do_check_true(exists);
- fileInfo = yield OS.File.stat(openedFile.path);
- do_check_true(fileInfo.size == 0);
-
- // Ensure that openUnique() generates different human readable file names each time
- filenames = new Set();
- for (let i=0; i < MAX_TRIES; i++) {
- openedFile = yield OS.File.openUnique(path, {humanReadable : true});
- yield openedFile.file.close();
- filenames.add(openedFile.path);
- }
-
- do_check_eq(filenames.size, MAX_TRIES);
-
- let exn;
- try {
- for (let i=0; i < 100; i++) {
- openedFile = yield OS.File.openUnique(path, {humanReadable : true});
- yield openedFile.file.close();
- }
- } catch (ex) {
- exn = ex;
- }
-
- do_print("Ensure that this raises the correct error");
- do_check_true(!!exn);
- do_check_true(exn instanceof OS.File.Error);
- do_check_true(exn.becauseExists);
- });
-}
-
-add_task(function test_unique() {
- OS.Shared.DEBUG = true;
- // Tests files with extension
- yield testFiles("dummy_unique_file.txt");
- // Tests files with no extension
- yield testFiles("dummy_unique_file_no_ext");
-});
diff --git a/toolkit/components/osfile/tests/xpcshell/xpcshell.ini b/toolkit/components/osfile/tests/xpcshell/xpcshell.ini
deleted file mode 100644
index 58b106d3df..0000000000
--- a/toolkit/components/osfile/tests/xpcshell/xpcshell.ini
+++ /dev/null
@@ -1,51 +0,0 @@
-[DEFAULT]
-head = head.js
-tail =
-
-support-files =
- test_loader/module_test_loader.js
-
-[test_available_free_space.js]
-[test_compression.js]
-[test_constants.js]
-[test_creationDate.js]
-[test_duration.js]
-[test_exception.js]
-[test_file_URL_conversion.js]
-[test_loader.js]
-[test_logging.js]
-[test_makeDir.js]
-[test_open.js]
-[test_osfile_async.js]
-[test_osfile_async_append.js]
-[test_osfile_async_bytes.js]
-[test_osfile_async_copy.js]
-[test_osfile_async_flush.js]
-[test_osfile_async_largefiles.js]
-[test_osfile_async_setDates.js]
-# Unimplemented on Windows (bug 1022816).
-# Spurious failure on Android test farm due to non-POSIX behavior of
-# filesystem backing /mnt/sdcard (not worth trying to fix).
-[test_osfile_async_setPermissions.js]
-skip-if = os == "win" || os == "android"
-[test_osfile_closed.js]
-[test_osfile_error.js]
-[test_osfile_kill.js]
-# Windows test
-[test_osfile_win_async_setPermissions.js]
-skip-if = os != "win"
-[test_osfile_writeAtomic_backupTo_option.js]
-[test_osfile_writeAtomic_zerobytes.js]
-[test_path.js]
-[test_path_constants.js]
-[test_queue.js]
-[test_read_write.js]
-requesttimeoutfactor = 4
-[test_remove.js]
-[test_removeDir.js]
-requesttimeoutfactor = 4
-[test_removeEmptyDir.js]
-[test_reset.js]
-[test_shutdown.js]
-[test_telemetry.js]
-[test_unique.js]