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