Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6)

Side by Side Diff: mojo/apps/js/bindings/connection_unittests.js

Issue 215883004: Revert of Mojo: add javascript bindings for request/response (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | mojo/apps/js/bindings/connector_unittests.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // Mock out the support module to avoid depending on the message loop.
6 define("mojo/bindings/js/support", function() {
7 var waitingCallbacks = [];
8
9 function WaitCookie(id) {
10 this.id = id;
11 }
12
13 function asyncWait(handle, flags, callback) {
14 var id = waitingCallbacks.length;
15 waitingCallbacks.push(callback);
16 return new WaitCookie(id);
17 }
18
19 function cancelWait(cookie) {
20 waitingCallbacks[cookie.id] = null;
21 }
22
23 function numberOfWaitingCallbacks() {
24 var count = 0;
25 for (var i = 0; i < waitingCallbacks.length; ++i) {
26 if (waitingCallbacks[i])
27 ++count;
28 }
29 return count;
30 }
31
32 function pumpOnce(result) {
33 var callbacks = waitingCallbacks;
34 waitingCallbacks = [];
35 for (var i = 0; i < callbacks.length; ++i) {
36 if (callbacks[i])
37 callbacks[i](result);
38 }
39 }
40
41 var exports = {};
42 exports.asyncWait = asyncWait;
43 exports.cancelWait = cancelWait;
44 exports.numberOfWaitingCallbacks = numberOfWaitingCallbacks;
45 exports.pumpOnce = pumpOnce;
46 return exports;
47 });
48
49 define([
50 "gin/test/expect",
51 "mojo/bindings/js/support",
52 "mojo/bindings/js/core",
53 "mojo/public/bindings/js/connection",
54 "mojo/public/bindings/tests/sample_interfaces.mojom",
55 "mojo/public/bindings/tests/sample_service.mojom",
56 ], function(expect,
57 mockSupport,
58 core,
59 connection,
60 sample_interfaces,
61 sample_service) {
62 testClientServer();
63 testWriteToClosedPipe();
64 testRequestResponse();
65 this.result = "PASS";
66
67 function testClientServer() {
68 var receivedFrobinate = false;
69 var receivedDidFrobinate = false;
70
71 // ServiceImpl -------------------------------------------------------------
72
73 function ServiceImpl(peer) {
74 this.peer = peer;
75 }
76
77 ServiceImpl.prototype = Object.create(sample_service.ServiceStub.prototype);
78
79 ServiceImpl.prototype.frobinate = function(foo, baz, port) {
80 receivedFrobinate = true;
81
82 expect(foo.name).toBe("Example name");
83 expect(baz).toBeTruthy();
84 expect(core.close(port)).toBe(core.RESULT_OK);
85
86 this.peer.didFrobinate(42);
87 };
88
89 // ServiceImpl -------------------------------------------------------------
90
91 function ServiceClientImpl(peer) {
92 this.peer = peer;
93 }
94
95 ServiceClientImpl.prototype =
96 Object.create(sample_service.ServiceClientStub.prototype);
97
98 ServiceClientImpl.prototype.didFrobinate = function(result) {
99 receivedDidFrobinate = true;
100
101 expect(result).toBe(42);
102 };
103
104 var pipe = core.createMessagePipe();
105 var anotherPipe = core.createMessagePipe();
106 var sourcePipe = core.createMessagePipe();
107
108 var connection0 = new connection.Connection(
109 pipe.handle0, ServiceImpl, sample_service.ServiceClientProxy);
110
111 var connection1 = new connection.Connection(
112 pipe.handle1, ServiceClientImpl, sample_service.ServiceProxy);
113
114 var foo = new sample_service.Foo();
115 foo.bar = new sample_service.Bar();
116 foo.name = "Example name";
117 foo.source = sourcePipe.handle0;
118 connection1.remote.frobinate(foo, true, anotherPipe.handle0);
119
120 mockSupport.pumpOnce(core.RESULT_OK);
121
122 expect(receivedFrobinate).toBeTruthy();
123 expect(receivedDidFrobinate).toBeTruthy();
124
125 connection0.close();
126 connection1.close();
127
128 expect(mockSupport.numberOfWaitingCallbacks()).toBe(0);
129
130 // sourcePipe.handle0 was closed automatically when sent over IPC.
131 expect(core.close(sourcePipe.handle0)).toBe(core.RESULT_INVALID_ARGUMENT);
132 // sourcePipe.handle1 hasn't been closed yet.
133 expect(core.close(sourcePipe.handle1)).toBe(core.RESULT_OK);
134
135 // anotherPipe.handle0 was closed automatically when sent over IPC.
136 expect(core.close(anotherPipe.handle0)).toBe(core.RESULT_INVALID_ARGUMENT);
137 // anotherPipe.handle1 hasn't been closed yet.
138 expect(core.close(anotherPipe.handle1)).toBe(core.RESULT_OK);
139
140 // The Connection object is responsible for closing these handles.
141 expect(core.close(pipe.handle0)).toBe(core.RESULT_INVALID_ARGUMENT);
142 expect(core.close(pipe.handle1)).toBe(core.RESULT_INVALID_ARGUMENT);
143 }
144
145 function testWriteToClosedPipe() {
146 var pipe = core.createMessagePipe();
147
148 var connection1 = new connection.Connection(
149 pipe.handle1, function() {}, sample_service.ServiceProxy);
150
151 // Close the other end of the pipe.
152 core.close(pipe.handle0);
153
154 // Not observed yet because we haven't pumped events yet.
155 expect(connection1.encounteredError()).toBeFalsy();
156
157 var foo = new sample_service.Foo();
158 foo.bar = new sample_service.Bar();
159 // TODO(darin): crbug.com/357043: pass null in place of |foo| here.
160 connection1.remote.frobinate(foo, true, core.kInvalidHandle);
161
162 // Write failures are not reported.
163 expect(connection1.encounteredError()).toBeFalsy();
164
165 // Pump events, and then we should start observing the closed pipe.
166 mockSupport.pumpOnce(core.RESULT_OK);
167
168 expect(connection1.encounteredError()).toBeTruthy();
169
170 connection1.close();
171 }
172
173 function testRequestResponse() {
174
175 // ProviderImpl ------------------------------------------------------------
176
177 function ProviderImpl(peer) {
178 this.peer = peer;
179 }
180
181 ProviderImpl.prototype =
182 Object.create(sample_interfaces.ProviderStub.prototype);
183
184 ProviderImpl.prototype.echoString = function(a, callback) {
185 callback(a);
186 };
187
188 ProviderImpl.prototype.echoStrings = function(a, b, callback) {
189 callback(a, b);
190 };
191
192 // ProviderClientImpl ------------------------------------------------------
193
194 function ProviderClientImpl(peer) {
195 this.peer = peer;
196 }
197
198 ProviderClientImpl.prototype =
199 Object.create(sample_interfaces.ProviderClientStub.prototype);
200
201 ProviderClientImpl.prototype.didFrobinate = function(result) {
202 receivedDidFrobinate = true;
203
204 expect(result).toBe(42);
205 };
206
207 var pipe = core.createMessagePipe();
208
209 var connection0 = new connection.Connection(
210 pipe.handle0, ProviderImpl, sample_interfaces.ProviderClientProxy);
211
212 var connection1 = new connection.Connection(
213 pipe.handle1, ProviderClientImpl, sample_interfaces.ProviderProxy);
214
215 var echoedString;
216
217 // echoString
218
219 connection1.remote.echoString("hello", function(a) {
220 echoedString = a;
221 });
222
223 mockSupport.pumpOnce(core.RESULT_OK);
224
225 expect(echoedString).toBe("hello");
226
227 // echoStrings
228
229 connection1.remote.echoStrings("hello", "world", function(a, b) {
230 echoedString = a + " " + b;
231 });
232
233 mockSupport.pumpOnce(core.RESULT_OK);
234
235 expect(echoedString).toBe("hello world");
236 }
237 });
OLDNEW
« no previous file with comments | « no previous file | mojo/apps/js/bindings/connector_unittests.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698