| // 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); |
| } |