1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
8 * Selects the first item in the file list.
9 * @param {string} windowId ID of the target window.
10 * @return {Promise} Promise to be fulfilled on success.
12 function selectFirstListItem(windowId) {
13 return Promise.resolve().then(function() {
14 // Ensure no selected item.
15 return remoteCall.waitForElementLost(
17 'div.detail-table > list > li[selected]');
20 return remoteCall.callRemoteTestUtil('fakeKeyDown',
23 ['#file-list', 'Down', true]);
25 // Wait for selection.
26 return remoteCall.waitForElement(windowId,
27 'div.detail-table > list > li[selected]');
29 // Ensure that only the first item is selected.
30 return remoteCall.callRemoteTestUtil(
33 ['div.detail-table > list > li[selected]']);
34 }).then(function(elements) {
35 chrome.test.assertEq(1, elements.length);
36 chrome.test.assertEq('detail-table-1', elements[0].attributes['id']);
42 * @param {string} windowId ID of the target window.
43 * @param {string} path Initial path.
44 * @param {Array.<TestEntryInfo>} initialEntrySet Initial set of entries.
45 * @return {Promise} Promise to be fulfilled on success.
47 function createNewFolder(windowId, path, initialEntrySet) {
48 return Promise.resolve(
51 return remoteCall.callRemoteTestUtil('fakeKeyDown',
54 ['#file-list', 'U+0045', true]);
56 // Wait for rename text field.
57 return remoteCall.waitForElement(windowId, 'li[renaming] input.rename');
59 return remoteCall.callRemoteTestUtil(
62 ['div.detail-table > list > li[selected]']);
63 }).then(function(elements) {
64 // Ensure that only the new directory is selected and being renamed.
65 chrome.test.assertEq(1, elements.length);
66 chrome.test.assertTrue('renaming' in elements[0].attributes);
68 // Type new folder name.
69 return remoteCall.callRemoteTestUtil(
70 'inputText', windowId, ['input.rename', 'Test Folder Name']);
73 return remoteCall.callRemoteTestUtil(
76 ['input.rename', 'Enter', false]);
78 // Wait until rename completes.
79 return remoteCall.waitForElementLost(windowId, 'input.rename');
81 var expectedEntryRows = TestEntryInfo.getExpectedRows(initialEntrySet);
82 expectedEntryRows.push(['Test Folder Name', '--', 'Folder', '']);
83 // Wait for the new folder.
84 return remoteCall.waitForFiles(windowId,
86 {ignoreLastModifiedTime: true});
88 // Wait until the new created folder is selected.
89 var nameSpanQuery = 'div.detail-table > list > ' +
90 'li[selected]:not([renaming]) span.entry-name';
92 return repeatUntil(function() {
93 var selectedNameRetrievePromise = remoteCall.callRemoteTestUtil(
96 ['div.detail-table > list > li[selected] span.entry-name']);
98 return selectedNameRetrievePromise.then(function(elements) {
99 if (elements.length !== 1) {
100 return pending('Selection is not ready (elements: %j)', elements);
101 } else if (elements[0].text !== 'Test Folder Name') {
102 return pending('Selected item is wrong. (actual: %s)',
112 testcase.createNewFolderAfterSelectFile = function() {
113 var PATH = RootPath.DOWNLOADS;
115 var promise = new Promise(function(callback) {
116 setupAndWaitUntilReady(null, PATH, callback);
117 }).then(function(inWindowId) {
118 windowId = inWindowId;
119 return selectFirstListItem(windowId);
121 return createNewFolder(windowId, PATH, BASIC_LOCAL_ENTRY_SET);
124 testPromise(promise);
127 testcase.createNewFolderDownloads = function() {
128 var PATH = RootPath.DOWNLOADS;
129 var promise = new Promise(function(callback) {
130 setupAndWaitUntilReady(null, PATH, callback);
131 }).then(function(windowId) {
132 return createNewFolder(windowId, PATH, BASIC_LOCAL_ENTRY_SET);
135 testPromise(promise);
138 testcase.createNewFolderDrive = function() {
139 var PATH = RootPath.DRIVE;
140 var promise = new Promise(function(callback) {
141 setupAndWaitUntilReady(null, PATH, callback);
142 }).then(function(windowId) {
143 return createNewFolder(windowId, PATH, BASIC_DRIVE_ENTRY_SET);
146 testPromise(promise);