| Index: remoting/webapp/browser_test/browser_test.js
|
| diff --git a/remoting/webapp/browser_test/browser_test.js b/remoting/webapp/browser_test/browser_test.js
|
| index 85985aa99fb88f174a6f2d56463cb924cd679a3f..e0fae8560c5adfeef3b39dd94512fb4e0053c31d 100644
|
| --- a/remoting/webapp/browser_test/browser_test.js
|
| +++ b/remoting/webapp/browser_test/browser_test.js
|
| @@ -17,17 +17,17 @@
|
| * method.
|
| * For example:
|
| *
|
| - * browserTest.My_Test = function(myObjectLiteral) {};
|
| - * browserTest.My_Test.prototype.run() = function() { ... };
|
| + * browserTest.My_Test = function() {};
|
| + * browserTest.My_Test.prototype.run(myObjectLiteral) = function() { ... };
|
| *
|
| * The browser test is async in nature. It will keep running until
|
| * browserTest.fail("My error message.") or browserTest.pass() is called.
|
| *
|
| * For example:
|
| *
|
| - * browserTest.My_Test.prototype.run() = function() {
|
| + * browserTest.My_Test.prototype.run(myObjectLiteral) = function() {
|
| * window.setTimeout(function() {
|
| - * if (doSomething()) {
|
| + * if (doSomething(myObjectLiteral)) {
|
| * browserTest.pass();
|
| * } else {
|
| * browserTest.fail('My error message.');
|
| @@ -38,7 +38,7 @@
|
| * You will then invoke the test in C++ by calling:
|
| *
|
| * RunJavaScriptTest(web_content, "My_Test", "{"
|
| - * "pin: 123123"
|
| + * "pin: '123123'"
|
| * "}");
|
| */
|
|
|
| @@ -57,21 +57,28 @@ browserTest.init = function() {
|
| if (result.succeeded) {
|
| console.log('Test Passed.');
|
| } else {
|
| - console.error(result.error_message);
|
| + console.error('Test Failed.\n' +
|
| + result.error_message + '\n' + result.stack_trace);
|
| }
|
| }
|
| };
|
| };
|
|
|
| -browserTest.assert = function(expr, message) {
|
| +browserTest.expect = function(expr, message) {
|
| if (!expr) {
|
| message = (message) ? '<' + message + '>' : '';
|
| - browserTest.fail('Assertion failed.' + message);
|
| + browserTest.fail('Expectation failed.' + message);
|
| }
|
| };
|
|
|
| -browserTest.fail = function(error_message, opt_stack_trace) {
|
| - var stack_trace = opt_stack_trace || base.debug.callstack();
|
| +browserTest.fail = function(error) {
|
| + var error_message = error;
|
| + var stack_trace = base.debug.callstack();
|
| +
|
| + if (error instanceof Error) {
|
| + error_message = error.toString();
|
| + stack_trace = error.stack;
|
| + }
|
|
|
| // To run browserTest locally:
|
| // 1. Go to |remoting_webapp_files| and look for
|
| @@ -100,7 +107,7 @@ browserTest.pass = function() {
|
|
|
| browserTest.clickOnControl = function(id) {
|
| var element = document.getElementById(id);
|
| - browserTest.assert(element);
|
| + browserTest.expect(element);
|
| element.click();
|
| };
|
|
|
| @@ -110,45 +117,87 @@ browserTest.Timeout = {
|
| DEFAULT: 5000
|
| };
|
|
|
| -browserTest.waitForUIMode = function(expectedMode, callback, opt_timeout) {
|
| - var uiModeChanged = remoting.testEvents.Names.uiModeChanged;
|
| - var timerId = null;
|
| -
|
| - if (opt_timeout === undefined) {
|
| - opt_timeout = browserTest.Timeout.DEFAULT;
|
| - }
|
| +browserTest.onUIMode = function(expectedMode, opt_timeout) {
|
| + return new Promise (function(fulfill, reject) {
|
| + var uiModeChanged = remoting.testEvents.Names.uiModeChanged;
|
| + var timerId = null;
|
|
|
| - function onTimeout() {
|
| - remoting.testEvents.removeEventListener(uiModeChanged, onUIModeChanged);
|
| - browserTest.fail('Timeout waiting for ' + expectedMode);
|
| - }
|
| + if (opt_timeout === undefined) {
|
| + opt_timeout = browserTest.Timeout.DEFAULT;
|
| + }
|
|
|
| - function onUIModeChanged (mode) {
|
| - if (mode == expectedMode) {
|
| + function onTimeout() {
|
| remoting.testEvents.removeEventListener(uiModeChanged, onUIModeChanged);
|
| - window.clearTimeout(timerId);
|
| - timerId = null;
|
| - try {
|
| - callback();
|
| - } catch (e) {
|
| - browserTest.fail(e.toString(), e.stack);
|
| + reject('Timeout waiting for ' + expectedMode);
|
| + }
|
| +
|
| + function onUIModeChanged(mode) {
|
| + if (mode == expectedMode) {
|
| + remoting.testEvents.removeEventListener(uiModeChanged, onUIModeChanged);
|
| + window.clearTimeout(timerId);
|
| + timerId = null;
|
| + fulfill();
|
| }
|
| }
|
| - }
|
|
|
| - if (opt_timeout != browserTest.Timeout.NONE) {
|
| - timerId = window.setTimeout(onTimeout.bind(window, timerId), opt_timeout);
|
| - }
|
| - remoting.testEvents.addEventListener(uiModeChanged, onUIModeChanged);
|
| + if (opt_timeout != browserTest.Timeout.NONE) {
|
| + timerId = window.setTimeout(onTimeout, opt_timeout);
|
| + }
|
| + remoting.testEvents.addEventListener(uiModeChanged, onUIModeChanged);
|
| + });
|
| +};
|
| +
|
| +browserTest.expectMe2MeError = function(errorTag) {
|
| + var AppMode = remoting.AppMode;
|
| + var Timeout = browserTest.Timeout;
|
| +
|
| + var onConnected = browserTest.onUIMode(AppMode.IN_SESSION, Timeout.None);
|
| + var onFailure = browserTest.onUIMode(AppMode.CLIENT_CONNECT_FAILED_ME2ME);
|
| +
|
| + onConnected = onConnected.then(function() {
|
| + return Promise.reject(
|
| + 'Expected the Me2Me connection to fail.');
|
| + });
|
| +
|
| + onFailure = onFailure.then(function() {
|
| + var errorDiv = document.getElementById('connect-error-message');
|
| + var actual = errorDiv.innerText;
|
| + var expected = l10n.getTranslationOrError(errorTag);
|
| +
|
| + browserTest.clickOnControl('client-finished-me2me-button');
|
| +
|
| + if (actual != expected) {
|
| + return Promise.reject('Unexpected failure. actual:' + actual +
|
| + ' expected:' + expected);
|
| + }
|
| + });
|
| +
|
| + return Promise.race([onConnected, onFailure]);
|
| +};
|
| +
|
| +browserTest.expectMe2MeConnected = function() {
|
| + var AppMode = remoting.AppMode;
|
| + // Timeout if the session is not connected within 30 seconds.
|
| + var SESSION_CONNECTION_TIMEOUT = 30000;
|
| + var onConnected = browserTest.onUIMode(AppMode.IN_SESSION,
|
| + SESSION_CONNECTION_TIMEOUT);
|
| + var onFailure = browserTest.onUIMode(AppMode.CLIENT_CONNECT_FAILED_ME2ME,
|
| + browserTest.Timeout.NONE);
|
| + onFailure = onFailure.then(function() {
|
| + var errorDiv = document.getElementById('connect-error-message');
|
| + var errorMsg = errorDiv.innerText;
|
| + return Promise.reject('Unexpected error - ' + errorMsg);
|
| + });
|
| + return Promise.race([onConnected, onFailure]);
|
| };
|
|
|
| browserTest.runTest = function(testClass, data) {
|
| try {
|
| - var test = new testClass(data);
|
| - browserTest.assert(typeof test.run == 'function');
|
| - test.run();
|
| + var test = new testClass();
|
| + browserTest.expect(typeof test.run == 'function');
|
| + test.run(data);
|
| } catch (e) {
|
| - browserTest.fail(e.toString(), e.stack);
|
| + browserTest.fail(e);
|
| }
|
| };
|
|
|
|
|