| 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 'use strict'; | 5 'use strict'; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * @type {DOMFileSystem} | |
| 9 */ | |
| 10 var fileSystem = null; | |
| 11 | |
| 12 /** | |
| 13 * @type {string} | |
| 14 * @const | |
| 15 */ | |
| 16 var FILE_SYSTEM_ID = 'vanilla'; | |
| 17 | |
| 18 /** | |
| 19 * @type {Object} | 8 * @type {Object} |
| 20 * @const | 9 * @const |
| 21 */ | 10 */ |
| 22 var TESTING_ROOT = Object.freeze({ | 11 var TESTING_ROOT = Object.freeze({ |
| 23 isDirectory: true, | 12 isDirectory: true, |
| 24 name: '', | 13 name: '', |
| 25 size: 0, | 14 size: 0, |
| 26 modificationTime: new Date(2013, 3, 27, 9, 38, 14) | 15 modificationTime: new Date(2013, 3, 27, 9, 38, 14) |
| 27 }); | 16 }); |
| 28 | 17 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 42 * @const | 31 * @const |
| 43 */ | 32 */ |
| 44 var TESTING_WRONG_TIME_FILE = Object.freeze({ | 33 var TESTING_WRONG_TIME_FILE = Object.freeze({ |
| 45 isDirectory: false, | 34 isDirectory: false, |
| 46 name: 'invalid-time.txt', | 35 name: 'invalid-time.txt', |
| 47 size: 4096, | 36 size: 4096, |
| 48 modificationTime: new Date('Invalid date.') | 37 modificationTime: new Date('Invalid date.') |
| 49 }); | 38 }); |
| 50 | 39 |
| 51 /** | 40 /** |
| 52 * Gets volume information for the provided file system. | |
| 53 * | |
| 54 * @param {string} fileSystemId Id of the provided file system. | |
| 55 * @param {function(Object)} callback Callback to be called on result, with the | |
| 56 * volume information object in case of success, or null if not found. | |
| 57 */ | |
| 58 function getVolumeInfo(fileSystemId, callback) { | |
| 59 chrome.fileBrowserPrivate.getVolumeMetadataList(function(volumeList) { | |
| 60 for (var i = 0; i < volumeList.length; i++) { | |
| 61 if (volumeList[i].extensionId == chrome.runtime.id && | |
| 62 volumeList[i].fileSystemId == fileSystemId) { | |
| 63 callback(volumeList[i]); | |
| 64 return; | |
| 65 } | |
| 66 } | |
| 67 callback(null); | |
| 68 }); | |
| 69 } | |
| 70 | |
| 71 /** | |
| 72 * Returns metadata for a requested entry. | 41 * Returns metadata for a requested entry. |
| 73 * | 42 * |
| 74 * @param {GetMetadataRequestedOptions} options Options. | 43 * @param {GetMetadataRequestedOptions} options Options. |
| 75 * @param {function(Object)} onSuccess Success callback with metadata passed | 44 * @param {function(Object)} onSuccess Success callback with metadata passed |
| 76 * an argument. | 45 * an argument. |
| 77 * @param {function(string)} onError Error callback with an error code. | 46 * @param {function(string)} onError Error callback with an error code. |
| 78 */ | 47 */ |
| 79 function onGetMetadataRequested(options, onSuccess, onError) { | 48 function onGetMetadataRequested(options, onSuccess, onError) { |
| 80 if (options.fileSystemId != FILE_SYSTEM_ID) { | 49 if (options.fileSystemId != test_util.FILE_SYSTEM_ID) { |
| 81 onError('SECURITY'); // enum ProviderError. | 50 onError('SECURITY'); // enum ProviderError. |
| 82 return; | 51 return; |
| 83 } | 52 } |
| 84 | 53 |
| 85 if (options.entryPath == '/') { | 54 if (options.entryPath == '/') { |
| 86 onSuccess(TESTING_ROOT); | 55 onSuccess(TESTING_ROOT); |
| 87 return; | 56 return; |
| 88 } | 57 } |
| 89 | 58 |
| 90 if (options.entryPath == '/' + TESTING_FILE.name) { | 59 if (options.entryPath == '/' + TESTING_FILE.name) { |
| 91 onSuccess(TESTING_FILE); | 60 onSuccess(TESTING_FILE); |
| 92 return; | 61 return; |
| 93 } | 62 } |
| 94 | 63 |
| 95 if (options.entryPath == '/' + TESTING_WRONG_TIME_FILE.name) { | 64 if (options.entryPath == '/' + TESTING_WRONG_TIME_FILE.name) { |
| 96 onSuccess(TESTING_WRONG_TIME_FILE); | 65 onSuccess(TESTING_WRONG_TIME_FILE); |
| 97 return; | 66 return; |
| 98 } | 67 } |
| 99 | 68 |
| 100 onError('NOT_FOUND'); // enum ProviderError. | 69 onError('NOT_FOUND'); // enum ProviderError. |
| 101 } | 70 } |
| 102 | 71 |
| 103 /** | 72 /** |
| 104 * Sets up the tests. Called once per all test cases. In case of a failure, | 73 * Sets up the tests. Called once per all test cases. In case of a failure, |
| 105 * the callback is not called. | 74 * the callback is not called. |
| 106 * | 75 * |
| 107 * @param {function()} callback Success callback. | 76 * @param {function()} callback Success callback. |
| 108 */ | 77 */ |
| 109 function setUp(callback) { | 78 function setUp(callback) { |
| 110 chrome.fileSystemProvider.mount( | 79 chrome.fileSystemProvider.onGetMetadataRequested.addListener( |
| 111 {fileSystemId: FILE_SYSTEM_ID, displayName: 'chocolate.zip'}, | 80 onGetMetadataRequested); |
| 112 function() { | 81 test_util.mountFileSystem(callback); |
| 113 chrome.fileSystemProvider.onGetMetadataRequested.addListener( | |
| 114 onGetMetadataRequested); | |
| 115 | |
| 116 getVolumeInfo(FILE_SYSTEM_ID, function(volumeInfo) { | |
| 117 chrome.test.assertTrue(!!volumeInfo); | |
| 118 chrome.fileBrowserPrivate.requestFileSystem( | |
| 119 volumeInfo.volumeId, | |
| 120 function(inFileSystem) { | |
| 121 chrome.test.assertTrue(!!inFileSystem); | |
| 122 | |
| 123 fileSystem = inFileSystem; | |
| 124 callback(); | |
| 125 }); | |
| 126 }); | |
| 127 }, | |
| 128 function() { | |
| 129 chrome.test.fail(); | |
| 130 }); | |
| 131 } | 82 } |
| 132 | 83 |
| 133 /** | 84 /** |
| 134 * Runs all of the test cases, one by one. | 85 * Runs all of the test cases, one by one. |
| 135 */ | 86 */ |
| 136 function runTests() { | 87 function runTests() { |
| 137 chrome.test.runTests([ | 88 chrome.test.runTests([ |
| 138 // Read metadata of the root. | 89 // Read metadata of the root. |
| 139 function getFileMetadataSuccess() { | 90 function getFileMetadataSuccess() { |
| 140 var onSuccess = chrome.test.callbackPass(); | 91 var onSuccess = chrome.test.callbackPass(); |
| 141 fileSystem.root.getMetadata( | 92 test_util.fileSystem.root.getMetadata( |
| 142 function(metadata) { | 93 function(metadata) { |
| 143 chrome.test.assertEq(TESTING_ROOT.size, metadata.size); | 94 chrome.test.assertEq(TESTING_ROOT.size, metadata.size); |
| 144 chrome.test.assertEq( | 95 chrome.test.assertEq( |
| 145 TESTING_ROOT.modificationTime.toString(), | 96 TESTING_ROOT.modificationTime.toString(), |
| 146 metadata.modificationTime.toString()); | 97 metadata.modificationTime.toString()); |
| 147 onSuccess(); | 98 onSuccess(); |
| 148 }, function(error) { | 99 }, function(error) { |
| 149 chrome.test.fail(error.name); | 100 chrome.test.fail(error.name); |
| 150 }); | 101 }); |
| 151 }, | 102 }, |
| 152 // Read metadata of an existing testing file. | 103 // Read metadata of an existing testing file. |
| 153 function getFileMetadataSuccess() { | 104 function getFileMetadataSuccess() { |
| 154 var onSuccess = chrome.test.callbackPass(); | 105 var onSuccess = chrome.test.callbackPass(); |
| 155 fileSystem.root.getFile( | 106 test_util.fileSystem.root.getFile( |
| 156 TESTING_FILE.name, | 107 TESTING_FILE.name, |
| 157 {create: false}, | 108 {create: false}, |
| 158 function(fileEntry) { | 109 function(fileEntry) { |
| 159 chrome.test.assertEq(TESTING_FILE.name, fileEntry.name); | 110 chrome.test.assertEq(TESTING_FILE.name, fileEntry.name); |
| 160 chrome.test.assertEq( | 111 chrome.test.assertEq( |
| 161 TESTING_FILE.isDirectory, fileEntry.isDirectory); | 112 TESTING_FILE.isDirectory, fileEntry.isDirectory); |
| 162 fileEntry.getMetadata(function(metadata) { | 113 fileEntry.getMetadata(function(metadata) { |
| 163 chrome.test.assertEq(TESTING_FILE.size, metadata.size); | 114 chrome.test.assertEq(TESTING_FILE.size, metadata.size); |
| 164 chrome.test.assertEq( | 115 chrome.test.assertEq( |
| 165 TESTING_FILE.modificationTime.toString(), | 116 TESTING_FILE.modificationTime.toString(), |
| 166 metadata.modificationTime.toString()); | 117 metadata.modificationTime.toString()); |
| 167 onSuccess(); | 118 onSuccess(); |
| 168 }, function(error) { | 119 }, function(error) { |
| 169 chrome.test.fail(error.name); | 120 chrome.test.fail(error.name); |
| 170 }); | 121 }); |
| 171 }, | 122 }, |
| 172 function(error) { | 123 function(error) { |
| 173 chrome.test.fail(error.name); | 124 chrome.test.fail(error.name); |
| 174 }); | 125 }); |
| 175 }, | 126 }, |
| 176 // Read metadata of an existing testing file, which however has an invalid | 127 // Read metadata of an existing testing file, which however has an invalid |
| 177 // modification time. It should not cause an error, but an invalid date | 128 // modification time. It should not cause an error, but an invalid date |
| 178 // should be passed to fileapi instead. The reason is, that there is no | 129 // should be passed to fileapi instead. The reason is, that there is no |
| 179 // easy way to verify an incorrect modification time at early stage. | 130 // easy way to verify an incorrect modification time at early stage. |
| 180 function getFileMetadataWrongTimeSuccess() { | 131 function getFileMetadataWrongTimeSuccess() { |
| 181 var onSuccess = chrome.test.callbackPass(); | 132 var onSuccess = chrome.test.callbackPass(); |
| 182 fileSystem.root.getFile( | 133 test_util.fileSystem.root.getFile( |
| 183 TESTING_WRONG_TIME_FILE.name, | 134 TESTING_WRONG_TIME_FILE.name, |
| 184 {create: false}, | 135 {create: false}, |
| 185 function(fileEntry) { | 136 function(fileEntry) { |
| 186 chrome.test.assertEq(TESTING_WRONG_TIME_FILE.name, fileEntry.name); | 137 chrome.test.assertEq(TESTING_WRONG_TIME_FILE.name, fileEntry.name); |
| 187 fileEntry.getMetadata(function(metadata) { | 138 fileEntry.getMetadata(function(metadata) { |
| 188 chrome.test.assertTrue( | 139 chrome.test.assertTrue( |
| 189 Number.isNaN(metadata.modificationTime.getTime())); | 140 Number.isNaN(metadata.modificationTime.getTime())); |
| 190 onSuccess(); | 141 onSuccess(); |
| 191 }, function(error) { | 142 }, function(error) { |
| 192 chrome.test.fail(error.name); | 143 chrome.test.fail(error.name); |
| 193 }); | 144 }); |
| 194 }, function(error) { | 145 }, function(error) { |
| 195 chrome.test.fail(error.name); | 146 chrome.test.fail(error.name); |
| 196 }); | 147 }); |
| 197 }, | 148 }, |
| 198 // Read metadata of a directory which does not exist, what should return an | 149 // Read metadata of a directory which does not exist, what should return an |
| 199 // error. DirectoryEntry.getDirectory() causes fetching metadata. | 150 // error. DirectoryEntry.getDirectory() causes fetching metadata. |
| 200 function getFileMetadataNotFound() { | 151 function getFileMetadataNotFound() { |
| 201 var onSuccess = chrome.test.callbackPass(); | 152 var onSuccess = chrome.test.callbackPass(); |
| 202 fileSystem.root.getDirectory( | 153 test_util.fileSystem.root.getDirectory( |
| 203 'cranberries', | 154 'cranberries', |
| 204 {create: false}, | 155 {create: false}, |
| 205 function(dirEntry) { | 156 function(dirEntry) { |
| 206 chrome.test.fail(); | 157 chrome.test.fail(); |
| 207 }, | 158 }, |
| 208 function(error) { | 159 function(error) { |
| 209 chrome.test.assertEq('NotFoundError', error.name); | 160 chrome.test.assertEq('NotFoundError', error.name); |
| 210 onSuccess(); | 161 onSuccess(); |
| 211 }); | 162 }); |
| 212 }, | 163 }, |
| 213 // Read metadata of a file using getDirectory(). An error should be returned | 164 // Read metadata of a file using getDirectory(). An error should be returned |
| 214 // because of type mismatching. DirectoryEntry.getDirectory() causes | 165 // because of type mismatching. DirectoryEntry.getDirectory() causes |
| 215 // fetching metadata. | 166 // fetching metadata. |
| 216 function getFileMetadataWrongType() { | 167 function getFileMetadataWrongType() { |
| 217 var onSuccess = chrome.test.callbackPass(); | 168 var onSuccess = chrome.test.callbackPass(); |
| 218 fileSystem.root.getDirectory( | 169 test_util.fileSystem.root.getDirectory( |
| 219 TESTING_FILE.name, | 170 TESTING_FILE.name, |
| 220 {create: false}, | 171 {create: false}, |
| 221 function(fileEntry) { | 172 function(fileEntry) { |
| 222 chrome.test.fail(); | 173 chrome.test.fail(); |
| 223 }, | 174 }, |
| 224 function(error) { | 175 function(error) { |
| 225 chrome.test.assertEq('TypeMismatchError', error.name); | 176 chrome.test.assertEq('TypeMismatchError', error.name); |
| 226 onSuccess(); | 177 onSuccess(); |
| 227 }); | 178 }); |
| 228 } | 179 } |
| 229 ]); | 180 ]); |
| 230 } | 181 } |
| 231 | 182 |
| 232 // Setup and run all of the test cases. | 183 // Setup and run all of the test cases. |
| 233 setUp(runTests); | 184 setUp(runTests); |
| OLD | NEW |