180 lines
5.2 KiB
JavaScript
180 lines
5.2 KiB
JavaScript
function createPath(parentDir, dirOrFile) {
|
|
return parentDir.path + (parentDir.path == "/" ? "" : "/") + dirOrFile.name;
|
|
}
|
|
|
|
function createRelativePath(parentDir, dirOrFile) {
|
|
let path = createPath(parentDir, dirOrFile);
|
|
is(path[0], "/", "The full path should start with '/'");
|
|
return path.substring(1);
|
|
}
|
|
|
|
function setup_tests(aNext) {
|
|
SimpleTest.requestLongerTimeout(2);
|
|
SpecialPowers.pushPrefEnv(
|
|
{
|
|
set: [
|
|
["dom.filesystem.pathcheck.disabled", true],
|
|
["dom.webkitBlink.dirPicker.enabled", true],
|
|
],
|
|
},
|
|
aNext
|
|
);
|
|
}
|
|
|
|
function test_basic(aDirectory, aNext) {
|
|
ok(aDirectory, "Directory exists.");
|
|
ok(aDirectory instanceof Directory, "We have a directory.");
|
|
is(aDirectory.path, "/" + aDirectory.name, "directory.path must be '/'+name");
|
|
aNext();
|
|
}
|
|
|
|
function test_getFilesAndDirectories(aDirectory, aRecursive, aNext) {
|
|
function checkSubDir(dir) {
|
|
return dir.getFilesAndDirectories().then(function (data) {
|
|
for (var i = 0; i < data.length; ++i) {
|
|
ok(
|
|
data[i] instanceof File || data[i] instanceof Directory,
|
|
"Just Files or Directories"
|
|
);
|
|
if (data[i] instanceof Directory) {
|
|
isnot(
|
|
data[i].name,
|
|
"/",
|
|
"Subdirectory should be called with the leafname"
|
|
);
|
|
isnot(
|
|
data[i].path,
|
|
"/",
|
|
"Subdirectory path should be called with the leafname"
|
|
);
|
|
isnot(
|
|
data[i].path,
|
|
dir.path,
|
|
"Subdirectory path should contain the parent path."
|
|
);
|
|
is(
|
|
data[i].path,
|
|
createPath(dir, data[i]),
|
|
"Subdirectory path should be called parentdir.path + '/' + leafname: " +
|
|
data[i].path
|
|
);
|
|
}
|
|
|
|
if (data[i] instanceof File) {
|
|
is(
|
|
data[i].webkitRelativePath,
|
|
createRelativePath(dir, data[i]),
|
|
"File.webkitRelativePath should be called: parentdir.path + '/' + file.name: " +
|
|
data[i].webkitRelativePath
|
|
);
|
|
ok(
|
|
!data[i].webkitRelativePath.endsWith("symlink.txt"),
|
|
"We should never see a path ending with symlink.txt, our symlink sentinel."
|
|
);
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
aDirectory
|
|
.getFilesAndDirectories()
|
|
.then(
|
|
function (data) {
|
|
ok(data.length, "We should have some data.");
|
|
var promises = [];
|
|
for (var i = 0; i < data.length; ++i) {
|
|
ok(
|
|
data[i] instanceof File || data[i] instanceof Directory,
|
|
"Just Files or Directories: " + data[i].name
|
|
);
|
|
if (data[i] instanceof Directory) {
|
|
isnot(
|
|
data[i].name,
|
|
"/",
|
|
"Subdirectory should be called with the leafname"
|
|
);
|
|
is(
|
|
data[i].path,
|
|
createPath(aDirectory, data[i]),
|
|
"Subdirectory path should be called parentdir.path + '/' + leafname: " +
|
|
data[i].path
|
|
);
|
|
if (aRecursive) {
|
|
promises.push(checkSubDir(data[i]));
|
|
}
|
|
}
|
|
|
|
if (data[i] instanceof File) {
|
|
is(
|
|
data[i].webkitRelativePath,
|
|
createRelativePath(aDirectory, data[i]),
|
|
"File.webkitRelativePath should be called file.name: " +
|
|
data[i].webkitRelativePath
|
|
);
|
|
}
|
|
}
|
|
|
|
return Promise.all(promises);
|
|
},
|
|
function () {
|
|
ok(false, "Something when wrong");
|
|
}
|
|
)
|
|
.then(aNext);
|
|
}
|
|
|
|
function test_getFiles(aDirectory, aRecursive, aNext) {
|
|
aDirectory
|
|
.getFiles(aRecursive)
|
|
.then(
|
|
function (data) {
|
|
for (var i = 0; i < data.length; ++i) {
|
|
ok(data[i] instanceof File, "File: " + data[i].name);
|
|
is(aDirectory.path[0], "/", "Directory path must start with '/'");
|
|
ok(
|
|
data[i].webkitRelativePath.indexOf(aDirectory.path.substring(1)) ==
|
|
0 &&
|
|
data[i].webkitRelativePath.indexOf("/" + data[i].name) +
|
|
("/" + data[i].name).length ==
|
|
data[i].webkitRelativePath.length,
|
|
"File.webkitRelativePath should be called dir.path + '/' + file.name: " +
|
|
data[i].webkitRelativePath
|
|
);
|
|
}
|
|
},
|
|
function () {
|
|
ok(false, "Something when wrong");
|
|
}
|
|
)
|
|
.then(aNext);
|
|
}
|
|
|
|
function test_getFiles_recursiveComparison(aDirectory, aNext) {
|
|
aDirectory
|
|
.getFiles(true)
|
|
.then(function (data) {
|
|
is(data.length, 2, "Only 2 files for this test.");
|
|
ok(
|
|
data[0].name == "foo.txt" || data[0].name == "bar.txt",
|
|
"First filename matches"
|
|
);
|
|
ok(
|
|
data[1].name == "foo.txt" || data[1].name == "bar.txt",
|
|
"Second filename matches"
|
|
);
|
|
})
|
|
.then(function () {
|
|
return aDirectory.getFiles(false);
|
|
})
|
|
.then(function (data) {
|
|
is(data.length, 1, "Only 1 file for this test.");
|
|
ok(
|
|
data[0].name == "foo.txt" || data[0].name == "bar.txt",
|
|
"First filename matches"
|
|
);
|
|
})
|
|
.catch(function () {
|
|
ok(false, "Something when wrong");
|
|
})
|
|
.then(aNext);
|
|
}
|