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

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

Issue 223043006: Mojo: Use Promises for request/response calls in the JavaScript bindings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 8 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/test/run_apps_js_tests.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Mock out the support module to avoid depending on the message loop. 5 // Mock out the support module to avoid depending on the message loop.
6 define("mojo/bindings/js/support", function() { 6 define("mojo/bindings/js/support", ["timer"], function(timer) {
7 var waitingCallbacks = []; 7 var waitingCallbacks = [];
8 8
9 function WaitCookie(id) { 9 function WaitCookie(id) {
10 this.id = id; 10 this.id = id;
11 } 11 }
12 12
13 function asyncWait(handle, flags, callback) { 13 function asyncWait(handle, flags, callback) {
14 var id = waitingCallbacks.length; 14 var id = waitingCallbacks.length;
15 waitingCallbacks.push(callback); 15 waitingCallbacks.push(callback);
16 return new WaitCookie(id); 16 return new WaitCookie(id);
(...skipping 14 matching lines...) Expand all
31 31
32 function pumpOnce(result) { 32 function pumpOnce(result) {
33 var callbacks = waitingCallbacks; 33 var callbacks = waitingCallbacks;
34 waitingCallbacks = []; 34 waitingCallbacks = [];
35 for (var i = 0; i < callbacks.length; ++i) { 35 for (var i = 0; i < callbacks.length; ++i) {
36 if (callbacks[i]) 36 if (callbacks[i])
37 callbacks[i](result); 37 callbacks[i](result);
38 } 38 }
39 } 39 }
40 40
41 // Queue up a pumpOnce call to execute after the stack unwinds. Use
42 // this to trigger a pump after all Promises are executed.
43 function queuePump(result) {
44 timer.createOneShot(0, pumpOnce.bind(undefined, result));
45 }
46
41 var exports = {}; 47 var exports = {};
42 exports.asyncWait = asyncWait; 48 exports.asyncWait = asyncWait;
43 exports.cancelWait = cancelWait; 49 exports.cancelWait = cancelWait;
44 exports.numberOfWaitingCallbacks = numberOfWaitingCallbacks; 50 exports.numberOfWaitingCallbacks = numberOfWaitingCallbacks;
45 exports.pumpOnce = pumpOnce; 51 exports.pumpOnce = pumpOnce;
52 exports.queuePump = queuePump;
46 return exports; 53 return exports;
47 }); 54 });
48 55
49 define([ 56 define([
50 "gin/test/expect", 57 "gin/test/expect",
51 "mojo/bindings/js/support", 58 "mojo/bindings/js/support",
52 "mojo/bindings/js/core", 59 "mojo/bindings/js/core",
53 "mojo/public/js/bindings/connection", 60 "mojo/public/js/bindings/connection",
54 "mojo/public/interfaces/bindings/tests/sample_interfaces.mojom", 61 "mojo/public/interfaces/bindings/tests/sample_interfaces.mojom",
55 "mojo/public/interfaces/bindings/tests/sample_service.mojom", 62 "mojo/public/interfaces/bindings/tests/sample_service.mojom",
63 "mojo/apps/js/bindings/threading",
56 "gc", 64 "gc",
57 ], function(expect, 65 ], function(expect,
58 mockSupport, 66 mockSupport,
59 core, 67 core,
60 connection, 68 connection,
61 sample_interfaces, 69 sample_interfaces,
62 sample_service, 70 sample_service,
71 threading,
63 gc) { 72 gc) {
64 testClientServer(); 73 testClientServer();
65 testWriteToClosedPipe(); 74 testWriteToClosedPipe();
66 testRequestResponse(); 75 testRequestResponse().then(function() {
67 this.result = "PASS"; 76 this.result = "PASS";
68 gc.collectGarbage(); // should not crash 77 gc.collectGarbage(); // should not crash
78 threading.quit();
79 }.bind(this)).catch(function(e) {
80 this.result = "FAIL: " + (e.stack || e);
81 threading.quit();
82 }.bind(this));
69 83
70 function testClientServer() { 84 function testClientServer() {
71 var receivedFrobinate = false; 85 var receivedFrobinate = false;
72 var receivedDidFrobinate = false; 86 var receivedDidFrobinate = false;
73 87
74 // ServiceImpl ------------------------------------------------------------- 88 // ServiceImpl -------------------------------------------------------------
75 89
76 function ServiceImpl(peer) { 90 function ServiceImpl(peer) {
77 this.peer = peer; 91 this.peer = peer;
78 } 92 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 191
178 // ProviderImpl ------------------------------------------------------------ 192 // ProviderImpl ------------------------------------------------------------
179 193
180 function ProviderImpl(peer) { 194 function ProviderImpl(peer) {
181 this.peer = peer; 195 this.peer = peer;
182 } 196 }
183 197
184 ProviderImpl.prototype = 198 ProviderImpl.prototype =
185 Object.create(sample_interfaces.ProviderStub.prototype); 199 Object.create(sample_interfaces.ProviderStub.prototype);
186 200
187 ProviderImpl.prototype.echoString = function(a, callback) { 201 ProviderImpl.prototype.echoString = function(a) {
188 callback(a); 202 mockSupport.queuePump(core.RESULT_OK);
203 return Promise.resolve({a: a});
189 }; 204 };
190 205
191 ProviderImpl.prototype.echoStrings = function(a, b, callback) { 206 ProviderImpl.prototype.echoStrings = function(a, b) {
192 callback(a, b); 207 mockSupport.queuePump(core.RESULT_OK);
208 return Promise.resolve({a: a, b: b});
193 }; 209 };
194 210
195 // ProviderClientImpl ------------------------------------------------------ 211 // ProviderClientImpl ------------------------------------------------------
196 212
197 function ProviderClientImpl(peer) { 213 function ProviderClientImpl(peer) {
198 this.peer = peer; 214 this.peer = peer;
199 } 215 }
200 216
201 ProviderClientImpl.prototype = 217 ProviderClientImpl.prototype =
202 Object.create(sample_interfaces.ProviderClientStub.prototype); 218 Object.create(sample_interfaces.ProviderClientStub.prototype);
203 219
204 ProviderClientImpl.prototype.didFrobinate = function(result) {
205 receivedDidFrobinate = true;
206
207 expect(result).toBe(42);
208 };
209
210 var pipe = core.createMessagePipe(); 220 var pipe = core.createMessagePipe();
211 221
212 var connection0 = new connection.Connection( 222 var connection0 = new connection.Connection(
213 pipe.handle0, ProviderImpl, sample_interfaces.ProviderClientProxy); 223 pipe.handle0, ProviderImpl, sample_interfaces.ProviderClientProxy);
214 224
215 var connection1 = new connection.Connection( 225 var connection1 = new connection.Connection(
216 pipe.handle1, ProviderClientImpl, sample_interfaces.ProviderProxy); 226 pipe.handle1, ProviderClientImpl, sample_interfaces.ProviderProxy);
217 227
218 var echoedString;
219
220 // echoString 228 // echoString
221 229 mockSupport.queuePump(core.RESULT_OK);
222 connection1.remote.echoString("hello", function(a) { 230 return connection1.remote.echoString("hello").then(function(response) {
223 echoedString = a; 231 expect(response.a).toBe("hello");
232 }).then(function() {
233 // echoStrings
234 mockSupport.queuePump(core.RESULT_OK);
235 return connection1.remote.echoStrings("hello", "world");
236 }).then(function(response) {
237 expect(response.a).toBe("hello");
238 expect(response.b).toBe("world");
224 }); 239 });
225
226 mockSupport.pumpOnce(core.RESULT_OK);
227
228 expect(echoedString).toBe("hello");
229
230 // echoStrings
231
232 connection1.remote.echoStrings("hello", "world", function(a, b) {
233 echoedString = a + " " + b;
234 });
235
236 mockSupport.pumpOnce(core.RESULT_OK);
237
238 expect(echoedString).toBe("hello world");
239 } 240 }
240 }); 241 });
OLDNEW
« no previous file with comments | « no previous file | mojo/apps/js/test/run_apps_js_tests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698