Index: chrome/browser/resources/file_manager/js/test_util.js |
diff --git a/chrome/browser/resources/file_manager/js/test_util.js b/chrome/browser/resources/file_manager/js/test_util.js |
index 07005a3d7d85d155382ded3981e8209e0e68a3d7..1dac4bd4bf51e5e83393175717aa048236433182 100644 |
--- a/chrome/browser/resources/file_manager/js/test_util.js |
+++ b/chrome/browser/resources/file_manager/js/test_util.js |
@@ -221,18 +221,20 @@ test.util.async.waitForWindowGeometry = function( |
* @param {Window} contentWindow Window to be tested. |
* @param {string} targetQuery Query to specify the element. |
* @param {?string} iframeQuery Iframe selector or null if no iframe. |
+ * @param {opt_boolean=} opt_inverse True if the function should return if the |
+ * element disappears, instead of appearing. |
* @param {function(Object)} callback Callback with a hash array of attributes |
* and contents as text. |
*/ |
test.util.async.waitForElement = function( |
- contentWindow, targetQuery, iframeQuery, callback) { |
+ contentWindow, targetQuery, iframeQuery, opt_inverse, callback) { |
test.util.repeatUntilTrue_(function() { |
var doc = test.util.sync.getDocument_(contentWindow, iframeQuery); |
if (!doc) |
return false; |
var element = doc.querySelector(targetQuery); |
if (!element) |
- return false; |
+ return opt_inverse ? true : false; |
var attributes = {}; |
for (var i = 0; i < element.attributes.length; i++) { |
attributes[element.attributes[i].nodeName] = |
@@ -240,7 +242,7 @@ test.util.async.waitForElement = function( |
} |
var text = element.textContent; |
callback({attributes: attributes, text: text}); |
- return true; |
+ return opt_inverse ? false : true; |
}); |
}; |
@@ -350,23 +352,28 @@ test.util.async.waitAndAcceptDialog = function(contentWindow, callback) { |
}; |
/** |
- * Fakes pressing the down arrow until the given |filename| is selected. |
+ * Fakes pressing the down arrow until the given |filename| is selected. Zero |
+ * timer is used to allow to handle the selection events in Files.app, before |
+ * returning the result. |
* |
* @param {Window} contentWindow Window to be tested. |
* @param {string} filename Name of the file to be selected. |
- * @return {boolean} True if file got selected, false otherwise. |
+ * @param {function(boolean)} callback Completion callback with true for success |
+ * and false for a failure. |
*/ |
-test.util.sync.selectFile = function(contentWindow, filename) { |
+test.util.async.selectFile = function(contentWindow, filename, callback) { |
var table = contentWindow.document.querySelector('#detail-table'); |
var rows = table.querySelectorAll('li'); |
for (var index = 0; index < rows.length; ++index) { |
test.util.sync.fakeKeyDown(contentWindow, '#file-list', 'Down', false); |
var selection = test.util.sync.getSelectedFiles(contentWindow); |
- if (selection.length === 1 && selection[0] === filename) |
- return true; |
+ if (selection.length === 1 && selection[0] === filename) { |
+ setTimeout(callback.bind(null, true), 0); |
+ return; |
+ } |
} |
console.error('Failed to select file "' + filename + '"'); |
- return false; |
+ setTimeout(callback.bind(null, false), 0); |
}; |
/** |
@@ -441,6 +448,21 @@ test.util.async.waitForFiles = function( |
}; |
/** |
+ * Executes Javascript code on a webview and returns the result. |
+ * |
+ * @param {Window} contentWindow Window to be tested. |
+ * @param {string} webViewQuery Selector for the web view. |
+ * @param {string} code Javascript code to be executed within the web view. |
+ * @param {function(*)} callback Callback function with results returned by the |
+ * script. |
+ */ |
+test.util.async.executeScriptInWebView = function( |
+ contentWindow, webViewQuery, code, callback) { |
+ var webView = contentWindow.document.querySelector(webViewQuery); |
+ webView.executeScript({code: code}, callback); |
+}; |
+ |
+/** |
* Sends an event to the element specified by |targetQuery|. |
* |
* @param {Window} contentWindow Window to be tested. |
@@ -663,6 +685,9 @@ test.util.registerRemoteTestUtils = function() { |
console.error('The testing extension must be white-listed.'); |
return false; |
} |
+ // Set a global flag that we are in tests, so other components are aware |
+ // of it. |
+ window.IN_TEST = true; |
// Check the function name. |
if (!request.func || request.func[request.func.length - 1] == '_') { |
request.func = ''; |