// Copyright 2012 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.RespondingChannelTest'); goog.setTestOnly('goog.messaging.RespondingChannelTest'); goog.require('goog.messaging.RespondingChannel'); goog.require('goog.testing.MockControl'); goog.require('goog.testing.jsunit'); goog.require('goog.testing.messaging.MockMessageChannel'); var CH1_REQUEST = {'request': 'quux1'}; var CH2_REQUEST = {'request': 'quux2'}; var CH1_RESPONSE = {'response': 'baz1'}; var CH2_RESPONSE = {'response': 'baz2'}; var SERVICE_NAME = 'serviceName'; var mockControl; var ch1; var ch2; var respondingCh1; var respondingCh2; function setUp() { mockControl = new goog.testing.MockControl(); ch1 = new goog.testing.messaging.MockMessageChannel(mockControl); ch2 = new goog.testing.messaging.MockMessageChannel(mockControl); respondingCh1 = new goog.messaging.RespondingChannel(ch1); respondingCh2 = new goog.messaging.RespondingChannel(ch2); } function tearDown() { respondingCh1.dispose(); respondingCh2.dispose(); mockControl.$verifyAll(); } function testSendWithSignature() { // 1 to 2 and back. var message1Ch1Request = {'data': CH1_REQUEST, 'signature': 0}; var message1Ch2Response = {'data': CH2_RESPONSE, 'signature': 0}; var message2Ch1Request = {'data': CH1_REQUEST, 'signature': 1}; var message2Ch2Response = {'data': CH2_RESPONSE, 'signature': 1}; // 2 to 1 and back. var message3Ch2Request = {'data': CH2_REQUEST, 'signature': 0}; var message3Ch1Response = {'data': CH1_RESPONSE, 'signature': 0}; var message4Ch2Request = {'data': CH2_REQUEST, 'signature': 1}; var message4Ch1Response = {'data': CH1_RESPONSE, 'signature': 1}; // 1 to 2 and back. ch1.send('public:' + SERVICE_NAME, message1Ch1Request); ch2.send('private:mics', message1Ch2Response); ch1.send('public:' + SERVICE_NAME, message2Ch1Request); ch2.send('private:mics', message2Ch2Response); // 2 to 1 and back. ch2.send('public:' + SERVICE_NAME, message3Ch2Request); ch1.send('private:mics', message3Ch1Response); ch2.send('public:' + SERVICE_NAME, message4Ch2Request); ch1.send('private:mics', message4Ch1Response); mockControl.$replayAll(); var hasInvokedCh1 = false; var hasInvokedCh2 = false; var hasReturnedFromCh1 = false; var hasReturnedFromCh2 = false; var serviceCallback1 = function(message) { hasInvokedCh1 = true; assertObjectEquals(CH2_REQUEST, message); return CH1_RESPONSE; }; var serviceCallback2 = function(message) { hasInvokedCh2 = true; assertObjectEquals(CH1_REQUEST, message); return CH2_RESPONSE; }; var invocationCallback1 = function(message) { hasReturnedFromCh2 = true; assertObjectEquals(CH2_RESPONSE, message); }; var invocationCallback2 = function(message) { hasReturnedFromCh1 = true; assertObjectEquals(CH1_RESPONSE, message); }; respondingCh1.registerService(SERVICE_NAME, serviceCallback1); respondingCh2.registerService(SERVICE_NAME, serviceCallback2); respondingCh1.send(SERVICE_NAME, CH1_REQUEST, invocationCallback1); ch2.receive('public:' + SERVICE_NAME, message1Ch1Request); ch1.receive('private:mics', message1Ch2Response); respondingCh1.send(SERVICE_NAME, CH1_REQUEST, invocationCallback1); ch2.receive('public:' + SERVICE_NAME, message2Ch1Request); ch1.receive('private:mics', message2Ch2Response); respondingCh2.send(SERVICE_NAME, CH2_REQUEST, invocationCallback2); ch1.receive('public:' + SERVICE_NAME, message3Ch2Request); ch2.receive('private:mics', message3Ch1Response); respondingCh2.send(SERVICE_NAME, CH2_REQUEST, invocationCallback2); ch1.receive('public:' + SERVICE_NAME, message4Ch2Request); ch2.receive('private:mics', message4Ch1Response); assertTrue( hasInvokedCh1 && hasInvokedCh2 && hasReturnedFromCh1 && hasReturnedFromCh2); }