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 'use strict'; | 4 'use strict'; |
| 5 | 5 |
| 6 /** | 6 /** |
| 7 * Mock of chrome.runtime. | |
| 8 * @type {Object} | |
| 9 * @const | |
| 10 */ | |
| 11 chrome.runtime = { | |
| 12 lastError: null | |
| 13 }; | |
| 14 | |
| 15 /** | |
| 16 * Mock of chrome.power. | |
| 17 * @type {Object} | |
| 18 * @const | |
| 19 */ | |
| 20 chrome.power = { | |
| 21 requestKeepAwake: function() { | |
| 22 this.keepAwakeRequested = true; | |
|
yoshiki
2014/08/07 09:35:29
Don't use 'this' here, since 'this' is not an inst
hirono
2014/08/08 03:37:41
Done.
| |
| 23 }, | |
| 24 releaseKeepAwake: function() { | |
| 25 this.keepAwakeRequested = false; | |
|
yoshiki
2014/08/07 09:35:29
ditto
hirono
2014/08/08 03:37:41
Done.
| |
| 26 }, | |
| 27 keepAwakeRequested: false | |
| 28 }; | |
| 29 | |
| 30 /** | |
| 31 * Mock of chrome.fileBrowserPrivate. | |
| 32 * @type {Object} | |
| 33 * @const | |
| 34 */ | |
| 35 chrome.fileBrowserPrivate = { | |
| 36 onCopyProgress: { | |
| 37 addListener: function(callback) { | |
| 38 this.listener_ = callback; | |
|
yoshiki
2014/08/07 09:35:29
ditto
hirono
2014/08/08 03:37:40
Done.
| |
| 39 }, | |
| 40 removeListener: function() { | |
| 41 this.listener_ = null; | |
|
yoshiki
2014/08/07 09:35:29
ditto
hirono
2014/08/08 03:37:41
Done.
| |
| 42 }, | |
| 43 listener_: null | |
| 44 }, | |
| 45 startCopy: function(source, destination, newName, callback) { | |
| 46 var id = 1; | |
| 47 var events = [ | |
| 48 'begin_copy_entry', | |
| 49 'progress', | |
| 50 'end_copy_entry', | |
| 51 'success' | |
| 52 ].map(function(type) { | |
| 53 return [id, {type: type, sourceUrl: source, destinationUrl: destination}]; | |
| 54 }); | |
| 55 var sendEvent = function(index) { | |
| 56 return Promise.resolve().then(function() { | |
| 57 this.onCopyProgress.listener_.apply(null, events[index]); | |
|
yoshiki
2014/08/07 09:35:29
ditto
hirono
2014/08/08 03:37:41
Done.
| |
| 58 if (index + 1 < events.length) | |
| 59 return sendEvent(index + 1); | |
| 60 else | |
| 61 return null; | |
| 62 }.bind(this)); | |
| 63 }.bind(this); | |
| 64 callback(id); | |
| 65 sendEvent(0).catch(function(error) { | |
| 66 console.log(error.stack || error); | |
| 67 window.onerror(); | |
| 68 }); | |
| 69 } | |
| 70 }; | |
| 71 | |
| 72 /** | |
| 7 * Reports the result of promise to the test system. | 73 * Reports the result of promise to the test system. |
| 8 * @param {Promise} promise Promise to be fulfilled or rejected. | 74 * @param {Promise} promise Promise to be fulfilled or rejected. |
| 9 * @param {function(boolean:hasError)} callback Callback to be passed true on | 75 * @param {function(boolean:hasError)} callback Callback to be passed true on |
| 10 * error. | 76 * error. |
| 11 */ | 77 */ |
| 12 function reportPromise(promise, callback) { | 78 function reportPromise(promise, callback) { |
| 13 promise.then( | 79 promise.then( |
| 14 callback.bind(null, false), | 80 callback.bind(null, false), |
| 15 function(error) { | 81 function(error) { |
| 16 if (error instanceof FileOperationManager.Error) { | 82 if (error instanceof FileOperationManager.Error) { |
| 17 console.log('FileOperationManager.Error: code=' + error.code); | 83 console.log('FileOperationManager.Error: code=' + error.code); |
| 18 } else { | 84 } else { |
| 19 console.log(error.stack || error.name || error); | 85 console.log(error.stack || error.name || error); |
| 20 } | 86 } |
| 21 callback(true); | 87 callback(true); |
| 22 }); | 88 }); |
| 23 } | 89 } |
| 24 | 90 |
| 25 /** | 91 /** |
| 92 * Test target. | |
| 93 * @type {FileOperationManager} | |
| 94 */ | |
| 95 var fileOperationManager; | |
| 96 | |
| 97 /** | |
| 98 * Initializes the test environment. | |
| 99 */ | |
| 100 function setUp() { | |
| 101 fileOperationManager = new FileOperationManager(); | |
| 102 } | |
| 103 | |
| 104 /** | |
| 26 * Tests the fileOperationUtil.resolvePath function. | 105 * Tests the fileOperationUtil.resolvePath function. |
| 27 * @param {function(boolean:hasError)} callback Callback to be passed true on | 106 * @param {function(boolean:hasError)} callback Callback to be passed true on |
| 28 * error. | 107 * error. |
| 29 */ | 108 */ |
| 30 function testResolvePath(callback) { | 109 function testResolvePath(callback) { |
| 31 var fileEntry = new MockFileEntry('testVolume', '/file', {}); | 110 var fileEntry = new MockFileEntry('testVolume', '/file', {}); |
| 32 var directoryEntry = new MockDirectoryEntry('testVolume', '/directory', {}); | 111 var directoryEntry = new MockDirectoryEntry('testVolume', '/directory', {}); |
| 33 var root = new MockDirectoryEntry('testVolume', '/', { | 112 var root = new MockDirectoryEntry('testVolume', '/', { |
| 34 '/file': fileEntry, | 113 '/file': fileEntry, |
| 35 '/directory': directoryEntry | 114 '/directory': directoryEntry |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 105 assertEquals(util.FileOperationErrorType.TARGET_EXISTS, error.code); | 184 assertEquals(util.FileOperationErrorType.TARGET_EXISTS, error.code); |
| 106 }); | 185 }); |
| 107 | 186 |
| 108 var testPromise = Promise.all([ | 187 var testPromise = Promise.all([ |
| 109 nonExistingPromise, | 188 nonExistingPromise, |
| 110 existingPathPromise, | 189 existingPathPromise, |
| 111 failedPromise | 190 failedPromise |
| 112 ]); | 191 ]); |
| 113 reportPromise(testPromise, callback); | 192 reportPromise(testPromise, callback); |
| 114 } | 193 } |
| 194 | |
| 195 /** | |
| 196 * Tests the fileOperationUtil.paste. | |
| 197 */ | |
| 198 function testCopy(callback) { | |
| 199 // Prepare entries and their resolver. | |
| 200 var sourceEntries = | |
| 201 [new MockFileEntry('testVolume', '/test.txt', {size: 10})]; | |
|
yoshiki
2014/08/07 09:35:30
nit: 4 space indent
hirono
2014/08/08 03:37:40
I counted 4 spaces from the head of 'var' in the p
| |
| 202 var targetEntry = new MockDirectoryEntry('testVolume', '/', {}); | |
| 203 window.webkitResolveLocalFileSystemURL = function(url, success, failure) { | |
| 204 if (url == sourceEntries[0].toURL()) | |
|
yoshiki
2014/08/07 09:35:29
nit ===
hirono
2014/08/08 03:37:40
Done.
| |
| 205 success(sourceEntries[0]); | |
| 206 else if (url == targetEntry.toURL()) | |
|
yoshiki
2014/08/07 09:35:30
ditto
hirono
2014/08/08 03:37:41
Done.
| |
| 207 success(targetEntry); | |
| 208 else { | |
|
yoshiki
2014/08/07 09:35:29
If you uses curly brackets here, please use curly
hirono
2014/08/08 03:37:40
Done.
| |
| 209 console.log('Cannot find ' + url + '.'); | |
|
yoshiki
2014/08/07 09:35:29
Please use 'console.error' if it's an error.
hirono
2014/08/08 03:37:41
Let me remove the line. This is the debug log.
| |
| 210 failure(); | |
| 211 } | |
| 212 }; | |
| 213 | |
| 214 // Observing manager's events. | |
| 215 var eventsPromise = new Promise(function(fulfill) { | |
| 216 var events = []; | |
| 217 fileOperationManager.addEventListener('copy-progress', function(event) { | |
| 218 events.push(event); | |
| 219 if (event.reason == 'SUCCESS') | |
| 220 fulfill(events); | |
| 221 }); | |
| 222 fileOperationManager.addEventListener('entry-changed', function(event) { | |
| 223 events.push(event); | |
| 224 }); | |
| 225 }); | |
| 226 | |
| 227 // Verify the events. | |
| 228 reportPromise(eventsPromise.then(function(events) { | |
| 229 var firstEvent = events[0]; | |
| 230 assertEquals('BEGIN', firstEvent.reason); | |
| 231 assertEquals(1, firstEvent.status.numRemainingItems); | |
| 232 assertEquals(0, firstEvent.status.processedBytes); | |
| 233 assertEquals(1, firstEvent.status.totalBytes); | |
| 234 | |
| 235 var lastEvent = events[events.length - 1]; | |
| 236 assertEquals('SUCCESS', lastEvent.reason); | |
| 237 assertEquals(0, lastEvent.status.numRemainingItems); | |
| 238 assertEquals(10, lastEvent.status.processedBytes); | |
| 239 assertEquals(10, lastEvent.status.totalBytes); | |
| 240 | |
| 241 assertTrue(events.some(function(event) { | |
| 242 return event.type === 'entry-changed' && | |
| 243 event.entry === targetEntry; | |
| 244 })); | |
| 245 }), callback); | |
| 246 | |
| 247 fileOperationManager.paste(sourceEntries, targetEntry, false); | |
| 248 } | |
| OLD | NEW |