aboutsummaryrefslogtreecommitdiff
path: root/contexts/data/lib/closure-library/closure/goog/messaging/respondingchannel_test.html
blob: c2db29e58765d8e27751f4d08b24ac4f7d8bd824 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<!DOCTYPE html>
<html>
<!--
Copyright 2012 The Closure Library Authors. All Rights Reserved.

Use of this source code is governed by the Apache License, Version 2.0.
See the COPYING file for details.
-->
<!--
-->
<head>
<title>
  Closure Unit Tests - goog.messaging
</title>
<script type="text/javascript" src="../base.js"></script>
<script type="text/javascript">
  goog.require('goog.json');
  goog.require('goog.messaging');
  goog.require('goog.messaging.AbstractChannel');
  goog.require('goog.messaging.RespondingChannel');
  goog.require('goog.testing.MockControl');
  goog.require('goog.testing.jsunit');
  goog.require('goog.testing.messaging.MockMessageChannel');
</script>
</head>
<body>
<script type="text/javascript">

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