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 f049de3204a4373223e8ecc858c9110523240084..f41591fd452113f768028de2611ea2c9ab1c5c19 100644 |
--- a/remoting/webapp/browser_test/browser_test.js |
+++ b/remoting/webapp/browser_test/browser_test.js |
@@ -4,10 +4,6 @@ |
/** |
* @fileoverview |
- * @suppress {checkTypes} By default, JSCompile is not run on test files. |
- * However, you can modify |remoting_webapp_files.gypi| locally to include |
- * the test in the package to expedite local development. This suppress |
- * is here so that JSCompile won't complain. |
* |
* Provides basic functionality for JavaScript based browser test. |
* |
@@ -44,30 +40,44 @@ |
'use strict'; |
+/** @suppress {duplicate} */ |
var browserTest = browserTest || {}; |
+/** @type {window.DomAutomationController} */ |
+browserTest.automationController_ = null; |
+ |
+/** |
+ * @return {void} |
+ * @suppress {checkTypes|reportUnknownTypes} |
+ */ |
browserTest.init = function() { |
// The domAutomationController is used to communicate progress back to the |
// C++ calling code. It will only exist if chrome is run with the flag |
// --dom-automation. It is stubbed out here so that browser test can be run |
// under the regular app. |
- browserTest.automationController_ = window.domAutomationController || { |
- send: function(json) { |
- var result = JSON.parse(json); |
- if (result.succeeded) { |
- console.log('Test Passed.'); |
- } else { |
- console.error('Test Failed.\n' + |
- result.error_message + '\n' + result.stack_trace); |
+ if (window.domAutomationController) { |
+ /** @type {window.DomAutomationController} */ |
+ browserTest.automationController_ = window.domAutomationController; |
+ } else { |
+ browserTest.automationController_ = { |
+ send: function(json) { |
+ var result = JSON.parse(json); |
+ if (result.succeeded) { |
+ console.log('Test Passed.'); |
+ } else { |
+ console.error('Test Failed.\n' + |
+ result.error_message + '\n' + result.stack_trace); |
+ } |
} |
- } |
+ }; |
}; |
}; |
/** |
* Fails the C++ calling browser test with |message| if |expr| is false. |
- * @param {boolean} expr |
+ * @param {*} expr |
* @param {string} message |
+ * @return {void} |
*/ |
browserTest.expect = function(expr, message) { |
if (!expr) { |
@@ -76,6 +86,10 @@ browserTest.expect = function(expr, message) { |
} |
}; |
+/** |
+ * @param {string|Error} error |
+ * @return {void} |
+ */ |
browserTest.fail = function(error) { |
var error_message = error; |
var stack_trace = base.debug.callstack(); |
@@ -85,6 +99,8 @@ browserTest.fail = function(error) { |
stack_trace = error.stack; |
} |
+ console.error(error_message); |
+ |
// To run browserTest locally: |
// 1. Go to |remoting_webapp_files| and look for |
// |remoting_webapp_js_browser_test_files| and uncomment it |
@@ -102,6 +118,9 @@ browserTest.fail = function(error) { |
})); |
}; |
+/** |
+ * @return {void} |
+ */ |
browserTest.pass = function() { |
browserTest.automationController_.send(JSON.stringify({ |
succeeded: true, |
@@ -110,12 +129,21 @@ browserTest.pass = function() { |
})); |
}; |
+/** |
+ * @param {string} id |
+ * @return {void} |
+ */ |
browserTest.clickOnControl = function(id) { |
var element = document.getElementById(id); |
browserTest.expect(element, 'No such element: ' + id); |
element.click(); |
}; |
+/** |
+ * @param {remoting.AppMode} expectedMode |
+ * @param {number=} opt_timeout |
+ * @return {Promise} |
+ */ |
browserTest.onUIMode = function(expectedMode, opt_timeout) { |
if (expectedMode == remoting.currentMode) { |
// If the current mode is the same as the expected mode, return a fulfilled |
@@ -139,22 +167,27 @@ browserTest.onUIMode = function(expectedMode, opt_timeout) { |
reject('Timeout waiting for ' + expectedMode); |
} |
+ /** @param {remoting.AppMode} mode */ |
function onUIModeChanged(mode) { |
if (mode == expectedMode) { |
remoting.testEvents.removeEventListener(uiModeChanged, onUIModeChanged); |
window.clearTimeout(timerId); |
timerId = null; |
- fulfill(); |
+ fulfill(true); |
} |
} |
if (opt_timeout != browserTest.Timeout.NONE) { |
- timerId = window.setTimeout(onTimeout, opt_timeout); |
+ timerId = window.setTimeout(onTimeout, |
+ /** @type {number} */ (opt_timeout)); |
} |
remoting.testEvents.addEventListener(uiModeChanged, onUIModeChanged); |
}); |
}; |
+/** |
+ * @return {Promise} |
+ */ |
browserTest.connectMe2Me = function() { |
var AppMode = remoting.AppMode; |
browserTest.clickOnControl('this-host-connect'); |
@@ -170,11 +203,15 @@ browserTest.connectMe2Me = function() { |
}); |
}; |
+/** |
+ * @return {Promise} |
+ */ |
browserTest.disconnect = function() { |
var AppMode = remoting.AppMode; |
var finishedMode = AppMode.CLIENT_SESSION_FINISHED_ME2ME; |
var finishedButton = 'client-finished-me2me-button'; |
- if (remoting.clientSession.getMode() == remoting.ClientSession.Mode.IT2ME) { |
+ if (remoting.desktopConnectedView.getMode() == |
+ remoting.DesktopConnectedView.Mode.IT2ME) { |
finishedMode = AppMode.CLIENT_SESSION_FINISHED_IT2ME; |
finishedButton = 'client-finished-it2me-button'; |
} |
@@ -187,6 +224,11 @@ browserTest.disconnect = function() { |
}); |
}; |
+/** |
+ * @param {string} pin |
+ * @param {?boolean} opt_expectError |
+ * @return {Promise} |
+ */ |
browserTest.enterPIN = function(pin, opt_expectError) { |
// Wait for 500ms before hitting the PIN button. From experiment, sometimes |
// the PIN prompt does not dismiss without the timeout. |
@@ -199,7 +241,7 @@ browserTest.enterPIN = function(pin, opt_expectError) { |
}).then(function() { |
if (opt_expectError) { |
return browserTest.expectConnectionError( |
- remoting.ClientSession.Mode.ME2ME, |
+ remoting.DesktopConnectedView.Mode.ME2ME, |
remoting.Error.INVALID_ACCESS_CODE); |
} else { |
return browserTest.expectConnected(); |
@@ -207,6 +249,11 @@ browserTest.enterPIN = function(pin, opt_expectError) { |
}); |
}; |
+/** |
+ * @param {remoting.DesktopConnectedView.Mode} connectionMode |
+ * @param {string} errorTag |
+ * @return {Promise} |
+ */ |
browserTest.expectConnectionError = function(connectionMode, errorTag) { |
var AppMode = remoting.AppMode; |
var Timeout = browserTest.Timeout; |
@@ -214,7 +261,7 @@ browserTest.expectConnectionError = function(connectionMode, errorTag) { |
var finishButton = 'client-finished-me2me-button'; |
var failureMode = AppMode.CLIENT_CONNECT_FAILED_ME2ME; |
- if (connectionMode == remoting.ClientSession.Mode.IT2ME) { |
+ if (connectionMode == remoting.DesktopConnectedView.Mode.IT2ME) { |
failureMode = AppMode.CLIENT_CONNECT_FAILED_IT2ME; |
finishButton = 'client-finished-it2me-button'; |
} |
@@ -228,6 +275,7 @@ browserTest.expectConnectionError = function(connectionMode, errorTag) { |
}); |
onFailure = onFailure.then(function() { |
+ /** @type {Element} */ |
var errorDiv = document.getElementById('connect-error-message'); |
var actual = errorDiv.innerText; |
var expected = l10n.getTranslationOrError(errorTag); |
@@ -242,6 +290,9 @@ browserTest.expectConnectionError = function(connectionMode, errorTag) { |
return Promise.race([onConnected, onFailure]); |
}; |
+/** |
+ * @return {Promise} |
+ */ |
browserTest.expectConnected = function() { |
var AppMode = remoting.AppMode; |
// Timeout if the session is not connected within 30 seconds. |
@@ -258,12 +309,20 @@ browserTest.expectConnected = function() { |
return Promise.race([onConnected, onFailure]); |
}; |
+/** |
+ * @param {base.EventSource} eventSource |
+ * @param {string} event |
+ * @param {number} timeoutMs |
+ * @param {?string} opt_expectedData |
+ * @return {Promise} |
+ */ |
browserTest.expectEvent = function(eventSource, event, timeoutMs, |
opt_expectedData) { |
return new Promise(function(fullfil, reject) { |
+ /** @param {string=} actualData */ |
var verifyEventParameters = function(actualData) { |
if (opt_expectedData === undefined || opt_expectedData === actualData) { |
- fullfil(); |
+ fullfil(true); |
} else { |
reject('Bad event data; expected ' + opt_expectedData + |
'; got ' + actualData); |
@@ -277,16 +336,26 @@ browserTest.expectEvent = function(eventSource, event, timeoutMs, |
}); |
}; |
+/** |
+ * @param {Function} testClass |
+ * @param {*} data |
+ * @return {void} |
+ * @suppress {checkTypes|checkVars|reportUnknownTypes} |
+ */ |
browserTest.runTest = function(testClass, data) { |
try { |
var test = new testClass(); |
browserTest.expect(typeof test.run == 'function'); |
test.run(data); |
- } catch (e) { |
+ } catch (/** @type {Error} */ e) { |
browserTest.fail(e); |
} |
}; |
+/** |
+ * @param {string} newPin |
+ * @return {Promise} |
+ */ |
browserTest.setupPIN = function(newPin) { |
var AppMode = remoting.AppMode; |
var HOST_SETUP_WAIT = 10000; |
@@ -313,6 +382,9 @@ browserTest.setupPIN = function(newPin) { |
}); |
}; |
+/** |
+ * @return {Promise} |
+ */ |
browserTest.isLocalHostStarted = function() { |
return new Promise(function(resolve) { |
remoting.hostController.getLocalHostState(function(state) { |
@@ -321,27 +393,37 @@ browserTest.isLocalHostStarted = function() { |
}); |
}; |
+/** |
+ * @param {string} pin |
+ * @return {Promise} |
+ */ |
browserTest.ensureHostStartedWithPIN = function(pin) { |
// Return if host is already |
- return browserTest.isLocalHostStarted().then(function(started){ |
- if (!started) { |
- console.log('browserTest: Enabling remote connection.'); |
- browserTest.clickOnControl('start-daemon'); |
- } else { |
- console.log('browserTest: Changing the PIN of the host to: ' + pin + '.'); |
- browserTest.clickOnControl('change-daemon-pin'); |
- } |
- return browserTest.setupPIN(pin); |
- }); |
+ return browserTest.isLocalHostStarted().then( |
+ /** @param {boolean} started */ |
+ function(started){ |
+ if (!started) { |
+ console.log('browserTest: Enabling remote connection.'); |
+ browserTest.clickOnControl('start-daemon'); |
+ } else { |
+ console.log('browserTest: Changing the PIN of the host to: ' + |
+ pin + '.'); |
+ browserTest.clickOnControl('change-daemon-pin'); |
+ } |
+ return browserTest.setupPIN(pin); |
+ }); |
}; |
-// Called by Browser Test in C++ |
+/** |
+ * Called by Browser Test in C++ |
+ * @param {string} pin |
+ * @suppress {checkTypes} |
+ */ |
browserTest.ensureRemoteConnectionEnabled = function(pin) { |
- browserTest.ensureHostStartedWithPIN(pin).then(function(){ |
- browserTest.automationController_.send(true); |
- }, function(errorMessage){ |
- console.error(errorMessage); |
- browserTest.automationController_.send(false); |
+ browserTest.ensureHostStartedWithPIN(pin).then(function() { |
+ browserTest.pass(); |
+ }, function(reason) { |
+ browserTest.fail(reason); |
}); |
}; |