Dactyloidae/dom/filesystem/tests/filesystem_commons.js
Moonchild a299eaa965 [DOM] Filter out symlinks for webkitdirectory.
This is effectively a back-out of the following patches from Bug 1274959
except we add comments and test coverage:

- Part 1 which made the DirectoryListingTask include symlinks in the
  results as exposed by Directory.getFilesAndDirectories.
- Part 3 which made GetFilesHelper include symlinks in the results.

Test coverage for getFilesAndDirectories is provided by
dom/filesystem/tests/test_basic.html by way of changes to its included
file dom/filesystem/tests/filesystem_commons.js and changes to the
createTreeFile helper in dom/filesystem/tests/script_fileList.js.
Test coverage for GetFilesHelper is provided by
dom/filesystem/tests/test_webkitdirectory.html and changes to the
createTestFile helper in dom/filesystem/tests/script_fileList.js.

Commenting out either of the `isLink` test in the relevant C++ code will
cause the given tests to fail on non-windows platforms.
2023-07-06 10:37:32 +08:00

107 lines
4.4 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.input.dirpicker", true],
["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);
}