| 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..41c05bd9f1edc93c7a4e7c7d93ddf3a1a6d5dacd 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,10 +320,53 @@ var currentTestCase = null;
|
| **/
|
| var helper = new CallHelper();
|
|
|
| + /**
|
| + * true when testDone has been called.
|
| + * @type {boolean}
|
| + */
|
| + var testIsDone = false;
|
| +
|
| + /**
|
| + * Holds the errors, if any, caught by expects so that the test case can
|
| + * fail. Cleared when results are reported from runTest() or testDone().
|
| + * @type {Array.<Error>}
|
| + **/
|
| + var errors = [];
|
| +
|
| + /**
|
| + * Notifies the running browser test of the test results.
|
| + * @param {Array.<boolean, string>=} result When passed, this is used for the
|
| + * testResult message.
|
| + **/
|
| + function testDone(result) {
|
| + if (!testIsDone) {
|
| + testIsDone = true;
|
| + chrome.send('testResult', result ? result : testResult());
|
| + errors.splice(0, errors.length);
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * 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;
|
| + }
|
| + 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.
|
| - // If assertion passes, no notification will be sent to the C++ backend.
|
| + // If assertion fails, throw an Error with information pertinent to the test.
|
|
|
| /**
|
| * When |test| !== true, aborts the current test.
|
| @@ -445,16 +499,10 @@ var currentTestCase = null;
|
| }
|
|
|
| /**
|
| - * Holds the errors, if any, caught by expects so that the test case can fail.
|
| - * @type {Array.<Error>}
|
| - **/
|
| - var errors = [];
|
| -
|
| - /**
|
| * Creates a function based upon a function that thows an exception on
|
| * failure. The new function stuffs any errors into the |errors| array for
|
| * checking by runTest. This allows tests to continue running other checks,
|
| - * while failing the overal test if any errors occurrred.
|
| + * while failing the overall test if any errors occurrred.
|
| * @param {Function} assertFunc The function which may throw an Error.
|
| * @return {Function} A function that applies its arguments to |assertFunc|.
|
| * @see errors
|
| @@ -476,56 +524,53 @@ var currentTestCase = null;
|
| /**
|
| * This is the starting point for tests run by WebUIBrowserTest. If an error
|
| * occurs, it reports a failure and a message created by joining individual
|
| - * error messages.
|
| + * error messages. This supports sync tests and async tests by calling
|
| + * testDone() when |isAsync| is not true, relying on async tests to call
|
| + * testDone() when they complete.
|
| + * @param {boolean} isAsync When false, call testDone() with the test result.
|
| * @param {string} testFunction The function name to call.
|
| * @param {Array} testArguments The arguments to call |testFunction| with.
|
| - * @return {Array.<boolean, string>} [test-succeeded, message-if-failed]
|
| + * @return {boolean} true always to signal successful execution (but not
|
| + * necessarily successful results) of this test.
|
| * @see errors
|
| * @see runTestFunction
|
| **/
|
| - function runTest(testFunction, testArguments) {
|
| + function runTest(isAsync, testFunction, testArguments) {
|
| // 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);
|
| + var result = runTestFunction(testFunction, testBody, testArguments);
|
| + if (!isAsync)
|
| + testDone(result);
|
| + return true;
|
| }
|
|
|
| /**
|
| - * This is the guts of WebUIBrowserTest. It clears |errors|, runs the
|
| - * test surrounded by an expect to catch Errors. If |errors| is
|
| - * non-empty, it reports a failure and a message by joining |errors|.
|
| - * Consumers can use this to use assert/expect functions asynchronously,
|
| - * but are then responsible for reporting errors to the browser themselves.
|
| + * This is the guts of WebUIBrowserTest. It runs the test surrounded by an
|
| + * expect to catch Errors. If |errors| is non-empty, it reports a failure and
|
| + * a message by joining |errors|. Consumers can use this to use assert/expect
|
| + * functions asynchronously, but are then responsible for reporting errors to
|
| + * the browser themselves through testDone().
|
| * @param {string} testFunction The function name to report on failure.
|
| * @param {Function} testBody The function to call.
|
| * @param {Array} testArguments The arguments to call |testBody| with.
|
| * @return {Array.<boolean, string>} [test-succeeded, message-if-failed]
|
| - * @see errors
|
| * @see createExpect
|
| + * @see testDone
|
| **/
|
| function runTestFunction(testFunction, testBody, testArguments) {
|
| - errors.splice(0, errors.length);
|
| + 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 +755,7 @@ var currentTestCase = null;
|
|
|
| // Exports.
|
| testing.Test = Test;
|
| + window.testDone = testDone;
|
| window.assertTrue = assertTrue;
|
| window.assertFalse = assertFalse;
|
| window.assertGE = assertGE;
|
|
|