forked from mirrors/gecko-dev
		
	 f08e08b87c
			
		
	
	
		f08e08b87c
		
	
	
	
	
		
			
			This is effectively a backout 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. https://hg.mozilla.org/mozilla-central/rev/3f1e16d3bfb2 - Part 3 which made GetFilesHelper include symlinks in the results. https://hg.mozilla.org/mozilla-central/rev/e28c3a696524 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. Differential Revision: https://phabricator.services.mozilla.com/D178894
		
			
				
	
	
		
			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);
 | |
| }
 |