Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(120)

Side by Side Diff: chrome/test/data/file_manager/unit_tests/file_operation_manager_unittest.js

Issue 442393003: Files.app: Add units test of FileOperationManager#paste. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/test/data/file_manager/unit_tests/mocks/mock_entry.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 chrome.power.keepAwakeRequested = true;
23 },
24 releaseKeepAwake: function() {
25 chrome.power.keepAwakeRequested = false;
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 chrome.fileBrowserPrivate.onCopyProgress.listener_ = callback;
39 },
40 removeListener: function() {
41 chrome.fileBrowserPrivate.onCopyProgress.listener_ = null;
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() {
yoshiki 2014/08/08 04:36:42 Why do you use Promise.resolve()? (maybe make it a
hirono 2014/08/08 04:56:19 Done.
57 chrome.fileBrowserPrivate.onCopyProgress.listener_.apply(
58 null, events[index]);
59 if (index + 1 < events.length)
60 return sendEvent(index + 1);
61 else
62 return null;
63 }.bind(this));
64 }.bind(this);
65 callback(id);
66 sendEvent(0).catch(function(error) {
67 console.log(error.stack || error);
68 window.onerror();
69 });
70 }
71 };
72
73 /**
7 * Reports the result of promise to the test system. 74 * Reports the result of promise to the test system.
8 * @param {Promise} promise Promise to be fulfilled or rejected. 75 * @param {Promise} promise Promise to be fulfilled or rejected.
9 * @param {function(boolean:hasError)} callback Callback to be passed true on 76 * @param {function(boolean:hasError)} callback Callback to be passed true on
10 * error. 77 * error.
11 */ 78 */
12 function reportPromise(promise, callback) { 79 function reportPromise(promise, callback) {
13 promise.then( 80 promise.then(
14 callback.bind(null, false), 81 callback.bind(null, false),
15 function(error) { 82 function(error) {
16 if (error instanceof FileOperationManager.Error) { 83 if (error instanceof FileOperationManager.Error) {
17 console.log('FileOperationManager.Error: code=' + error.code); 84 console.log('FileOperationManager.Error: code=' + error.code);
18 } else { 85 } else {
19 console.log(error.stack || error.name || error); 86 console.log(error.stack || error.name || error);
20 } 87 }
21 callback(true); 88 callback(true);
22 }); 89 });
23 } 90 }
24 91
25 /** 92 /**
93 * Test target.
94 * @type {FileOperationManager}
95 */
96 var fileOperationManager;
97
98 /**
99 * Initializes the test environment.
100 */
101 function setUp() {
102 fileOperationManager = new FileOperationManager();
103 }
104
105 /**
26 * Tests the fileOperationUtil.resolvePath function. 106 * Tests the fileOperationUtil.resolvePath function.
27 * @param {function(boolean:hasError)} callback Callback to be passed true on 107 * @param {function(boolean:hasError)} callback Callback to be passed true on
28 * error. 108 * error.
29 */ 109 */
30 function testResolvePath(callback) { 110 function testResolvePath(callback) {
31 var fileEntry = new MockFileEntry('testVolume', '/file', {}); 111 var fileEntry = new MockFileEntry('testVolume', '/file', {});
32 var directoryEntry = new MockDirectoryEntry('testVolume', '/directory', {}); 112 var directoryEntry = new MockDirectoryEntry('testVolume', '/directory', {});
33 var root = new MockDirectoryEntry('testVolume', '/', { 113 var root = new MockDirectoryEntry('testVolume', '/', {
34 '/file': fileEntry, 114 '/file': fileEntry,
35 '/directory': directoryEntry 115 '/directory': directoryEntry
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 assertEquals(util.FileOperationErrorType.TARGET_EXISTS, error.code); 185 assertEquals(util.FileOperationErrorType.TARGET_EXISTS, error.code);
106 }); 186 });
107 187
108 var testPromise = Promise.all([ 188 var testPromise = Promise.all([
109 nonExistingPromise, 189 nonExistingPromise,
110 existingPathPromise, 190 existingPathPromise,
111 failedPromise 191 failedPromise
112 ]); 192 ]);
113 reportPromise(testPromise, callback); 193 reportPromise(testPromise, callback);
114 } 194 }
195
196 /**
197 * Tests the fileOperationUtil.paste.
198 */
199 function testCopy(callback) {
200 // Prepare entries and their resolver.
201 var sourceEntries =
202 [new MockFileEntry('testVolume', '/test.txt', {size: 10})];
203 var targetEntry = new MockDirectoryEntry('testVolume', '/', {});
204 window.webkitResolveLocalFileSystemURL = function(url, success, failure) {
205 if (url === sourceEntries[0].toURL())
206 success(sourceEntries[0]);
207 else if (url === targetEntry.toURL())
208 success(targetEntry);
209 else
210 failure();
211 };
212
213 // Observing manager's events.
214 var eventsPromise = new Promise(function(fulfill) {
215 var events = [];
216 fileOperationManager.addEventListener('copy-progress', function(event) {
217 events.push(event);
218 if (event.reason == 'SUCCESS')
yoshiki 2014/08/08 04:36:42 nit: ===
hirono 2014/08/08 04:56:19 Done.
219 fulfill(events);
220 });
221 fileOperationManager.addEventListener('entry-changed', function(event) {
222 events.push(event);
223 });
224 });
225
226 // Verify the events.
227 reportPromise(eventsPromise.then(function(events) {
228 var firstEvent = events[0];
229 assertEquals('BEGIN', firstEvent.reason);
230 assertEquals(1, firstEvent.status.numRemainingItems);
231 assertEquals(0, firstEvent.status.processedBytes);
232 assertEquals(1, firstEvent.status.totalBytes);
233
234 var lastEvent = events[events.length - 1];
235 assertEquals('SUCCESS', lastEvent.reason);
236 assertEquals(0, lastEvent.status.numRemainingItems);
237 assertEquals(10, lastEvent.status.processedBytes);
238 assertEquals(10, lastEvent.status.totalBytes);
239
240 assertTrue(events.some(function(event) {
241 return event.type === 'entry-changed' &&
242 event.entry === targetEntry;
243 }));
244 }), callback);
245
246 fileOperationManager.paste(sourceEntries, targetEntry, false);
247 }
OLDNEW
« no previous file with comments | « no previous file | chrome/test/data/file_manager/unit_tests/mocks/mock_entry.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698