blob: 17605c6b2cf81cb436428f40fef66cd7d61dc1d5 [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
/**
* Mock class of FileOperationManager.
* @constructor
* @extends {cr.EventTarget}
*/
function MockFileOperationManager() {
cr.EventTarget.call(this);
/**
* Event to be dispatched when requestTaskCancel is called.
* @type {Event}
*/
this.cancelEvent = null;
/** @type {!Array<string>} */
this.generatedTaskIds = [];
/** @type {Function} */
this.pasteResolver = null;
}
MockFileOperationManager.prototype = {
__proto__: cr.EventTarget.prototype
};
/**
* Dispatches a pre-specified cancel event.
*/
MockFileOperationManager.prototype.requestTaskCancel = function() {
this.dispatchEvent(this.cancelEvent);
};
/**
* @param {!Array<!Entry>} sourceEntries Entries of the source files.
* @param {!DirectoryEntry} targetEntry The destination entry of the target
* directory.
* @param {boolean} isMove True if the operation is "move", otherwise (i.e.
* if the operation is "copy") false.
* @param {string=} opt_taskId If the corresponding item has already created
* at another places, we need to specify the ID of the item. If the
* item is not created, FileOperationManager generates new ID.
*/
MockFileOperationManager.prototype.paste = function(
sourceEntries, targetEntry, isMove, opt_taskId) {
if (this.pasteResolver) {
this.pasteResolver.call(this, {
sourceEntries: sourceEntries,
targetEntry: targetEntry,
isMove: isMove,
opt_taskId: opt_taskId
});
// Reset the resolver for the next paste call.
this.pasteResolver = null;
}
};
/**
* @return {Promise<Object>} A promise that is resolved the next time #paste is
* called. The Object contains the arguments that #paste was called with.
*/
MockFileOperationManager.prototype.whenPasteCalled = function() {
if (this.pasteResolver) {
throw new Error('Only one paste call can be waited on at a time.');
}
return new Promise(function(resolve, reject) {
this.pasteResolver = resolve;
}.bind(this));
};
/**
* Generates a unique task Id.
* @return {string}
*/
MockFileOperationManager.prototype.generateTaskId = function() {
var newTaskId = 'task' + this.generatedTaskIds.length;
this.generatedTaskIds.push(newTaskId);
return newTaskId;
};
/**
* @return {boolean} Whether or not the given task ID belongs to a task
* generated by this manager.
*/
MockFileOperationManager.prototype.isKnownTaskId = function(id) {
return this.generatedTaskIds.indexOf(id) !== -1;
};