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

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

Issue 303503004: Change directory if the active list item on navigation list is changed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Divide browser tests into smaller parts and disable them on debug build. 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/folder_shortcuts.js
diff --git a/chrome/test/data/extensions/api_test/file_manager_browsertest/file_manager/folder_shortcuts.js b/chrome/test/data/extensions/api_test/file_manager_browsertest/file_manager/folder_shortcuts.js
new file mode 100644
index 0000000000000000000000000000000000000000..30fbdb9c5a1445dc7c69a289a1ccdff9034bd2dd
--- /dev/null
+++ b/chrome/test/data/extensions/api_test/file_manager_browsertest/file_manager/folder_shortcuts.js
@@ -0,0 +1,377 @@
+// Copyright (c) 2014 The Chromium Authors. All rights reserved.
yoshiki 2014/06/05 15:11:23 nitL we don't need "(c)" in copyright header in ne
fukino 2014/06/06 02:15:24 Done.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+'use strict';
+
+/**
+ * Constants for selectors.
+ */
+var TREEITEM_DRIVE = '#directory-tree > div:nth-child(1) ';
+var TREEITEM_A = TREEITEM_DRIVE + '> .tree-children > div:nth-child(1) ';
+var TREEITEM_B = TREEITEM_A + '> .tree-children > div:nth-child(1) ';
+var TREEITEM_C = TREEITEM_B + '> .tree-children > div:nth-child(1) ';
+var TREEITEM_D = TREEITEM_DRIVE + '> .tree-children > div:nth-child(2) ';
+var TREEITEM_E = TREEITEM_D + '> .tree-children > div:nth-child(1) ';
+var EXPAND_ICON = '> .tree-row > .expand-icon';
+var VOLUME_ICON = '> .tree-row > .volume-icon';
+var EXPANDED_SUBTREE = '> .tree-children[expanded]';
+
+/**
+ * Entry set which is used for this test.
+ * @type {Array.<TestEntryInfo>}
+ * @const
+ */
+var ENTRY_SET = [
+ ENTRIES.directoryA,
+ ENTRIES.directoryB,
+ ENTRIES.directoryC,
+ ENTRIES.directoryD,
+ ENTRIES.directoryE,
+ ENTRIES.directoryF
+];
+
+/**
+ * Constants for each folders.
+ * @type {Array.<Object>}
+ * @const
+ */
+var DIRECTORY = {
+ Drive: {
+ contents: [ENTRIES.directoryA.getExpectedRow(),
+ ENTRIES.directoryD.getExpectedRow()],
+ name: 'Drive',
+ navItem: '#navigation-list-1',
+ treeItem: TREEITEM_DRIVE
+ },
+ A: {
+ contents: [ENTRIES.directoryB.getExpectedRow()],
+ name: 'A',
+ navItem: '#navigation-list-4',
+ treeItem: TREEITEM_A
+ },
+ B: {
+ contents: [ENTRIES.directoryC.getExpectedRow()],
+ name: 'B',
+ treeItem: TREEITEM_B
+ },
+ C: {
+ contents: [],
+ name: 'C',
+ navItem: '#navigation-list-4',
+ treeItem: TREEITEM_C
+ },
+ D: {
+ contents: [ENTRIES.directoryE.getExpectedRow()],
+ name: 'D',
+ navItem: '#navigation-list-3',
+ treeItem: TREEITEM_D
+ },
+ E: {
+ contents: [ENTRIES.directoryF.getExpectedRow()],
+ name: 'E',
+ treeItem: TREEITEM_E
+ }
+};
+
+/**
+ * Open two file manager windows.
+ * @return {Promise} Promise fulfilled with an array containing two window IDs.
+ */
+function openWindows() {
+ return Promise.all([
+ openNewWindow(null, RootPath.DRIVE),
yoshiki 2014/06/05 15:11:23 nit: 4 space indent.
fukino 2014/06/06 02:15:24 'gjslint --strict' told me that it should be 2 spa
yoshiki 2014/06/06 02:53:10 Got it.
+ openNewWindow(null, RootPath.DRIVE)
+ ]).then(function(windowIds) {
+ return Promise.all([
+ waitForElement(windowIds[0], '#detail-table'),
yoshiki 2014/06/05 15:11:23 nit: 4 space indent.
fukino 2014/06/06 02:15:24 same as above.
+ waitForElement(windowIds[1], '#detail-table')
+ ]).then(function() {
+ return windowIds;
+ });
+ });
+};
+
+/**
+ * Expand tree item on the directory tree by clicking expand icon.
+ * @param {string} windowId ID of target window.
+ * @param {Object} directory Directory whose tree item should be expanded.
+ * @return {Promise} Promise fulfilled on success.
+ */
+function expandTreeItem(windowId, directory) {
+ return waitForElement(
+ windowId, directory.treeItem + EXPAND_ICON).then(function() {
+ return callRemoteTestUtil(
+ 'fakeMouseClick', windowId, [directory.treeItem + EXPAND_ICON]);
+ }).then(function(result) {
+ chrome.test.assertTrue(result);
+ return waitForElement(windowId, directory.treeItem + EXPANDED_SUBTREE);
+ });
+}
+
+/**
+ * Expand whole directory tree.
+ * @param {string} windowId ID of target window.
+ * @return {Promise} Promise fulfilled on success.
+ */
+function expandDirectoryTree(windowId) {
+ return expandTreeItem(windowId, DIRECTORY.Drive).then(function() {
+ return expandTreeItem(windowId, DIRECTORY.A);
+ }).then(function() {
+ return expandTreeItem(windowId, DIRECTORY.B);
+ }).then(function() {
+ return expandTreeItem(windowId, DIRECTORY.D);
+ });
+};
+
+/**
+ * Make |directory| the current directory.
+ * @param {string} windowId ID of target window.
+ * @param {Object} directory Directory which should be a current directory.
+ * @return {Promise} Promise fulfilled on success.
+ */
+function navigateToDirectory(windowId, directory) {
+ return waitForElement(
+ windowId, directory.treeItem + VOLUME_ICON).then(function() {
+ return callRemoteTestUtil(
+ 'fakeMouseClick', windowId, [directory.treeItem + VOLUME_ICON]);
+ }).then(function(result) {
+ chrome.test.assertTrue(result);
+ return waitForFiles(windowId, directory.contents);
+ });
+}
+
+/**
+ * Create folder shortcut to |directory|.
+ * The current directory must be a parent of the |directory|.
+ * @param {string} windowId ID of target window.
+ * @param {Object} directory Directory of shortcut to be created.
+ * @return {Promise} Promise fulfilled on success.
+ */
+function createShortcut(windowId, directory) {
+ return callRemoteTestUtil(
+ 'selectFile', windowId, [directory.name]).then(function(result) {
+ chrome.test.assertTrue(result);
+ return waitForElement(windowId, ['.table-row[selected]']);
+ }).then(function() {
+ return callRemoteTestUtil(
+ 'fakeMouseRightClick', windowId, ['.table-row[selected]']);
+ }).then(function(result) {
+ chrome.test.assertTrue(result);
+ return waitForElement(windowId, '#file-context-menu:not([hidden])');
+ }).then(function() {
+ return waitForElement(windowId, '[command="#create-folder-shortcut"]');
+ }).then(function() {
+ return callRemoteTestUtil(
+ 'fakeMouseClick', windowId, ['[command="#create-folder-shortcut"]']);
+ }).then(function(result) {
+ chrome.test.assertTrue(result);
+ return waitForElement(windowId, directory.navItem);
+ });
+}
+
+/**
+ * Remove folder shortcut to |directory|.
+ * The current directory must be a parent of the |directory|.
+ * @param {string} windowId ID of target window.
+ * @param {Object} directory Directory of shortcut ot be removed.
+ * @return {Promise} Promise fullfilled on success.
+ */
+function removeShortcut(windowId, directory) {
+ return callRemoteTestUtil(
+ 'fakeMouseRightClick',
+ windowId,
+ [directory.navItem]).then(function(result) {
+ chrome.test.assertTrue(result);
+ return waitForElement(windowId, '#roots-context-menu:not([hidden])');
+ }).then(function() {
+ return waitForElement(windowId, '[command="#remove-folder-shortcut"]');
+ }).then(function() {
+ return callRemoteTestUtil(
+ 'fakeMouseClick', windowId, ['[command="#remove-folder-shortcut"]']);
+ }).then(function(result) {
+ chrome.test.assertTrue(result);
+ return waitForElementLost(windowId, directory.navItem);
+ });
+}
+
+/**
+ * Wait until the current directory become |currentDir| and folder shortcut to
+ * |shortcutDir| is selected.
+ * @param {string} windowId ID of target window.
+ * @param {Object} currentDir Directory which should be a current directory.
+ * @param {Object} shortcutDir Directory whose shortcut should be selected.
+ * @return {Promise} Promise fullfilled on success.
+ */
+function expectSelection(windowId, currentDir, shortcutDir) {
+ return waitForFiles(windowId, currentDir.contents).then(function() {
+ return waitForElement(windowId, shortcutDir.navItem + '[selected]');
+ });
+}
+
+/**
+ * Click folder shortcut to |directory|.
+ * @param {string} windowId ID of target window.
+ * @param {Object} directory Directory whose shortcut will be clicked.
+ * @return {Promise} Promise fullfilled with result of fakeMouseClick.
+ */
+function clickShortcut(windowId, directory) {
+ return waitForElement(windowId, directory.navItem).then(function() {
+ return callRemoteTestUtil('fakeMouseClick', windowId, [directory.navItem]);
+ });
+}
+
+testcase.traverseFolderShortcuts = function() {
+ var windowId;
+ StepsRunner.run([
+ // Set up each window.
+ function() {
+ addEntries(['drive'], ENTRY_SET, this.next);
+ },
+ function(result) {
+ chrome.test.assertTrue(result);
+ openNewWindow(null, RootPath.DRIVE).then(this.next);
+ },
+ function(inWindowId) {
+ windowId = inWindowId;
+ waitForElement(windowId, '#detail-table').then(this.next);
+ },
+ function() {
+ expandDirectoryTree(windowId).then(this.next);
+ },
+ function() {
+ waitForFiles(windowId, DIRECTORY.Drive.contents).then(this.next);
+ },
+
+ // Create shortcut to D
+ function() {
+ createShortcut(windowId, DIRECTORY.D).then(this.next);
+ },
+
+ // Create sortcut to C
+ function() {
+ navigateToDirectory(windowId, DIRECTORY.B).then(this.next);
+ },
+ function() {
+ createShortcut(windowId, DIRECTORY.C).then(this.next);
+ },
+
+ // Navigate to E.
+ // Current directory should be E.
+ // Shortcut to D should be selected.
+ function() {
+ navigateToDirectory(windowId, DIRECTORY.E).then(this.next);
+ },
+ function() {
+ expectSelection(windowId, DIRECTORY.E, DIRECTORY.D).then(this.next);
+ },
+
+ // Click shortcut to drive.
+ // Current directory should be Drive root.
+ // Shortcut to Drive root should be selected.
+ function() {
+ clickShortcut(windowId, DIRECTORY.Drive).then(this.next);
+ },
+ function() {
+ expectSelection(
+ windowId, DIRECTORY.Drive, DIRECTORY.Drive).then(this.next);
+ },
+
+ // Press Ctrl+4 to select 4th shortcut.
+ // Current directory should be D.
+ // Shortcut to C should be selected.
+ function() {
+ callRemoteTestUtil('fakeKeyDown', windowId,
+ ['#file-list', 'U+0034', true], this.next);
+ },
+ function(result) {
+ chrome.test.assertTrue(result);
+ expectSelection(windowId, DIRECTORY.D, DIRECTORY.D).then(this.next);
+ },
+
+ // Press UP to select 3rd shortcut.
+ // Current directory should be C.
+ // Shortcut to C should be selected.
+ function() {
+ callRemoteTestUtil('fakeKeyDown', windowId,
+ ['#navigation-list', 'Up', false], this.next);
+ },
+ function(result) {
+ chrome.test.assertTrue(result);
+ expectSelection(windowId, DIRECTORY.C, DIRECTORY.C).then(this.next);
+ },
+
+ function() {
+ checkIfNoErrorsOccured(this.next);
+ }
+ ]);
+};
+
+testcase.addRemoveFolderShortcuts = function() {
+ var windowId1;
+ var windowId2;
+ StepsRunner.run([
+ // Set up each window.
+ function() {
+ addEntries(['drive'], ENTRY_SET, this.next);
+ },
+ function(result) {
+ chrome.test.assertTrue(result);
+ openWindows().then(this.next);
+ },
+ function(windowIds) {
+ windowId1 = windowIds[0];
+ windowId2 = windowIds[1];
+ expandDirectoryTree(windowId1).then(this.next);
+ },
+ function() {
+ waitForFiles(windowId1, DIRECTORY.Drive.contents).then(this.next);
+ },
+ function() {
+ waitForFiles(windowId2, DIRECTORY.Drive.contents).then(this.next);
+ },
+
+ // Create shortcut to D
+ function() {
+ createShortcut(windowId1, DIRECTORY.D).then(this.next);
+ },
+
+ // Navigate to E.
+ // Current directory should be E.
+ // Shortcut to E should be selected.
+ function() {
+ navigateToDirectory(windowId1, DIRECTORY.E).then(this.next);
+ },
+ function() {
+ expectSelection(windowId1, DIRECTORY.E, DIRECTORY.D).then(this.next);
+ },
+
+ // Create shortcut to A in another window.
+ function() {
+ createShortcut(windowId2, DIRECTORY.A).then(this.next);
+ },
+
+ // The index of shortcut to D is changed.
+ // Current directory should remain E.
+ // Shortcut to D should keep selected.
+ function() {
+ expectSelection(windowId1, DIRECTORY.E, DIRECTORY.D).then(this.next);
+ },
+
+ // Remove shortcut to D in another window.
+ function() {
+ removeShortcut(windowId2, DIRECTORY.D).then(this.next);
+ },
+
+ // Current directory should remain E.
+ // Shortcut to Drive root should be selected.
+ function() {
+ expectSelection(windowId1, DIRECTORY.E, DIRECTORY.Drive).then(this.next);
+ },
+
+ function() {
+ checkIfNoErrorsOccured(this.next);
+ }
+ ]);
+};
+

Powered by Google App Engine
This is Rietveld 408576698