| Index: remoting/webapp/unittests/it2me_helper_channel_unittest.js
|
| diff --git a/remoting/webapp/unittests/it2me_helper_channel_unittest.js b/remoting/webapp/unittests/it2me_helper_channel_unittest.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7b03ae85f35731d20e48ea616d1791df5800a467
|
| --- /dev/null
|
| +++ b/remoting/webapp/unittests/it2me_helper_channel_unittest.js
|
| @@ -0,0 +1,179 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +(function() {
|
| +
|
| +'use strict';
|
| +
|
| +var appLauncher = null;
|
| +var hangoutPort = null;
|
| +var webappPort = null;
|
| +var helperChannel = null;
|
| +var disconnectCallback = null;
|
| +
|
| +module('It2MeHelperChannel', {
|
| + setup: function() {
|
| + // App Launcher.
|
| + appLauncher = {
|
| + launch: function () {
|
| + return promiseResolveSynchronous('tabId');
|
| + },
|
| + close: function () {}
|
| + };
|
| + appLauncher.launch = sinon.spy(appLauncher, 'launch');
|
| + appLauncher.close = sinon.spy(appLauncher, 'close');
|
| +
|
| + // HangoutPort.
|
| + hangoutPort = new chrome.runtime.Port();
|
| + hangoutPort.postMessage = sinon.spy(hangoutPort, 'postMessage');
|
| + hangoutPort.disconnect = sinon.spy(hangoutPort, 'disconnect');
|
| +
|
| + // WebappPort.
|
| + webappPort = new chrome.runtime.Port();
|
| + webappPort.sender = {
|
| + tab : {
|
| + id : 'tabId'
|
| + }
|
| + };
|
| + webappPort.postMessage = sinon.spy(webappPort, 'postMessage');
|
| + webappPort.disconnect = sinon.spy(webappPort, 'disconnect');
|
| +
|
| + // disconnect callback
|
| + disconnectCallback = sinon.spy();
|
| +
|
| + // HelperChannel.
|
| + helperChannel = new remoting.It2MeHelperChannel(
|
| + appLauncher, hangoutPort, disconnectCallback);
|
| + helperChannel.init();
|
| + hangoutPort.onMessage.mock$fire({
|
| + method: remoting.It2MeHelperChannel.HangoutMessageTypes.CONNECT,
|
| + accessCode: "123412341234"
|
| + });
|
| + },
|
| +});
|
| +
|
| +function promiseResolveSynchronous(value) {
|
| + return {
|
| + then: function(callback) {
|
| + callback('tabId');
|
| + }
|
| + };
|
| +}
|
| +
|
| +test('onHangoutMessage_(|connect|) should launch the webapp',
|
| + function() {
|
| + sinon.assert.called(appLauncher.launch);
|
| + QUnit.equal(helperChannel.instanceId(), 'tabId');
|
| +});
|
| +
|
| +test('onWebappMessage() should forward messages to hangout', function() {
|
| + // Execute.
|
| + helperChannel.onWebappConnect(webappPort);
|
| + webappPort.onMessage.mock$fire({
|
| + method:'sessionStateChanged',
|
| + state:remoting.ClientSession.State.CONNECTING
|
| + });
|
| + webappPort.onMessage.mock$fire({
|
| + method:'sessionStateChanged',
|
| + state:remoting.ClientSession.State.CONNECTED
|
| + });
|
| +
|
| + // Verify events are forwarded.
|
| + sinon.assert.calledWith(hangoutPort.postMessage, {
|
| + method:'sessionStateChanged',
|
| + state:remoting.ClientSession.State.CONNECTING
|
| + });
|
| +
|
| + sinon.assert.calledWith(hangoutPort.postMessage, {
|
| + method:'sessionStateChanged',
|
| + state:remoting.ClientSession.State.CONNECTED
|
| + });
|
| +});
|
| +
|
| +test('should notify hangout when the webapp crashes', function() {
|
| + // Execute.
|
| + helperChannel.onWebappConnect(webappPort);
|
| + webappPort.onDisconnect.mock$fire();
|
| +
|
| + // Verify events are forwarded.
|
| + sinon.assert.calledWith(hangoutPort.postMessage, {
|
| + method:'sessionStateChanged',
|
| + state: remoting.ClientSession.State.FAILED
|
| + });
|
| + sinon.assert.called(hangoutPort.disconnect);
|
| + sinon.assert.calledOnce(disconnectCallback);
|
| +});
|
| +
|
| +test('should notify hangout when the session is ended', function() {
|
| + // Execute.
|
| + helperChannel.onWebappConnect(webappPort);
|
| + webappPort.onMessage.mock$fire({
|
| + method:'sessionStateChanged',
|
| + state:remoting.ClientSession.State.CLOSED
|
| + });
|
| +
|
| + webappPort.onDisconnect.mock$fire();
|
| +
|
| + // Verify events are forwarded.
|
| + sinon.assert.calledWith(hangoutPort.postMessage, {
|
| + method:'sessionStateChanged',
|
| + state:remoting.ClientSession.State.CLOSED
|
| + });
|
| + sinon.assert.called(hangoutPort.disconnect);
|
| + sinon.assert.calledOnce(disconnectCallback);
|
| +});
|
| +
|
| +test('should notify hangout when the session has error', function() {
|
| + helperChannel.onWebappConnect(webappPort);
|
| + webappPort.onMessage.mock$fire({
|
| + method:'sessionStateChanged',
|
| + state:remoting.ClientSession.State.FAILED
|
| + });
|
| +
|
| + webappPort.onDisconnect.mock$fire();
|
| +
|
| + // Verify events are forwarded.
|
| + sinon.assert.calledWith(hangoutPort.postMessage, {
|
| + method:'sessionStateChanged',
|
| + state:remoting.ClientSession.State.FAILED
|
| + });
|
| + sinon.assert.called(hangoutPort.disconnect);
|
| + sinon.assert.calledOnce(disconnectCallback);
|
| +});
|
| +
|
| +
|
| +test('onHangoutMessages_(disconnect) should close the webapp', function() {
|
| + // Execute.
|
| + helperChannel.onWebappConnect(webappPort);
|
| + hangoutPort.onMessage.mock$fire({
|
| + method: remoting.It2MeHelperChannel.HangoutMessageTypes.DISCONNECT
|
| + });
|
| +
|
| + sinon.assert.calledOnce(appLauncher.close);
|
| +
|
| + // Webapp will respond by disconnecting the port
|
| + webappPort.onDisconnect.mock$fire();
|
| +
|
| + // Verify events are forwarded.
|
| + sinon.assert.calledWith(hangoutPort.postMessage, {
|
| + method:'sessionStateChanged',
|
| + state:remoting.ClientSession.State.CLOSED
|
| + });
|
| + sinon.assert.called(webappPort.disconnect);
|
| + sinon.assert.called(hangoutPort.disconnect);
|
| +});
|
| +
|
| +test('should close the webapp when hangout crashes', function() {
|
| + // Execute.
|
| + helperChannel.onWebappConnect(webappPort);
|
| + hangoutPort.onDisconnect.mock$fire();
|
| +
|
| + sinon.assert.calledOnce(appLauncher.close);
|
| + sinon.assert.calledOnce(disconnectCallback);
|
| +
|
| + sinon.assert.called(hangoutPort.disconnect);
|
| + sinon.assert.called(webappPort.disconnect);
|
| +});
|
| +
|
| +})();
|
|
|