| Index: ui/file_manager/file_manager/foreground/js/import_controller_unittest.js
|
| diff --git a/ui/file_manager/file_manager/foreground/js/import_controller_unittest.js b/ui/file_manager/file_manager/foreground/js/import_controller_unittest.js
|
| index 3cd55df7f13233edf2837814e380cccaf6c53f2c..c28075742c8be5f72cff2b65d4908720c62f71e5 100644
|
| --- a/ui/file_manager/file_manager/foreground/js/import_controller_unittest.js
|
| +++ b/ui/file_manager/file_manager/foreground/js/import_controller_unittest.js
|
| @@ -26,6 +26,9 @@ var destinationVolume;
|
| /** @type {!importer.TestCommandWidget} */
|
| var widget;
|
|
|
| +/** @type {!DirectoryEntry} */
|
| +var nonDcimDirectory;
|
| +
|
| /**
|
| * @enum {string}
|
| */
|
| @@ -47,6 +50,10 @@ function setUp() {
|
|
|
| widget = new importer.TestCommandWidget();
|
|
|
| + nonDcimDirectory = new MockDirectoryEntry(
|
| + new MockFileSystem('testFs'),
|
| + '/jellybeans/');
|
| +
|
| volumeManager = new MockVolumeManager();
|
| MockVolumeManager.installMockSingleton(volumeManager);
|
|
|
| @@ -95,24 +102,25 @@ function testVolumeUnmount_InvalidatesScans(callback) {
|
| ],
|
| '/DCIM');
|
|
|
| - environment.directoryChangedListener_(EMPTY_EVENT);
|
| + var dcim = environment.getCurrentDirectory();
|
| +
|
| + environment.directoryChangedListener(EMPTY_EVENT);
|
| var promise = widget.updateResolver.promise.then(
|
| + function() {
|
| + // Reset the promise so we can wait on a second widget update.
|
| + widget.resetPromises();
|
| + environment.setCurrentDirectory(nonDcimDirectory);
|
| + environment.simulateUnmount();
|
| +
|
| + environment.setCurrentDirectory(dcim);
|
| + environment.directoryChangedListener(EMPTY_EVENT);
|
| + // Return the new promise, so subsequent "thens" only
|
| + // fire once the widget has been updated again.
|
| + return widget.updateResolver.promise;
|
| + }).then(
|
| function() {
|
| - // Reset the promise so we can wait on a second widget update.
|
| - widget.resetPromises();
|
| -
|
| - // Faux unmount the volume, then request an update again.
|
| - // A fresh new scan should be started.
|
| - environment.simulateUnmount();
|
| -
|
| - environment.directoryChangedListener_(EMPTY_EVENT);
|
| - // Return the new promise, so subsequent "thens" only
|
| - // fire once the widget has been updated again.
|
| - return widget.updateResolver.promise;
|
| - }).then(
|
| - function() {
|
| - mediaScanner.assertScanCount(2);
|
| - });
|
| + mediaScanner.assertScanCount(2);
|
| + });
|
|
|
| reportPromise(promise, callback);
|
| }
|
| @@ -128,10 +136,71 @@ function testDirectoryChange_TriggersUpdate(callback) {
|
| ],
|
| '/DCIM');
|
|
|
| - environment.directoryChangedListener_(EMPTY_EVENT);
|
| + environment.directoryChangedListener(EMPTY_EVENT);
|
| reportPromise(widget.updateResolver.promise, callback);
|
| }
|
|
|
| +function testDirectoryChange_CancelsScan(callback) {
|
| + var controller = createController(
|
| + VolumeManagerCommon.VolumeType.MTP,
|
| + 'mtp-volume',
|
| + [
|
| + '/DCIM/',
|
| + '/DCIM/photos0/',
|
| + '/DCIM/photos0/IMG00001.jpg',
|
| + '/DCIM/photos0/IMG00002.jpg',
|
| + '/DCIM/photos1/',
|
| + '/DCIM/photos1/IMG00001.jpg',
|
| + '/DCIM/photos1/IMG00003.jpg'
|
| + ],
|
| + '/DCIM');
|
| +
|
| + environment.directoryChangedListener(EMPTY_EVENT);
|
| + var promise = widget.updateResolver.promise.then(
|
| + function() {
|
| + // Reset the promise so we can wait on a second widget update.
|
| + widget.resetPromises();
|
| + environment.setCurrentDirectory(nonDcimDirectory);
|
| + environment.directoryChangedListener(EMPTY_EVENT);
|
| + }).then(
|
| + function() {
|
| + mediaScanner.assertScanCount(1);
|
| + mediaScanner.assertLastScanCanceled();
|
| + });
|
| +
|
| + reportPromise(promise, callback);
|
| +}
|
| +
|
| +function testWindowClose_CancelsScan(callback) {
|
| + var controller = createController(
|
| + VolumeManagerCommon.VolumeType.MTP,
|
| + 'mtp-volume',
|
| + [
|
| + '/DCIM/',
|
| + '/DCIM/photos0/',
|
| + '/DCIM/photos0/IMG00001.jpg',
|
| + '/DCIM/photos0/IMG00002.jpg',
|
| + '/DCIM/photos1/',
|
| + '/DCIM/photos1/IMG00001.jpg',
|
| + '/DCIM/photos1/IMG00003.jpg'
|
| + ],
|
| + '/DCIM');
|
| +
|
| + environment.directoryChangedListener(EMPTY_EVENT);
|
| + var promise = widget.updateResolver.promise.then(
|
| + function() {
|
| + // Reset the promise so we can wait on a second widget update.
|
| + widget.resetPromises();
|
| + environment.windowCloseListener();
|
| + }).then(
|
| + function() {
|
| + mediaScanner.assertScanCount(1);
|
| + mediaScanner.assertLastScanCanceled();
|
| + });
|
| +
|
| + reportPromise(promise, callback);
|
| +}
|
| +
|
| function testDirectoryChange_DetailsPanelVisibility_InitialChangeDir() {
|
| var controller = createController(
|
| VolumeManagerCommon.VolumeType.MTP,
|
| @@ -148,7 +217,7 @@ function testDirectoryChange_DetailsPanelVisibility_InitialChangeDir() {
|
| new MockFileSystem('testFs'),
|
| '/DCIM/');
|
|
|
| - environment.directoryChangedListener_(event);
|
| + environment.directoryChangedListener(event);
|
| assertTrue(widget.detailsVisible);
|
| }
|
|
|
| @@ -170,7 +239,7 @@ function testDirectoryChange_DetailsPanelVisibility_SubsequentChangeDir() {
|
| // Any previous dir at all will skip the new window logic.
|
| event.previousDirEntry = event.newDirEntry;
|
|
|
| - environment.directoryChangedListener_(event);
|
| + environment.directoryChangedListener(event);
|
| assertFalse(widget.detailsVisible);
|
| }
|
|
|
| @@ -185,7 +254,14 @@ function testSelectionChange_TriggersUpdate(callback) {
|
| ],
|
| '/DCIM');
|
|
|
| - environment.selectionChangedListener_();
|
| + var fileSystem = new MockFileSystem('testFs');
|
| + // ensure there is some content in the scan so the code that depends
|
| + // on this state doesn't croak which it finds it missing.
|
| + environment.selection.push(
|
| + new MockFileEntry(fileSystem, '/DCIM/photos0/IMG00001.jpg', {size: 0}));
|
| +
|
| + environment.selectionChangedListener();
|
| + mediaScanner.finalizeScans();
|
| reportPromise(widget.updateResolver.promise, callback);
|
| }
|
|
|
| @@ -206,7 +282,7 @@ function testFinalizeScans_TriggersUpdate(callback) {
|
| mediaScanner.fileEntries.push(
|
| new MockFileEntry(fileSystem, '/DCIM/photos0/IMG00001.jpg', {size: 0}));
|
|
|
| - environment.directoryChangedListener_(EMPTY_EVENT); // initiates a scan.
|
| + environment.directoryChangedListener(EMPTY_EVENT); // initiates a scan.
|
| widget.resetPromises();
|
| mediaScanner.finalizeScans();
|
|
|
| @@ -263,19 +339,19 @@ function startImport(clickSource) {
|
| new MockFileEntry(fileSystem, '/DCIM/photos0/IMG00001.jpg', {size: 0}));
|
|
|
| // First we need to force the controller into a scanning state.
|
| - environment.directoryChangedListener_(EMPTY_EVENT);
|
| + environment.directoryChangedListener(EMPTY_EVENT);
|
|
|
| return widget.updateResolver.promise.then(
|
| - function() {
|
| - widget.resetPromises();
|
| - mediaScanner.finalizeScans();
|
| - return widget.updateResolver.promise.then(
|
| - function() {
|
| - widget.resetPromises();
|
| - widget.click(clickSource);
|
| - return mediaImporter.importResolver.promise;
|
| - });
|
| - });
|
| + function() {
|
| + widget.resetPromises();
|
| + mediaScanner.finalizeScans();
|
| + return widget.updateResolver.promise.then(
|
| + function() {
|
| + widget.resetPromises();
|
| + widget.click(clickSource);
|
| + return mediaImporter.importResolver.promise;
|
| + });
|
| + });
|
| }
|
|
|
| /**
|
| @@ -394,14 +470,17 @@ TestControllerEnvironment = function(volumeInfo, directory) {
|
| /** @private {!DirectoryEntry} */
|
| this.directory_ = directory;
|
|
|
| - /** @private {function(string)} */
|
| - this.volumeUnmountListener_;
|
| + /** @public {function()} */
|
| + this.windowCloseListener;
|
| +
|
| + /** @public {function(string)} */
|
| + this.volumeUnmountListener;
|
|
|
| - /** @private {function()} */
|
| - this.directoryChangedListener_;
|
| + /** @public {function()} */
|
| + this.directoryChangedListener;
|
|
|
| - /** @private {function()} */
|
| - this.selectionChangedListener_;
|
| + /** @public {function()} */
|
| + this.selectionChangedListener;
|
|
|
| /** @public {!Entry} */
|
| this.selection = [];
|
| @@ -455,21 +534,27 @@ TestControllerEnvironment.prototype.getFreeStorageSpace =
|
| };
|
|
|
| /** @override */
|
| +TestControllerEnvironment.prototype.addWindowCloseListener =
|
| + function(listener) {
|
| + this.windowCloseListener = listener;
|
| +};
|
| +
|
| +/** @override */
|
| TestControllerEnvironment.prototype.addVolumeUnmountListener =
|
| function(listener) {
|
| - this.volumeUnmountListener_ = listener;
|
| + this.volumeUnmountListener = listener;
|
| };
|
|
|
| /** @override */
|
| TestControllerEnvironment.prototype.addDirectoryChangedListener =
|
| function(listener) {
|
| - this.directoryChangedListener_ = listener;
|
| + this.directoryChangedListener = listener;
|
| };
|
|
|
| /** @override */
|
| TestControllerEnvironment.prototype.addSelectionChangedListener =
|
| function(listener) {
|
| - this.selectionChangedListener_ = listener;
|
| + this.selectionChangedListener = listener;
|
| };
|
|
|
| /** @override */
|
| @@ -493,7 +578,7 @@ TestControllerEnvironment.prototype.showImportRoot = function() {
|
| * Simulates an unmount event.
|
| */
|
| TestControllerEnvironment.prototype.simulateUnmount = function() {
|
| - this.volumeUnmountListener_(this.volumeInfo_.volumeId);
|
| + this.volumeUnmountListener(this.volumeInfo_.volumeId);
|
| };
|
|
|
| /**
|
|
|