Index: chrome/test/data/file_manager/unit_tests/mocks/mock_entry.js |
diff --git a/chrome/test/data/file_manager/unit_tests/mocks/mock_entry.js b/chrome/test/data/file_manager/unit_tests/mocks/mock_entry.js |
index c8f68848ad94a453e76f5dacddafe82b19c580e5..ef358bd1e336c0b255980a128e01c60a35876942 100644 |
--- a/chrome/test/data/file_manager/unit_tests/mocks/mock_entry.js |
+++ b/chrome/test/data/file_manager/unit_tests/mocks/mock_entry.js |
@@ -16,13 +16,20 @@ function joinPath(a, b) { |
* Mock class for DOMFileSystem. |
* |
* @param {string} volumeId Volume ID. |
- * @param {string} rootURL URL string of root which is used in MockEntry.toURL. |
+ * @param {string=} opt_rootURL URL string of root which is used in |
+ * MockEntry.toURL. |
* @constructor |
*/ |
-function MockFileSystem(volumeId, rootURL) { |
+function MockFileSystem(volumeId, opt_rootURL) { |
+ /** @type {string} */ |
this.name = volumeId; |
+ |
+ /** @type {!Object<string, !Entry>} */ |
this.entries = {}; |
- this.rootURL = rootURL; |
+ this.entries['/'] = new MockDirectoryEntry(this, '/'); |
+ |
+ /** @type {string} */ |
+ this.rootURL = opt_rootURL || 'filesystem:' + volumeId; |
} |
MockFileSystem.prototype = { |
@@ -30,6 +37,28 @@ MockFileSystem.prototype = { |
}; |
/** |
+ * Creates file and directory entries for all the given paths. Paths ending in |
+ * slashes are interpreted as directories. All intermediate directories leading |
+ * up to the files/directories to be created, are also created. |
+ * @param {!Array<string>} paths An array of file paths to populate in this file |
+ * system. |
+ */ |
+MockFileSystem.prototype.populate = function(paths) { |
+ paths.forEach(function(path) { |
+ var pathElements = path.split('/'); |
+ pathElements.forEach(function(_, i) { |
+ var subpath = pathElements.slice(0, i).join('/'); |
+ if (subpath && !(subpath in this.entries)) |
+ this.entries[subpath] = new MockDirectoryEntry(this, subpath); |
+ }.bind(this)); |
+ |
+ // If the path doesn't end in a slash, create a file. |
+ if (!/\/$/.test(path)) |
+ this.entries[path] = new MockFileEntry(this, path, {size: 0}); |
+ }.bind(this)); |
+}; |
+ |
+/** |
* Base class of mock entries. |
* |
* @param {TestFileSystem} filesystem File system where the entry is localed. |
@@ -207,12 +236,23 @@ MockDirectoryEntry.prototype.getFile = function( |
MockDirectoryEntry.prototype.getDirectory = |
function(path, option, onSuccess, onError) { |
var fullPath = path[0] === '/' ? path : joinPath(this.fullPath, path); |
- if (!this.filesystem.entries[fullPath]) |
- onError({name: util.FileError.NOT_FOUND_ERR}); |
- else if (!(this.filesystem.entries[fullPath] instanceof MockDirectoryEntry)) |
- onError({name: util.FileError.TYPE_MISMATCH_ERR}); |
- else |
- onSuccess(this.filesystem.entries[fullPath]); |
+ var result = this.filesystem.entries[fullPath]; |
+ if (result) { |
+ if (!(result instanceof MockDirectoryEntry)) |
+ onError({name: util.FileError.TYPE_MISMATCH_ERR}); |
+ else if (option['create'] && option['exclusive']) |
+ onError({name: util.FileError.PATH_EXISTS_ERR}); |
+ else |
+ onSuccess(result); |
+ } else { |
+ if (!option['create']) { |
+ onError({name: util.FileError.NOT_FOUND_ERR}); |
+ } else { |
+ var newEntry = new MockDirectoryEntry(this.filesystem, fullPath); |
+ this.filesystem.entries[fullPath] = newEntry; |
+ onSuccess(newEntry); |
+ } |
+ } |
}; |
/** |