// Copyright 2011 The Closure Library Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS-IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. goog.provide('goog.messaging.PortOperatorTest'); goog.setTestOnly('goog.messaging.PortOperatorTest'); goog.require('goog.messaging.PortNetwork'); goog.require('goog.messaging.PortOperator'); goog.require('goog.testing.MockControl'); goog.require('goog.testing.PropertyReplacer'); goog.require('goog.testing.jsunit'); goog.require('goog.testing.messaging.MockMessageChannel'); goog.require('goog.testing.messaging.MockMessagePort'); var stubs; var mockControl; var mockChannel1; var mockChannel2; var operator; function setUpPage() { stubs = new goog.testing.PropertyReplacer(); } function setUp() { mockControl = new goog.testing.MockControl(); var index = 0; stubs.set(goog.global, 'MessageChannel', function() { this.port1 = makeMockPort(index, 1); this.port2 = makeMockPort(index, 2); index += 1; }); mockChannel1 = new goog.testing.messaging.MockMessageChannel(mockControl); mockChannel2 = new goog.testing.messaging.MockMessageChannel(mockControl); operator = new goog.messaging.PortOperator('operator'); operator.addPort('1', mockChannel1); operator.addPort('2', mockChannel2); } function tearDown() { goog.dispose(operator); mockControl.$verifyAll(); stubs.reset(); } function makeMockPort(index, port) { return new goog.testing.messaging.MockMessagePort( {index: index, port: port}, mockControl); } function testConnectSelfToPortViaRequestConnection() { mockChannel1.send( goog.messaging.PortNetwork.GRANT_CONNECTION_SERVICE, {success: true, name: 'operator', port: makeMockPort(0, 1)}); mockControl.$replayAll(); mockChannel1.receive( goog.messaging.PortNetwork.REQUEST_CONNECTION_SERVICE, 'operator'); var port = operator.dial('1').port_; assertObjectEquals({index: 0, port: 2}, port.id); assertEquals(true, port.started); } function testConnectSelfToPortViaGetPort() { mockChannel1.send( goog.messaging.PortNetwork.GRANT_CONNECTION_SERVICE, {success: true, name: 'operator', port: makeMockPort(0, 1)}); mockControl.$replayAll(); var port = operator.dial('1').port_; assertObjectEquals({index: 0, port: 2}, port.id); assertEquals(true, port.started); } function testConnectTwoCallers() { mockChannel1.send( goog.messaging.PortNetwork.GRANT_CONNECTION_SERVICE, {success: true, name: '2', port: makeMockPort(0, 1)}); mockChannel2.send( goog.messaging.PortNetwork.GRANT_CONNECTION_SERVICE, {success: true, name: '1', port: makeMockPort(0, 2)}); mockControl.$replayAll(); mockChannel1.receive( goog.messaging.PortNetwork.REQUEST_CONNECTION_SERVICE, '2'); } function testConnectCallerToNonexistentCaller() { mockChannel1.send(goog.messaging.PortNetwork.GRANT_CONNECTION_SERVICE, { success: false, message: 'Port "1" requested a connection to port "no", which doesn\'t ' + 'exist' }); mockControl.$replayAll(); mockChannel1.receive( goog.messaging.PortNetwork.REQUEST_CONNECTION_SERVICE, 'no'); }