| Index: ui/file_manager/file_manager/foreground/js/task_controller_unittest.js | 
| diff --git a/ui/file_manager/file_manager/foreground/js/task_controller_unittest.js b/ui/file_manager/file_manager/foreground/js/task_controller_unittest.js | 
| index afe116b7045ab0d828d1513e1bfbf4db8c58873b..ef14c969d0880b3fc5a5136200de71d518ac11bd 100644 | 
| --- a/ui/file_manager/file_manager/foreground/js/task_controller_unittest.js | 
| +++ b/ui/file_manager/file_manager/foreground/js/task_controller_unittest.js | 
| @@ -2,24 +2,31 @@ | 
| // Use of this source code is governed by a BSD-style license that can be | 
| // found in the LICENSE file. | 
|  | 
| -window.chrome = { | 
| -  fileManagerPrivate: { | 
| -    getFileTasks: function(entries, callback) { | 
| -      setTimeout(callback.bind(null, [ | 
| -        {taskId:'handler-extension-id|file|open', isDefault: false}, | 
| -        {taskId:'handler-extension-id|file|play', isDefault: true} | 
| -      ]), 0); | 
| -    } | 
| -  }, | 
| -  runtime: {id: 'test-extension-id'} | 
| -}; | 
| - | 
| window.metrics = { | 
| recordEnum: function() {} | 
| }; | 
|  | 
| -function testDoEntryAction(callback) { | 
| +function setUp() { | 
| +  // Behavior of window.chrome depends on each test case. window.chrome should | 
| +  // be initialized properly inside each test function. | 
| +  window.chrome = {}; | 
| + | 
| cr.ui.decorate('command', cr.ui.Command); | 
| +} | 
| + | 
| +function testDoEntryAction(callback) { | 
| +  window.chrome = { | 
| +    fileManagerPrivate: { | 
| +      getFileTasks: function(entries, callback) { | 
| +        setTimeout(callback.bind(null, [ | 
| +          {taskId:'handler-extension-id|file|open', isDefault: false}, | 
| +          {taskId:'handler-extension-id|file|play', isDefault: true} | 
| +        ]), 0); | 
| +      } | 
| +    }, | 
| +    runtime: {id: 'test-extension-id'} | 
| +  }; | 
| + | 
| var fileSystem = new MockFileSystem('volumeId'); | 
| fileSystem.entries['/test.png'] = | 
| new MockFileEntry(fileSystem, '/test.png', {}); | 
| @@ -56,3 +63,136 @@ function testDoEntryAction(callback) { | 
| assertEquals("handler-extension-id|file|play", info); | 
| }), callback); | 
| } | 
| + | 
| +/** | 
| + * Test case for openSuggestAppsDialog with an entry which has external type of | 
| + * metadata. | 
| + */ | 
| +function testOpenSuggestAppsDialogWithMetadata(callback) { | 
| +  var showByExtensionAndMimeIsCalled = new Promise(function(resolve, reject) { | 
| +    var fileSystem = new MockFileSystem('volumeId'); | 
| +    var entry = new MockFileEntry(fileSystem, '/test.rtf'); | 
| + | 
| +    var controller = new TaskController( | 
| +        DialogType.FULL_PAGE, | 
| +        { | 
| +          taskMenuButton: document.createElement('button'), | 
| +          fileContextMenu: { | 
| +            defaultActionMenuItem: document.createElement('div') | 
| +          }, | 
| +          suggestAppsDialog: { | 
| +            showByExtensionAndMime: function( | 
| +                extension, mimeType, onDialogClosed) { | 
| +              assertEquals('.rtf', extension); | 
| +              assertEquals('application/rtf', mimeType); | 
| +              resolve(); | 
| +            } | 
| +          } | 
| +        }, | 
| +        { | 
| +          getOne: function(entry, type, callback) { | 
| +            assertEquals('external', type); | 
| +            callback({ | 
| +              contentMimeType: 'application/rtf' | 
| +            }); | 
| +          } | 
| +        }, | 
| +        new cr.EventTarget(), | 
| +        null, | 
| +        null); | 
| + | 
| +    controller.openSuggestAppsDialog( | 
| +        entry, function() {}, function() {}, function() {}); | 
| +  }); | 
| + | 
| +  reportPromise(showByExtensionAndMimeIsCalled, callback); | 
| +} | 
| + | 
| +/** | 
| + * Test case for openSuggestAppsDialog with an entry which doesn't have external | 
| + * type of metadata. | 
| + */ | 
| +function testOpenSuggestAppsDialogWithoutMetadata(callback) { | 
| +  window.chrome = { | 
| +    fileManagerPrivate: { | 
| +      getMimeType: function(url, callback) { | 
| +        callback('application/rtf'); | 
| +      } | 
| +    } | 
| +  }; | 
| + | 
| +  var showByExtensionAndMimeIsCalled = new Promise(function(resolve, reject) { | 
| +    var isGetOneCalled = false; | 
| +    var fileSystem = new MockFileSystem('volumeId'); | 
| +    var entry = new MockFileEntry(fileSystem, '/test.rtf'); | 
| + | 
| +    var controller = new TaskController( | 
| +        DialogType.FULL_PAGE, | 
| +        { | 
| +          taskMenuButton: document.createElement('button'), | 
| +          fileContextMenu: { | 
| +            defaultActionMenuItem: document.createElement('div') | 
| +          }, | 
| +          suggestAppsDialog: { | 
| +            showByExtensionAndMime: function( | 
| +                extension, mimeType, onDialogClosed) { | 
| +              assertTrue(isGetOneCalled); | 
| +              assertEquals('.rtf', extension); | 
| +              assertEquals('application/rtf', mimeType); | 
| +              resolve(); | 
| +            } | 
| +          } | 
| +        }, | 
| +        { | 
| +          getOne: function(entry, type, callback) { | 
| +            isGetOneCalled = true; | 
| +            callback({}); | 
| +          } | 
| +        }, | 
| +        new cr.EventTarget(), | 
| +        null, | 
| +        null); | 
| + | 
| +    controller.openSuggestAppsDialog( | 
| +        entry, function() {}, function() {}, function() {}); | 
| +  }); | 
| + | 
| +  reportPromise(showByExtensionAndMimeIsCalled, callback); | 
| +} | 
| + | 
| +/** | 
| + * Test case for openSuggestAppsDialog with an entry which doesn't have | 
| + * extensiion. Since both extension and MIME type are required for | 
| + * openSuggestAppsDialogopen, onFalure should be called for this test case. | 
| + */ | 
| +function testOpenSuggestAppsDialogFailure(callback) { | 
| +  var onFailureIsCalled = new Promise(function(resolve, reject) { | 
| +    var fileSystem = new MockFileSystem('volumeId'); | 
| +    var entry = new MockFileEntry(fileSystem, '/test'); | 
| + | 
| +    var controller = new TaskController( | 
| +        DialogType.FULL_PAGE, | 
| +        { | 
| +          taskMenuButton: document.createElement('button'), | 
| +          fileContextMenu: { | 
| +            defaultActionMenuItem: document.createElement('div') | 
| +          } | 
| +        }, | 
| +        { | 
| +          getOne: function(entry, type, callback) { | 
| +            assertEquals('external', type); | 
| +            callback({ | 
| +              contentMimeType: 'image/png' | 
| +            }); | 
| +          } | 
| +        }, | 
| +        new cr.EventTarget(), | 
| +        null, | 
| +        null); | 
| + | 
| +    controller.openSuggestAppsDialog( | 
| +        entry, function() {}, function() {}, resolve); | 
| +  }); | 
| + | 
| +  reportPromise(onFailureIsCalled, callback); | 
| +} | 
|  |