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

Unified Diff: chrome/test/data/extensions/api_test/file_manager_browsertest/file_manager/tasks.js

Issue 330003002: Files.app: Add browser tests to test the default action dialog. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed. Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/extensions/api_test/file_manager_browsertest/file_manager/tasks.js
diff --git a/chrome/test/data/extensions/api_test/file_manager_browsertest/file_manager/tasks.js b/chrome/test/data/extensions/api_test/file_manager_browsertest/file_manager/tasks.js
new file mode 100644
index 0000000000000000000000000000000000000000..b91f93e473c350a8ec9db869a3e4b51d6a6271e9
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/file_manager_browsertest/file_manager/tasks.js
@@ -0,0 +1,213 @@
+// Copyright 2014 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';
+
+/**
+ * Fake task.
+ *
+ * @param {boolean} isDefault Whether the task is default or not.
+ * @param {string} taskId Task ID.
+ * @param {string} title Title of the task.
+ * @constructor
+ */
+function FakeTask(isDefault, taskId, title) {
+ this.driveApp = false;
+ this.iconUrl = 'chrome://theme/IDR_DEFAULT_FAVICON'; // Dummy icon
+ this.isDefault = isDefault;
+ this.taskId = taskId;
+ this.title = title;
+ Object.freeze(this);
+}
+
+/**
+ * Fake tasks for a local volume.
+ *
+ * @type {Array.<FakeTask>}
+ * @const
+ */
+var DOWNLOADS_FAKE_TASKS = [
+ new FakeTask(true, 'dummytaskid|open-with', 'DummyAction1'),
+ new FakeTask(false, 'dummytaskid-2|open-with', 'DummyAction2')
+];
+
+/**
+ * Fake tasks for a drive volume.
+ *
+ * @type {Array.<FakeTask>}
+ * @const
+ */
+var DRIVE_FAKE_TASKS = [
+ new FakeTask(true, 'dummytaskid|drive|open-with', 'DummyAction1'),
+ new FakeTask(false, 'dummytaskid-2|drive|open-with', 'DummyAction2')
+];
+
+/**
+ * Sets up task tests.
+ *
+ * @param {string} rootPath Root path.
+ * @param {Array.<FakeTask>} fakeTasks Fake tasks.
+ */
+function setupTaskTest(rootPath, fakeTasks) {
+ return setupAndWaitUntilReady(null, rootPath).then(function(windowId) {
+ return callRemoteTestUtil(
+ 'overrideTasks',
+ windowId,
+ [fakeTasks]).then(function() {
+ return windowId;
+ });
+ });
+}
+
+/**
+ * Tests executing the default task when there is only one task.
+ *
+ * @param {string} expectedTaskId Task ID expected to execute.
+ * @param {string} windowId Window ID.
+ */
+function executeDefaultTask(expectedTaskId, windowId) {
+ // Select file.
+ var selectFilePromise =
+ callRemoteTestUtil('selectFile', windowId, ['hello.txt']);
+
+ // Double-click the file.
+ var doubleClickPromise = selectFilePromise.then(function(result) {
+ chrome.test.assertTrue(result);
+ return callRemoteTestUtil(
+ 'fakeMouseDoubleClick',
+ windowId,
+ ['#file-list li.table-row[selected] .filename-label span']);
+ });
+
+ // Wait until the task is executed.
+ return doubleClickPromise.then(function(result) {
+ chrome.test.assertTrue(!!result);
+ return waitUntilTaskExecutes(windowId, expectedTaskId);
+ });
+}
+
+/**
+ * Tests to specify default action via the default action dialog.
+ *
+ * @param {string} expectedTaskId Task ID to be expected to newly specify as
+ * default.
+ * @param {string} windowId Window ID.
+ * @return {Promise} Promise to be fulfilled/rejected depends on the test
+ * result.
+ */
+function defaultActionDialog(expectedTaskId, windowId) {
+ // Prepare expected labels.
+ var expectedLabels = [
+ 'DummyAction1 (default)',
+ 'DummyAction2'
+ ];
+
+ // Select file.
+ var selectFilePromise =
+ callRemoteTestUtil('selectFile', windowId, ['hello.txt']);
+
+ // Click the change default menu.
+ var menuClickedPromise = selectFilePromise.
+ then(function() {
+ return waitForElement(windowId, '#tasks[multiple]');
+ }).
+ then(function() {
+ return waitForElement(windowId, '#tasks-menu .change-default');
+ }).
+ then(function() {
+ return callRemoteTestUtil(
+ 'fakeEvent', windowId, ['#tasks', 'select', {item: {}}]);
+ }).
+ then(function(result) {
+ chrome.test.assertTrue(result);
+ });
+
+ // Wait for the list of menu item is added as expected.
+ var menuPreparedPromise = menuClickedPromise.then(function() {
+ return repeatUntil(function() {
+ // Obtains menu items.
+ var menuItemsPromise = callRemoteTestUtil(
+ 'queryAllElements',
+ windowId,
+ ['#default-action-dialog #default-actions-list li']);
+
+ // Compare the contents of items.
+ return menuItemsPromise.then(function(items) {
+ var actualLabels = items.map(function(item) { return item.text; });
+ if (chrome.test.checkDeepEq(expectedLabels, actualLabels)) {
+ return true;
+ } else {
+ return pending('Tasks do not match, expected: %j, actual: %j.',
+ expectedLabels,
+ actualLabels);
+ }
+ });
+ });
+ });
+
+ // Click the non default item.
+ var itemClickedPromise = menuPreparedPromise.
+ then(function() {
+ return callRemoteTestUtil(
+ 'fakeEvent',
+ windowId,
+ [
+ '#default-action-dialog #default-actions-list li:nth-of-type(2)',
+ 'mousedown',
+ {bubbles: true, button: 0}
+ ]);
+ }).
+ then(function() {
+ return callRemoteTestUtil(
+ 'fakeEvent',
+ windowId,
+ [
+ '#default-action-dialog #default-actions-list li:nth-of-type(2)',
+ 'click',
+ {bubbles: true}
+ ]);
+ }).
+ then(function(result) {
+ chrome.test.assertTrue(result);
+ });
+
+ // Wait for the dialog hidden, and the task is executed.
+ var dialogHiddenPromise = itemClickedPromise.then(function() {
+ return waitForElement.bind(null, windowId, '#default-action-dialog', null);
+ });
+
+ // Execute the new default task.
+ var taskButtonClicked = dialogHiddenPromise.
+ then(function() {
+ return callRemoteTestUtil('fakeEvent', windowId, ['#tasks', 'click']);
+ }).
+ then(function(result) {
+ chrome.test.assertTrue(result);
+ });
+
+ // Check the executed tasks.
+ return dialogHiddenPromise.then(function() {
+ return waitUntilTaskExecutes(windowId, expectedTaskId);
+ });
+}
+
+testcase.executeDefaultTaskOnDrive = function() {
+ testPromise(setupTaskTest(RootPath.DRIVE, DRIVE_FAKE_TASKS).then(
+ executeDefaultTask.bind(null, 'dummytaskid|drive|open-with')));
+};
+
+testcase.executeDefaultTaskOnDownloads = function() {
+ testPromise(setupTaskTest(RootPath.DOWNLOADS, DOWNLOADS_FAKE_TASKS).then(
+ executeDefaultTask.bind(null, 'dummytaskid|open-with')));
+};
+
+testcase.defaultActionDialogOnDrive = function() {
+ testPromise(setupTaskTest(RootPath.DRIVE, DRIVE_FAKE_TASKS).then(
+ defaultActionDialog.bind(null, 'dummytaskid-2|drive|open-with')));
+};
+
+testcase.defaultActionDialogOnDownloads = function() {
+ testPromise(setupTaskTest(RootPath.DOWNLOADS, DOWNLOADS_FAKE_TASKS).then(
+ defaultActionDialog.bind(null, 'dummytaskid-2|open-with')));
+};

Powered by Google App Engine
This is Rietveld 408576698