Index: chrome/test/data/webui/test_api.js |
diff --git a/chrome/test/data/webui/test_api.js b/chrome/test/data/webui/test_api.js |
index 72de125013fd6830d488d5c1cb467aa5f679dd07..91a1aade01d26b4b920882071709414bfd542bf8 100644 |
--- a/chrome/test/data/webui/test_api.js |
+++ b/chrome/test/data/webui/test_api.js |
@@ -18,6 +18,17 @@ var testing = {}; |
**/ |
var currentTestCase = null; |
+/** |
+ * @type {?string} The string representation of the currently running test |
+ * function. |
+ */ |
+var currentTestFunction = null; |
+ |
+/** |
+ * @type {?Array} The arguments of the currently running test. |
+ */ |
+var currentTestArguments = null; |
+ |
(function() { |
// Provide global objects for generation case. |
if (this['window'] === undefined) |
@@ -309,6 +320,43 @@ var currentTestCase = null; |
**/ |
var helper = new CallHelper(); |
+ /** |
+ * true when asyncTestDone has been called. |
+ * @type {boolean} |
+ */ |
+ var asyncTestIsDone = false; |
+ |
+ /** |
+ * Notifies the running browser test that any async javascript is complete. |
+ * @param {Array.<boolean, string>=} result When passed, this is used for the |
+ * asyncTestResult message. |
+ **/ |
+ function asyncTestDone(result) { |
+ if (!asyncTestIsDone) { |
+ asyncTestIsDone = true; |
+ chrome.send('asyncTestResult', result ? result : testResult()); |
+ } |
+ } |
+ |
+ /** |
+ * Returns [success, message] & clears |errors|. |
+ * @return {Array.<boolean, string>} |
+ **/ |
+ function testResult() { |
+ var result = [true, '']; |
+ if (errors.length) { |
+ var message = ''; |
+ for (var i = 0; i < errors.length; ++i) { |
+ message += 'Failed: ' + currentTestFunction + '(' + |
+ currentTestArguments.map(JSON.stringify) + |
+ ')\n' + errors[i].stack; |
+ } |
+ errors.splice(0, errors.length); |
+ result = [false, message]; |
+ } |
+ return result; |
+ } |
+ |
// Asserts. |
// Use the following assertions to verify a condition within a test. |
// If assertion fails, the C++ backend will be immediately notified. |
@@ -487,11 +535,12 @@ var currentTestCase = null; |
// Avoid eval() if at all possible, since it will not work on pages |
// that have enabled content-security-policy. |
var testBody = this[testFunction]; // global object -- not a method. |
- if (typeof testBody === "undefined") |
+ var testName = testFunction; |
+ if (typeof testBody === "undefined") { |
testBody = eval(testFunction); |
+ testName = testBody.toString(); |
+ } |
if (testBody != RUN_TEST_F) { |
- var testName = |
- testFunction.name ? testFunction.name : testBody.toString(); |
console.log('Running test ' + testName); |
} |
return runTestFunction(testFunction, testBody, testArguments); |
@@ -512,20 +561,10 @@ var currentTestCase = null; |
**/ |
function runTestFunction(testFunction, testBody, testArguments) { |
errors.splice(0, errors.length); |
mmenke
2011/08/05 16:08:28
I'm still not sure about calling this here. Seems
Sheridan Rawlins
2011/08/05 16:59:56
Wow, I just had the insight that this allows the c
|
+ currentTestFunction = testFunction; |
+ currentTestArguments = testArguments; |
createExpect(testBody).apply(null, testArguments); |
- |
- var result = [true]; |
- if (errors.length) { |
- var message = ''; |
- for (var i = 0; i < errors.length; ++i) { |
- message += 'Failed: ' + testFunction + '(' + |
- testArguments.map(JSON.stringify) + |
- ')\n' + errors[i].stack; |
- } |
- errors.splice(0, errors.length); |
- result = [false, message]; |
- } |
- return result; |
+ return testResult(); |
} |
/** |
@@ -710,6 +749,7 @@ var currentTestCase = null; |
// Exports. |
testing.Test = Test; |
+ window.asyncTestDone = asyncTestDone; |
window.assertTrue = assertTrue; |
window.assertFalse = assertFalse; |
window.assertGE = assertGE; |