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

Side by Side Diff: chrome/browser/resources/file_manager/js/test_util.js

Issue 13891013: file_manager: Make test.util.fakeKeyDown more flexible (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/resources/file_manager/js/file_manager.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * Namespace for test related things. 6 * Namespace for test related things.
7 */ 7 */
8 var test = test || {}; 8 var test = test || {};
9 9
10 /** 10 /**
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 * Fakes pressing the down arrow until the given |filename| is selected. 130 * Fakes pressing the down arrow until the given |filename| is selected.
131 * 131 *
132 * @param {Window} contentWindow Window to be tested. 132 * @param {Window} contentWindow Window to be tested.
133 * @param {string} filename Name of the file to be selected. 133 * @param {string} filename Name of the file to be selected.
134 * @return {boolean} True if file got selected, false otherwise. 134 * @return {boolean} True if file got selected, false otherwise.
135 */ 135 */
136 test.util.selectFile = function(contentWindow, filename) { 136 test.util.selectFile = function(contentWindow, filename) {
137 var table = contentWindow.document.querySelector('#detail-table'); 137 var table = contentWindow.document.querySelector('#detail-table');
138 var rows = table.querySelectorAll('li'); 138 var rows = table.querySelectorAll('li');
139 for (var index = 0; index < rows.length; ++index) { 139 for (var index = 0; index < rows.length; ++index) {
140 test.util.fakeKeyDown(contentWindow, 'Down', false); 140 test.util.fakeKeyDown(contentWindow, '#file-list', 'Down', false);
141 var selection = test.util.getSelectedFiles(contentWindow); 141 var selection = test.util.getSelectedFiles(contentWindow);
142 if (selection.length === 1 && selection[0] === filename) 142 if (selection.length === 1 && selection[0] === filename)
143 return true; 143 return true;
144 } 144 }
145 console.error('Failed to select file "' + filename + '"'); 145 console.error('Failed to select file "' + filename + '"');
146 return false; 146 return false;
147 }; 147 };
148 148
149 /** 149 /**
150 * Sends a fake key event with the given |keyIdentifier| and optional |ctrl| 150 * Sends an event to the element specified by |targetQuery|.
151 * modifier to the file manager.
152 * 151 *
153 * @param {Window} contentWindow Window to be tested. 152 * @param {Window} contentWindow Window to be tested.
153 * @param {string} targetQuery Query to specify the element.
154 * @param {Event} event Event to be sent.
155 * @return {boolean} True if the event is sent to the target, false otherwise.
156 */
157 test.util.sendEvent = function(contentWindow, targetQuery, event) {
158 var target = contentWindow.document.querySelector(targetQuery);
159 if (target) {
160 target.dispatchEvent(event);
161 return true;
162 } else {
163 console.error('Target element for ' + targetQuery + ' not found.');
164 return false;
165 }
166 };
167
168 /**
169 * Sends a fake key event to the element specified by |targetQuery| with the
170 * given |keyIdentifier| and optional |ctrl| modifier to the file manager.
171 *
172 * @param {Window} contentWindow Window to be tested.
173 * @param {string} targetQuery Query to specify the element.
154 * @param {string} keyIdentifier Identifier of the emulated key. 174 * @param {string} keyIdentifier Identifier of the emulated key.
155 * @param {boolean} ctrl Whether CTRL should be pressed, or not. 175 * @param {boolean} ctrl Whether CTRL should be pressed, or not.
176 * @return {boolean} True if the event is sent to the target, false otherwise.
156 */ 177 */
157 test.util.fakeKeyDown = function(contentWindow, keyIdentifier, ctrl) { 178 test.util.fakeKeyDown = function(
179 contentWindow, targetQuery, keyIdentifier, ctrl) {
158 var event = new KeyboardEvent( 180 var event = new KeyboardEvent(
159 'keydown', 181 'keydown',
160 { bubbles: true, keyIdentifier: keyIdentifier, ctrlKey: ctrl }); 182 { bubbles: true, keyIdentifier: keyIdentifier, ctrlKey: ctrl });
161 var detailTable = contentWindow.document.querySelector('#detail-table'); 183 return test.util.sendEvent(contentWindow, targetQuery, event);
162 detailTable.querySelector('list').dispatchEvent(event);
163 }; 184 };
164 185
165 /** 186 /**
166 * Sends a fake mouse click event to the element specified by |targetQuery|. 187 * Sends a fake mouse click event to the element specified by |targetQuery|.
167 * 188 *
168 * @param {Window} contentWindow Window to be tested. 189 * @param {Window} contentWindow Window to be tested.
169 * @param {string} targetQuery Query to specify the element. 190 * @param {string} targetQuery Query to specify the element.
170 * @return {boolean} True if file got selected, false otherwise. 191 * @return {boolean} True if the event is sent to the target, false otherwise.
171 */ 192 */
172 test.util.fakeMouseClick = function(contentWindow, targetQuery) { 193 test.util.fakeMouseClick = function(contentWindow, targetQuery) {
173 var event = new MouseEvent('click', { bubbles: true }); 194 var event = new MouseEvent('click', { bubbles: true });
174 var target = contentWindow.document.querySelector(targetQuery); 195 return test.util.sendEvent(contentWindow, targetQuery, event);
175 if (target) {
176 target.dispatchEvent(event);
177 return true;
178 } else {
179 console.error('Target element for ' + targetQuery + ' not found.');
180 return false;
181 }
182 }; 196 };
183 197
184 /** 198 /**
185 * Selects |filename| and fakes pressing Ctrl+C, Ctrl+V (copy, paste). 199 * Selects |filename| and fakes pressing Ctrl+C, Ctrl+V (copy, paste).
186 * 200 *
187 * @param {Window} contentWindow Window to be tested. 201 * @param {Window} contentWindow Window to be tested.
188 * @param {string} filename Name of the file to be copied. 202 * @param {string} filename Name of the file to be copied.
189 * @return {boolean} True if copying got simulated successfully. It does not 203 * @return {boolean} True if copying got simulated successfully. It does not
190 * say if the file got copied, or not. 204 * say if the file got copied, or not.
191 */ 205 */
192 test.util.copyFile = function(contentWindow, filename) { 206 test.util.copyFile = function(contentWindow, filename) {
193 if (!test.util.selectFile(contentWindow, filename)) 207 if (!test.util.selectFile(contentWindow, filename))
194 return false; 208 return false;
195 test.util.fakeKeyDown(contentWindow, 'U+0043', true); // Ctrl+C 209 // Ctrl+C and Ctrl+V
196 test.util.fakeKeyDown(contentWindow, 'U+0056', true); // Ctrl+V 210 test.util.fakeKeyDown(contentWindow, '#file-list', 'U+0043', true);
211 test.util.fakeKeyDown(contentWindow, '#file-list', 'U+0056', true);
197 return true; 212 return true;
198 }; 213 };
199 214
200 /** 215 /**
201 * Selects |filename| and fakes pressing the Delete key. 216 * Selects |filename| and fakes pressing the Delete key.
202 * 217 *
203 * @param {Window} contentWindow Window to be tested. 218 * @param {Window} contentWindow Window to be tested.
204 * @param {string} filename Name of the file to be deleted. 219 * @param {string} filename Name of the file to be deleted.
205 * @return {boolean} True if deleting got simulated successfully. It does not 220 * @return {boolean} True if deleting got simulated successfully. It does not
206 * say if the file got deleted, or not. 221 * say if the file got deleted, or not.
207 */ 222 */
208 test.util.deleteFile = function(contentWindow, filename) { 223 test.util.deleteFile = function(contentWindow, filename) {
209 if (!test.util.selectFile(contentWindow, filename)) 224 if (!test.util.selectFile(contentWindow, filename))
210 return false; 225 return false;
211 test.util.fakeKeyDown(contentWindow, 'U+007F', false); // Delete 226 // Delete
227 test.util.fakeKeyDown(contentWindow, '#file-list', 'U+007F', false);
212 return true; 228 return true;
213 }; 229 };
214 230
215 /** 231 /**
216 * Registers message listener, which runs test utility functions. 232 * Registers message listener, which runs test utility functions.
217 */ 233 */
218 test.util.registerRemoteTestUtils = function() { 234 test.util.registerRemoteTestUtils = function() {
219 var onMessage = chrome.runtime ? chrome.runtime.onMessageExternal : 235 var onMessage = chrome.runtime ? chrome.runtime.onMessageExternal :
220 chrome.extension.onMessageExternal; 236 chrome.extension.onMessageExternal;
221 onMessage.addListener(function(request, sender, sendResponse) { 237 onMessage.addListener(function(request, sender, sendResponse) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 test.util.waitForFileListChange( 269 test.util.waitForFileListChange(
254 contentWindow, request.args[0], sendResponse); 270 contentWindow, request.args[0], sendResponse);
255 return true; 271 return true;
256 case 'waitAndAcceptDialog': 272 case 'waitAndAcceptDialog':
257 test.util.waitAndAcceptDialog(contentWindow, sendResponse); 273 test.util.waitAndAcceptDialog(contentWindow, sendResponse);
258 return true; 274 return true;
259 case 'selectFile': 275 case 'selectFile':
260 test.util.sendResponse(selectFile(contentWindow, request.args[0])); 276 test.util.sendResponse(selectFile(contentWindow, request.args[0]));
261 return false; 277 return false;
262 case 'fakeKeyDown': 278 case 'fakeKeyDown':
263 test.util.fakeKeyDown( 279 sendResponse(test.util.fakeKeyDown(contentWindow,
264 contentWindow, request.args[0], request.request[1]); 280 request.args[0],
281 request.args[1],
282 request.args[2]));
265 return false; 283 return false;
266 case 'fakeMouseClick': 284 case 'fakeMouseClick':
267 sendResponse(test.util.fakeMouseClick( 285 sendResponse(test.util.fakeMouseClick(
268 contentWindow, request.args[0])); 286 contentWindow, request.args[0]));
269 return false; 287 return false;
270 case 'copyFile': 288 case 'copyFile':
271 sendResponse(test.util.copyFile(contentWindow, request.args[0])); 289 sendResponse(test.util.copyFile(contentWindow, request.args[0]));
272 return false; 290 return false;
273 case 'deleteFile': 291 case 'deleteFile':
274 sendResponse(test.util.deleteFile(contentWindow, request.args[0])); 292 sendResponse(test.util.deleteFile(contentWindow, request.args[0]));
275 return false; 293 return false;
276 default: 294 default:
277 console.error('Window function ' + request.func + ' not found.'); 295 console.error('Window function ' + request.func + ' not found.');
278 } 296 }
279 } 297 }
280 return false; 298 return false;
281 }); 299 });
282 }; 300 };
283 301
284 // Register the test utils. 302 // Register the test utils.
285 test.util.registerRemoteTestUtils(); 303 test.util.registerRemoteTestUtils();
OLDNEW
« no previous file with comments | « chrome/browser/resources/file_manager/js/file_manager.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698