Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 var chrome; | |
| 6 var initialized_ = false; | |
| 7 | |
| 8 /** | |
| 9 * Invokes a callback function depending on the result of promise. | |
| 10 * | |
| 11 * @param {Promise} promise Promise. | |
| 12 * @param {function(boolean)} calllback Callback function. True is passed if the | |
| 13 * test failed. | |
|
hirono
2014/10/29 10:02:46
4 spaces are needed when wrapping a line.
yawano
2014/10/30 09:11:46
Done.
| |
| 14 */ | |
| 15 function reportPromise(promise, callback) { | |
|
hirono
2014/10/29 10:02:46
Could you please add test_util.js and share the ut
yawano
2014/10/30 09:11:46
Done.
| |
| 16 promise.then(function() { | |
| 17 callback(/* error */ false); | |
| 18 }, function(error) { | |
| 19 console.error(error.stack || error); | |
| 20 callback(/* error */ true); | |
| 21 }); | |
| 22 } | |
| 23 | |
| 24 function initialize_() { | |
| 25 // It is allowed only once to set loadTimeData.data. | |
| 26 loadTimeData.data = { | |
|
hirono
2014/10/29 10:02:46
Maybe we can just put it at global scope.
yawano
2014/10/30 09:11:46
Done.
| |
| 27 DRIVE_DIRECTORY_LABEL: 'My Drive', | |
| 28 DOWNLOADS_DIRECTORY_LABEL: 'Downloads' | |
| 29 }; | |
| 30 | |
| 31 initialized_ = true; | |
| 32 } | |
| 33 | |
| 34 function setUp() { | |
| 35 // Set up string assets. | |
| 36 if(!initialized_) { | |
| 37 initialize_(); | |
| 38 } | |
| 39 | |
| 40 // Set up mock of chrome.fileManagerPrivate APIs. | |
| 41 chrome = { | |
| 42 fileManagerPrivate: { | |
| 43 mountSourcePath_: null, | |
| 44 onMountCompletedListeners_: [], | |
| 45 onDriveConnectionStatusChangedListeners_: [], | |
| 46 addMount: function(fileUrl, callback) { | |
| 47 callback(chrome.fileManagerPrivate.mountSourcePath_); | |
| 48 }, | |
| 49 removeMount: function(volumeId) { | |
| 50 var event = { | |
| 51 eventType: 'unmount', | |
| 52 status: 'success', | |
| 53 volumeMetadata: { | |
| 54 volumeId: volumeId | |
| 55 } | |
| 56 }; | |
| 57 chrome.fileManagerPrivate.onMountCompleted.dispatchEvent(event); | |
| 58 }, | |
| 59 onDriveConnectionStatusChanged: { | |
| 60 addListener: function(listener) { | |
| 61 chrome.fileManagerPrivate.onDriveConnectionStatusChangedListeners_ | |
| 62 .push(listener); | |
| 63 }, | |
| 64 dispatchEvent: function(event) { | |
| 65 chrome.fileManagerPrivate | |
| 66 .onDriveConnectionStatusChangedListeners_ | |
| 67 .forEach(function(listener) { listener(event); }); | |
| 68 } | |
| 69 }, | |
| 70 onMountCompleted: { | |
| 71 addListener: function(listener) { | |
| 72 chrome.fileManagerPrivate.onMountCompletedListeners_.push(listener); | |
| 73 }, | |
| 74 dispatchEvent: function(event) { | |
| 75 chrome.fileManagerPrivate | |
| 76 .onMountCompletedListeners_.forEach(function(listener) { | |
| 77 listener(event); | |
| 78 }); | |
| 79 } | |
| 80 }, | |
| 81 getDriveConnectionState: function(callback) { | |
| 82 callback(chrome.fileManagerPrivate.driveConnectionState_); | |
| 83 }, | |
| 84 getVolumeMetadataList: function(callback) { | |
| 85 callback(chrome.fileManagerPrivate.volumeMetadataList_); | |
| 86 }, | |
| 87 requestFileSystem: function(volumeId, callback) { | |
| 88 callback(chrome.fileManagerPrivate.fileSystemMap_[volumeId]); | |
| 89 }, | |
| 90 set driveConnectionState (state) { | |
|
hirono
2014/10/29 10:02:46
We don't add a space between property name and arg
yawano
2014/10/30 09:11:47
Done.
| |
| 91 chrome.fileManagerPrivate.driveConnectionState_ = state; | |
| 92 chrome.fileManagerPrivate.onDriveConnectionStatusChanged | |
| 93 .dispatchEvent(null); | |
| 94 } | |
| 95 } | |
| 96 }; | |
| 97 | |
| 98 chrome.fileManagerPrivate.mountSourcePath_ = null; | |
| 99 chrome.fileManagerPrivate.onMountCompletedListeners_ = []; | |
| 100 chrome.fileManagerPrivate.onDriveConnectionStatusChangedListeners_ = []; | |
| 101 chrome.fileManagerPrivate.driveConnectionState_ = | |
| 102 VolumeManagerCommon.DriveConnectionType.ONLINE; | |
| 103 chrome.fileManagerPrivate.volumeMetadataList_ = [ | |
| 104 { | |
| 105 volumeId: 'download:Downloads', | |
| 106 volumeLabel: '', | |
| 107 volumeType: VolumeManagerCommon.VolumeType.DOWNLOADS, | |
| 108 isReadOnly: false, | |
| 109 profile: getMockProfile() | |
| 110 }, | |
| 111 { | |
| 112 volumeId: 'drive:drive-foobar%40chromium.org-hash', | |
| 113 volumeLabel: '', | |
| 114 volumeType: VolumeManagerCommon.VolumeType.DRIVE, | |
| 115 isReadOnly: false, | |
| 116 profile: getMockProfile() | |
| 117 } | |
| 118 ]; | |
| 119 chrome.fileManagerPrivate.fileSystemMap_ = { | |
| 120 'download:Downloads': createMockFileSystem('download:Downloads'), | |
| 121 'drive:drive-foobar%40chromium.org-hash': | |
| 122 createMockFileSystem('drive:drive-foobar%40chromium.org-hash') | |
| 123 }; | |
| 124 } | |
| 125 | |
| 126 function tearDown() { | |
| 127 VolumeManager.revokeInstanceForTesting(); | |
| 128 chrome = null; | |
| 129 } | |
| 130 | |
| 131 /** | |
| 132 * Returns a mock profile. | |
| 133 * | |
| 134 * @return {{displayName:string, isCurrentProfile:boolean, profileId:string}} | |
| 135 * Mock profile | |
| 136 */ | |
| 137 function getMockProfile() { | |
| 138 return { | |
| 139 displayName: 'foobar@chromium.org', | |
| 140 isCurrentProfile: true, | |
| 141 profileId: '' | |
| 142 }; | |
| 143 } | |
| 144 | |
| 145 /** | |
| 146 * Creates a mock file system. | |
| 147 * | |
| 148 * @return {MockFileSystem} A mock file system. | |
| 149 */ | |
| 150 function createMockFileSystem(volumeId) { | |
| 151 var fileSystem = new MockFileSystem(volumeId, 'filesystem:' + volumeId); | |
| 152 fileSystem.entries['/'] = new MockDirectoryEntry(fileSystem, '/'); | |
| 153 return fileSystem; | |
| 154 } | |
| 155 | |
| 156 function testGetVolumeInfo(callback) { | |
| 157 reportPromise(VolumeManager.getInstance().then(function(volumeManager) { | |
| 158 return new Promise(function(resolve, reject) { | |
|
hirono
2014/10/29 10:02:46
The Promise is needed?
yawano
2014/10/30 09:11:46
Done. The promise was unnecessary. I didn't know t
| |
| 159 var entry = new MockFileEntry(createMockFileSystem('download:Downloads'), | |
| 160 '/foo/bar/bla.zip'); | |
| 161 | |
| 162 var volumeInfo = volumeManager.getVolumeInfo(entry); | |
| 163 assertEquals('download:Downloads', volumeInfo.volumeId); | |
| 164 assertEquals(VolumeManagerCommon.VolumeType.DOWNLOADS, | |
| 165 volumeInfo.volumeType); | |
| 166 | |
| 167 resolve(true); | |
| 168 }); | |
| 169 }), callback); | |
| 170 } | |
| 171 | |
| 172 function testGetDriveConnectionState(callback) { | |
| 173 reportPromise(VolumeManager.getInstance().then(function(volumeManager) { | |
| 174 return new Promise(function(resolve, reject) { | |
|
hirono
2014/10/29 10:02:46
The Promise is needed?
yawano
2014/10/30 09:11:46
Done.
| |
| 175 // Default connection state is online | |
| 176 assertEquals(VolumeManagerCommon.DriveConnectionType.ONLINE, | |
| 177 volumeManager.getDriveConnectionState()); | |
| 178 | |
| 179 // Sets it to offline. | |
| 180 chrome.fileManagerPrivate.driveConnectionState = | |
| 181 VolumeManagerCommon.DriveConnectionType.OFFLINE; | |
| 182 assertEquals(VolumeManagerCommon.DriveConnectionType.OFFLINE, | |
| 183 volumeManager.getDriveConnectionState()); | |
| 184 | |
| 185 // Sets it back to online | |
| 186 chrome.fileManagerPrivate.driveConnectionState = | |
| 187 VolumeManagerCommon.DriveConnectionType.ONLINE; | |
| 188 assertEquals(VolumeManagerCommon.DriveConnectionType.ONLINE, | |
| 189 volumeManager.getDriveConnectionState()); | |
| 190 | |
| 191 resolve(true); | |
| 192 }); | |
| 193 }), callback); | |
| 194 } | |
| 195 | |
| 196 function testMountArchiveAndUnmount(callback) { | |
| 197 // Set states of mock fileManagerPrivate APIs. | |
| 198 const mountSourcePath = '/usr/local/home/test/Downloads/foobar.zip'; | |
| 199 chrome.fileManagerPrivate.mountSourcePath_ = mountSourcePath; | |
| 200 chrome.fileManagerPrivate.fileSystemMap_['archive:foobar.zip'] = | |
| 201 createMockFileSystem('archive:foobar.zip'); | |
| 202 | |
| 203 var numberOfVolumes; | |
| 204 var volumeManager; | |
| 205 | |
| 206 reportPromise(VolumeManager.getInstance().then(function(volumeManager_) { | |
|
hirono
2014/10/29 10:02:46
volumeManager_ -> volumeManager
yawano
2014/10/30 09:11:47
Done. I moved scopes of volumeManager and numberOf
| |
| 207 volumeManager = volumeManager_; | |
| 208 numberOfVolumes = volumeManager.volumeInfoList.length; | |
| 209 | |
| 210 return new Promise(function(resolve, reject) { | |
| 211 // Mount an archieve | |
| 212 volumeManager.mountArchive( | |
| 213 'filesystem:chrome-extension://extensionid/external/Downloads-test/' + | |
|
hirono
2014/10/29 10:02:46
4 spaces indent.
yawano
2014/10/30 09:11:47
Done.
| |
| 214 'foobar.zip', | |
| 215 resolve, reject); | |
| 216 | |
| 217 chrome.fileManagerPrivate.onMountCompleted.dispatchEvent( | |
| 218 {eventType: 'mount', | |
|
hirono
2014/10/29 10:02:46
We usually do either:
xxxxxxxxxxxxxxxx({
eventT
yawano
2014/10/30 09:11:47
Done.
| |
| 219 status: 'success', | |
| 220 volumeMetadata: { | |
| 221 volumeId: 'archive:foobar.zip', | |
| 222 volumeLabel: 'foobar.zip', | |
| 223 volumeType: VolumeManagerCommon.VolumeType.ARCHIVE, | |
| 224 isReadOnly: true, | |
| 225 sourcePath: mountSourcePath, | |
| 226 profile: getMockProfile() | |
| 227 } | |
| 228 }); | |
| 229 }); | |
| 230 }).then(function(result) { | |
| 231 assertEquals(numberOfVolumes + 1, volumeManager.volumeInfoList.length); | |
| 232 | |
| 233 return new Promise(function(resolve, reject) { | |
| 234 // Unmount the mounted archievea | |
| 235 volumeManager.volumeInfoList.addEventListener('splice', function(e) { | |
| 236 assertEquals(numberOfVolumes, volumeManager.volumeInfoList.length); | |
| 237 resolve(true); | |
| 238 }); | |
| 239 var entry = new MockFileEntry(createMockFileSystem('archive:foobar.zip'), | |
| 240 '/foo.txt'); | |
| 241 var volumeInfo = volumeManager.getVolumeInfo(entry); | |
| 242 volumeManager.unmount(volumeInfo); | |
| 243 }); | |
| 244 }), callback); | |
| 245 } | |
| 246 | |
| 247 function testGetCurrentProfileVolumeInfo(callback) { | |
| 248 reportPromise(VolumeManager.getInstance().then(function(volumeManager) { | |
| 249 return new Promise(function(resolve, reject) { | |
|
hirono
2014/10/29 10:02:46
The Promise is needed?
yawano
2014/10/30 09:11:47
Done.
| |
| 250 var volumeInfo = volumeManager.getCurrentProfileVolumeInfo( | |
| 251 VolumeManagerCommon.VolumeType.DRIVE); | |
| 252 | |
| 253 assertEquals('drive:drive-foobar%40chromium.org-hash', | |
| 254 volumeInfo.volumeId); | |
| 255 assertEquals(VolumeManagerCommon.VolumeType.DRIVE, volumeInfo.volumeType); | |
| 256 | |
| 257 resolve(true); | |
| 258 }); | |
| 259 }), callback); | |
| 260 } | |
| 261 | |
| 262 function testGetLocationInfo(callback) { | |
| 263 reportPromise(VolumeManager.getInstance().then(function(volumeManager) { | |
| 264 return new Promise(function(resolve, reject) { | |
|
hirono
2014/10/29 10:02:46
The Promise is needed?
yawano
2014/10/30 09:11:47
Done.
| |
| 265 var entry1 = new MockFileEntry(createMockFileSystem('download:Downloads'), | |
|
hirono
2014/10/29 10:02:46
I prefer the specific name such as downloadEntry r
yawano
2014/10/30 09:11:46
Done.
| |
| 266 '/foo/bar/bla.zip'); | |
| 267 var locationInfo1 = volumeManager.getLocationInfo(entry1); | |
| 268 assertEquals(VolumeManagerCommon.VolumeType.DOWNLOADS, | |
| 269 locationInfo1.rootType) | |
| 270 assertFalse(locationInfo1.isReadOnly); | |
| 271 assertFalse(locationInfo1.isRootEntry); | |
| 272 | |
| 273 var entry2 = new MockFileEntry( | |
| 274 createMockFileSystem('drive:drive-foobar%40chromium.org-hash'), | |
| 275 '/root'); | |
| 276 var locationInfo2 = volumeManager.getLocationInfo(entry2); | |
| 277 assertEquals(VolumeManagerCommon.VolumeType.DRIVE, locationInfo2.rootType) | |
| 278 assertFalse(locationInfo2.isReadOnly); | |
| 279 assertTrue(locationInfo2.isRootEntry); | |
| 280 | |
| 281 resolve(true); | |
| 282 }); | |
| 283 }), callback); | |
| 284 } | |
| OLD | NEW |