Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * Joins paths so that the two paths are connected by only 1 '/'. | 6 * Joins paths so that the two paths are connected by only 1 '/'. |
| 7 * @param {string} a Path. | 7 * @param {string} a Path. |
| 8 * @param {string} b Path. | 8 * @param {string} b Path. |
| 9 * @return {string} Joined path. | 9 * @return {string} Joined path. |
| 10 */ | 10 */ |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 23 this.name = volumeId; | 23 this.name = volumeId; |
| 24 this.entries = {}; | 24 this.entries = {}; |
| 25 this.rootURL = rootURL; | 25 this.rootURL = rootURL; |
| 26 } | 26 } |
| 27 | 27 |
| 28 MockFileSystem.prototype = { | 28 MockFileSystem.prototype = { |
| 29 get root() { return this.entries['/']; } | 29 get root() { return this.entries['/']; } |
| 30 }; | 30 }; |
| 31 | 31 |
| 32 /** | 32 /** |
| 33 * Creates a new mock filesystem with a root dir and the given volume ID. | |
| 34 * @param {string} volumeId | |
| 35 * @return {!MockFileSystem} | |
| 36 */ | |
| 37 MockFileSystem.create = function(volumeId) { | |
|
hirono
2014/12/04 04:44:23
It looks convenient. Could you please move the lin
Ben Kwa
2014/12/04 19:53:01
Done.
| |
| 38 var fileSystem = new MockFileSystem(volumeId, 'filesystem:' + volumeId); | |
| 39 fileSystem.entries['/'] = new MockDirectoryEntry(fileSystem, '/'); | |
| 40 return fileSystem; | |
| 41 }; | |
| 42 | |
| 43 /** | |
| 44 * Creates file and directory entries for all the given paths. Paths ending in | |
| 45 * slashes are interpreted as directories. All intermediate directories leading | |
| 46 * up to the files/directories to be created, are also created. | |
| 47 * @param {!Array<string>} paths An array of file paths to populate in this file | |
| 48 * system. | |
| 49 */ | |
| 50 MockFileSystem.prototype.populate = function(paths) { | |
| 51 paths.forEach(function(path) { | |
| 52 var pathElements = path.split('/'); | |
| 53 pathElements.forEach(function(_, i) { | |
| 54 var subpath = pathElements.slice(0, i).join('/'); | |
| 55 if (subpath && !(subpath in this.entries)) { | |
|
hirono
2014/12/04 04:44:24
nit: Please drop {}
Ben Kwa
2014/12/04 19:53:01
Done.
| |
| 56 this.entries[subpath] = new MockDirectoryEntry(this, subpath); | |
| 57 } | |
| 58 }.bind(this)); | |
| 59 | |
| 60 // If the path doesn't end in a slash, create a file. | |
| 61 if (!/\/$/.test(path)) { | |
|
hirono
2014/12/04 04:44:24
nit: Please drop {}
Ben Kwa
2014/12/04 19:53:01
Done.
| |
| 62 this.entries[path] = new MockFileEntry(this, path); | |
|
hirono
2014/12/04 04:44:23
Entry should take metadata.
Ben Kwa
2014/12/04 19:53:01
Done.
| |
| 63 } | |
| 64 }.bind(this)); | |
| 65 }; | |
| 66 | |
| 67 /** | |
| 33 * Base class of mock entries. | 68 * Base class of mock entries. |
| 34 * | 69 * |
| 35 * @param {TestFileSystem} filesystem File system where the entry is localed. | 70 * @param {TestFileSystem} filesystem File system where the entry is localed. |
| 36 * @param {string} fullPath Full path of the entry. | 71 * @param {string} fullPath Full path of the entry. |
| 37 * @constructor | 72 * @constructor |
| 38 */ | 73 */ |
| 39 function MockEntry(filesystem, fullPath) { | 74 function MockEntry(filesystem, fullPath) { |
| 40 this.filesystem = filesystem; | 75 this.filesystem = filesystem; |
| 41 this.fullPath = fullPath; | 76 this.fullPath = fullPath; |
| 42 } | 77 } |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 200 * Returns a directory under the directory. | 235 * Returns a directory under the directory. |
| 201 * | 236 * |
| 202 * @param {string} path Path. | 237 * @param {string} path Path. |
| 203 * @param {Object} option Option. | 238 * @param {Object} option Option. |
| 204 * @param {callback(MockDirectoryEntry)} onSuccess Success callback. | 239 * @param {callback(MockDirectoryEntry)} onSuccess Success callback. |
| 205 * @param {callback(Object)} onError Failure callback; | 240 * @param {callback(Object)} onError Failure callback; |
| 206 */ | 241 */ |
| 207 MockDirectoryEntry.prototype.getDirectory = | 242 MockDirectoryEntry.prototype.getDirectory = |
| 208 function(path, option, onSuccess, onError) { | 243 function(path, option, onSuccess, onError) { |
| 209 var fullPath = path[0] === '/' ? path : joinPath(this.fullPath, path); | 244 var fullPath = path[0] === '/' ? path : joinPath(this.fullPath, path); |
| 210 if (!this.filesystem.entries[fullPath]) | 245 var result = this.filesystem.entries[fullPath]; |
|
hirono
2014/12/04 04:44:23
Thank you for implementing this!
Ben Kwa
2014/12/04 19:53:01
Acknowledged.
| |
| 211 onError({name: util.FileError.NOT_FOUND_ERR}); | 246 if (result) { |
| 212 else if (!(this.filesystem.entries[fullPath] instanceof MockDirectoryEntry)) | 247 if (!(result instanceof MockDirectoryEntry)) |
| 213 onError({name: util.FileError.TYPE_MISMATCH_ERR}); | 248 onError({name: util.FileError.TYPE_MISMATCH_ERR}); |
| 214 else | 249 else if (option['create'] && option['exclusive']) |
| 215 onSuccess(this.filesystem.entries[fullPath]); | 250 onError({name: util.FileError.PATH_EXISTS_ERR}); |
| 251 else | |
| 252 onSuccess(result); | |
| 253 } else { | |
| 254 if (!option['create']) { | |
| 255 onError({name: util.FileError.NOT_FOUND_ERR}); | |
| 256 } else { | |
| 257 var newEntry = new MockDirectoryEntry(this.filesystem, fullPath); | |
| 258 this.filesystem.entries[fullPath] = newEntry; | |
| 259 onSuccess(newEntry); | |
| 260 } | |
| 261 } | |
| 216 }; | 262 }; |
| 217 | 263 |
| 218 /** | 264 /** |
| 219 * Creates a MockDirectoryReader for the entry. | 265 * Creates a MockDirectoryReader for the entry. |
| 220 * @return {DirectoryReader} A directory reader. | 266 * @return {DirectoryReader} A directory reader. |
| 221 */ | 267 */ |
| 222 MockDirectoryEntry.prototype.createReader = function() { | 268 MockDirectoryEntry.prototype.createReader = function() { |
| 223 return new MockDirectoryReader(); | 269 return new MockDirectoryReader(); |
| 224 }; | 270 }; |
| 225 | 271 |
| 226 /** | 272 /** |
| 227 * Mock class for DirectoryReader. | 273 * Mock class for DirectoryReader. |
| 228 */ | 274 */ |
| 229 function MockDirectoryReader() {} | 275 function MockDirectoryReader() {} |
| 230 | 276 |
| 231 /** | 277 /** |
| 232 * Reads entries. | 278 * Reads entries. |
| 233 * Current implementation just calls success callback with an empty list. | 279 * Current implementation just calls success callback with an empty list. |
| 234 * | 280 * |
| 235 * @param {function(Array)} success Success callback. | 281 * @param {function(Array)} success Success callback. |
| 236 * @param {function} error Error callback. | 282 * @param {function} error Error callback. |
| 237 */ | 283 */ |
| 238 MockDirectoryReader.prototype.readEntries = function(success, error) { | 284 MockDirectoryReader.prototype.readEntries = function(success, error) { |
| 239 success([]); | 285 success([]); |
| 240 }; | 286 }; |
| OLD | NEW |