119 lines
4.1 KiB
HTML
119 lines
4.1 KiB
HTML
<!-- Any copyright is dedicated to the Public Domain.
|
|
- http://creativecommons.org/publicdomain/zero/1.0/ -->
|
|
<!DOCTYPE HTML>
|
|
<html>
|
|
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Test the IOUtils file I/O API</title>
|
|
<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
|
|
<script src="file_ioutils_test_fixtures.js"></script>
|
|
<script>
|
|
"use strict";
|
|
|
|
const { Assert } = ChromeUtils.importESModule(
|
|
"resource://testing-common/Assert.sys.mjs"
|
|
);
|
|
|
|
add_task(async function iterate_dir_failure() {
|
|
let notExists = PathUtils.join(PathUtils.tempDir, 'does_not_exist_dir.tmp.d');
|
|
|
|
await Assert.rejects(
|
|
IOUtils.hasChildren(notExists),
|
|
/NotFoundError: Could not check children of `.*': directory does not exist/,
|
|
"IOUtils::getChildren rejects if the file does not exist"
|
|
);
|
|
await Assert.rejects(
|
|
IOUtils.getChildren(notExists),
|
|
/NotFoundError: Could not get children of `.*': directory does not exist/,
|
|
"IOUtils::getChildren rejects if the file does not exist"
|
|
);
|
|
ok(!await fileExists(notExists), `Expected ${notExists} not to exist`);
|
|
|
|
info('Try to get the children of a regular file');
|
|
|
|
let tmpFileName = PathUtils.join(PathUtils.tempDir, 'iterator_file.tmp');
|
|
await createFile(tmpFileName)
|
|
await Assert.rejects(IOUtils.hasChildren(tmpFileName),
|
|
/InvalidAccessError: Could not check children of `.*': file is not a directory/,
|
|
"IOUtils::getChildren rejects if the file is not a dir"
|
|
);
|
|
await Assert.rejects(IOUtils.getChildren(tmpFileName),
|
|
/InvalidAccessError: Could not get children of `.*': file is not a directory/,
|
|
"IOUtils::getChildren rejects if the file is not a dir"
|
|
);
|
|
|
|
await cleanup(tmpFileName);
|
|
});
|
|
|
|
add_task(async function iterate_dir() {
|
|
info('Try to get the children of a multi-level directory hierarchy');
|
|
|
|
let root = PathUtils.join(PathUtils.tempDir, 'iterator.tmp.d');
|
|
let child1 = PathUtils.join(root, 'child1.tmp');
|
|
let child2 = PathUtils.join(root, 'child2.tmp');
|
|
let grandchild = PathUtils.join(child1, 'grandchild.tmp');
|
|
|
|
await createDir(grandchild); // Ancestors will be created.
|
|
await createDir(child2);
|
|
|
|
let hasChildren = await IOUtils.hasChildren(root);
|
|
is(hasChildren, true, `Expected some entries below the path at ${root}`);
|
|
|
|
let entries = await IOUtils.getChildren(root);
|
|
|
|
is(entries.length, 2, `Expected 2 entries below the path at ${root}`);
|
|
ok(!entries.includes(grandchild), "IOUtils::getChildren does not enter subdirectories");
|
|
|
|
await cleanup(root);
|
|
});
|
|
|
|
add_task(async function iterate_empty_dir() {
|
|
info('Try to get the children of an empty directory');
|
|
|
|
let emptyDir = PathUtils.join(PathUtils.tempDir, 'iterator_empty_dir.tmp.d');
|
|
await createDir(emptyDir);
|
|
|
|
is(
|
|
(await IOUtils.hasChildren(emptyDir)),
|
|
false,
|
|
"IOUtils::hasChildren returns false when called on an empty dir"
|
|
);
|
|
|
|
is(
|
|
(await IOUtils.getChildren(emptyDir)).length,
|
|
0,
|
|
"IOUtils::getChildren return an empty array when called on an empty dir"
|
|
);
|
|
|
|
await cleanup(emptyDir);
|
|
});
|
|
|
|
add_task(async function iterate_ignore_missing_dir() {
|
|
info("Try to get the children of a missing file with ignoreAbsent");
|
|
|
|
const notExists = PathUtils.join(PathUtils.tempDir, "does_not_exist_dir.tmp.d");
|
|
|
|
is(
|
|
(await IOUtils.hasChildren(notExists, { ignoreAbsent: true })),
|
|
false,
|
|
"IOUtils::hasChildren returns false when called with ignoreAbsent on a missing file"
|
|
);
|
|
is(
|
|
(await IOUtils.getChildren(notExists, { ignoreAbsent: true })).length,
|
|
0,
|
|
"IOUtils::getChildren returns an empty array when called with ignoreAbsent on a missing file"
|
|
);
|
|
ok(!await fileExists(notExists), `Expected ${notExists} not to exist`);
|
|
});
|
|
</script>
|
|
</head>
|
|
|
|
<body>
|
|
<p id="display"></p>
|
|
<div id="content" style="display: none"></div>
|
|
<pre id="test"></pre>
|
|
</body>
|
|
|
|
</html>
|