OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 library echo_apptests; | 5 library echo_apptests; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import 'package:mojo_apptest/apptest.dart'; | 9 import 'package:mojo_apptest/apptest.dart'; |
10 import 'package:mojo/application.dart'; | 10 import 'package:mojo/application.dart'; |
11 import 'package:mojo/bindings.dart'; | 11 import 'package:mojo/bindings.dart'; |
12 import 'package:mojo/core.dart'; | 12 import 'package:mojo/core.dart'; |
13 import 'package:_mojo_for_test_only/test/echo_service.mojom.dart'; | 13 import 'package:_mojo_for_test_only/test/echo_service.mojom.dart'; |
14 | 14 |
15 class EchoServiceMock implements EchoService { | 15 class EchoServiceMock implements EchoService { |
16 dynamic echoString(String value, [Function responseFactory]) | 16 void echoString(String value, void callback(String value)) { |
17 => responseFactory(value); | 17 callback(value); |
| 18 } |
18 | 19 |
19 dynamic delayedEchoString(String value,int millis, [Function responseFactory]) | 20 void delayedEchoString(String value, int millis, |
20 => new Future.delayed(new Duration(milliseconds : millis), | 21 void callback(String value)) { |
21 () => responseFactory(value)); | 22 new Timer(new Duration(milliseconds : millis), () => callback(value)); |
| 23 } |
| 24 |
22 void swap() {} | 25 void swap() {} |
| 26 |
23 void quit() {} | 27 void quit() {} |
24 } | 28 } |
25 | 29 |
26 echoApptests(Application application, String url) { | 30 echoApptests(Application application, String url) { |
27 group('Echo Service Apptests', () { | 31 group('Echo Service Apptests', () { |
28 test('String', () async { | 32 test('String', () async { |
29 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 33 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
30 | 34 |
31 var v = await echo.echoString("foo"); | 35 var c = new Completer(); |
32 expect(v.value, equals("foo")); | 36 echo.echoString("foo", (String value) { |
| 37 c.complete(value); |
| 38 }); |
| 39 expect(await echo.responseOrError(c.future), equals("foo")); |
33 | 40 |
34 var q = await echo.echoString("quit"); | 41 c = new Completer(); |
35 expect(q.value, equals("quit")); | 42 echo.echoString("quit", (String value) { |
| 43 fail("unreachable"); |
| 44 }); |
| 45 try { |
| 46 await echo.responseOrError(c.future); |
| 47 fail("unreachable"); |
| 48 } catch (e) { |
| 49 expect(e is ProxyError, isTrue); |
| 50 } |
36 | 51 |
37 await echo.close(); | 52 await echo.close(); |
38 }); | 53 }); |
39 | 54 |
40 test('Empty String', () async { | 55 test('Empty String', () async { |
41 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 56 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
42 | 57 |
43 var v = await echo.echoString(""); | 58 var c = new Completer(); |
44 expect(v.value, equals("")); | 59 echo.echoString("", (String value) { |
| 60 c.complete(value); |
| 61 }); |
| 62 expect(await echo.responseOrError(c.future), equals("")); |
45 | 63 |
46 var q = await echo.echoString("quit"); | 64 c = new Completer(); |
47 expect(q.value, equals("quit")); | 65 echo.echoString("quit", (String value) { |
| 66 fail("unreachable"); |
| 67 }); |
| 68 try { |
| 69 await echo.responseOrError(c.future); |
| 70 fail("unreachable"); |
| 71 } catch (e) { |
| 72 expect(e is ProxyError, isTrue); |
| 73 } |
48 | 74 |
49 await echo.close(); | 75 await echo.close(); |
50 }); | 76 }); |
51 | 77 |
52 test('Null String', () async { | 78 test('Null String', () async { |
53 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 79 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
54 | 80 |
55 var v = await echo.echoString(null); | 81 var c = new Completer(); |
56 expect(v.value, equals(null)); | 82 echo.echoString(null, (String value) { |
| 83 c.complete(value); |
| 84 }); |
| 85 expect(await echo.responseOrError(c.future), equals(null)); |
57 | 86 |
58 var q = await echo.echoString("quit"); | 87 c = new Completer(); |
59 expect(q.value, equals("quit")); | 88 echo.echoString("quit", (String value) { |
| 89 fail("unreachable"); |
| 90 }); |
| 91 try { |
| 92 await echo.responseOrError(c.future); |
| 93 fail("unreachable"); |
| 94 } catch (e) { |
| 95 expect(e is ProxyError, isTrue); |
| 96 } |
60 | 97 |
61 await echo.close(); | 98 await echo.close(); |
62 }); | 99 }); |
63 | 100 |
64 test('Delayed Success', () async { | 101 test('Delayed Success', () async { |
65 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 102 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
66 | 103 |
67 var milliseconds = 100; | 104 var milliseconds = 100; |
68 var watch = new Stopwatch()..start(); | 105 var watch = new Stopwatch()..start(); |
69 var v = await echo.delayedEchoString("foo", milliseconds); | 106 var c = new Completer(); |
70 var elapsed = watch.elapsedMilliseconds; | 107 echo.delayedEchoString("foo", milliseconds, (String value) { |
71 expect(v.value, equals("foo")); | 108 var elapsed = watch.elapsedMilliseconds; |
72 expect(elapsed, greaterThanOrEqualTo(milliseconds)); | 109 c.complete([value, elapsed]); |
| 110 }); |
| 111 var result = await echo.responseOrError(c.future); |
| 112 expect(result[0], equals("foo")); |
| 113 expect(result[1], greaterThanOrEqualTo(milliseconds)); |
73 | 114 |
74 var q = await echo.echoString("quit"); | 115 c = new Completer(); |
75 expect(q.value, equals("quit")); | 116 echo.echoString("quit", (String value) { |
| 117 fail("unreachable"); |
| 118 }); |
| 119 try { |
| 120 await echo.responseOrError(c.future); |
| 121 fail("unreachable"); |
| 122 } catch (e) { |
| 123 expect(e is ProxyError, isTrue); |
| 124 } |
76 | 125 |
77 await echo.close(); | 126 await echo.close(); |
78 }); | 127 }); |
79 | 128 |
80 test('Delayed Close', () { | 129 test('Delayed Close', () async { |
81 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 130 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
82 | 131 |
83 var milliseconds = 100; | 132 var milliseconds = 100; |
84 echo.responseOrError(echo.delayedEchoString( | 133 var c = new Completer(); |
85 "quit", milliseconds)).then((result) { | 134 echo.delayedEchoString("quit", milliseconds, (String value) { |
86 fail('This future should not complete.'); | 135 fail("unreachable"); |
87 }, onError: (e) { | 136 }); |
| 137 try { |
| 138 await echo.responseOrError(c.future); |
| 139 fail("unreachable"); |
| 140 } catch (e) { |
88 expect(e is ProxyError, isTrue); | 141 expect(e is ProxyError, isTrue); |
89 }); | 142 }; |
90 | 143 |
91 return new Future.delayed( | 144 return new Future.delayed( |
92 new Duration(milliseconds: 10), () => echo.close()); | 145 new Duration(milliseconds: 10), () => echo.close()); |
93 }); | 146 }); |
94 | 147 |
95 test('Swap', () async { | 148 test('Swap', () async { |
96 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 149 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
97 | 150 |
98 for (int i = 0; i < 10; i++) { | 151 for (int i = 0; i < 10; i++) { |
99 var v = await echo.responseOrError(echo.echoString("foo")); | 152 var c = new Completer(); |
100 expect(v.value, equals("foo")); | 153 echo.echoString("foo", (String value) { |
| 154 c.complete(value); |
| 155 }); |
| 156 expect(await echo.responseOrError(c.future), equals("foo")); |
101 } | 157 } |
102 | 158 |
103 echo.ctrl.errorFuture.then((e) { | 159 echo.ctrl.errorFuture.then((e) { |
104 fail("echo: $e"); | 160 fail("echo: $e"); |
105 }); | 161 }); |
106 | 162 |
107 // Trigger an implementation swap in the echo server. | 163 // Trigger an implementation swap in the echo server. |
108 echo.swap(); | 164 echo.swap(); |
109 | 165 |
110 expect(echo.ctrl.isBound, isTrue); | 166 expect(echo.ctrl.isBound, isTrue); |
111 | 167 |
112 for (int i = 0; i < 10; i++) { | 168 for (int i = 0; i < 10; i++) { |
113 var v = await echo.responseOrError(echo.echoString("foo")); | 169 var c = new Completer(); |
114 expect(v.value, equals("foo")); | 170 echo.echoString("foo", (String value) { |
| 171 c.complete(value); |
| 172 }); |
| 173 expect(await echo.responseOrError(c.future), equals("foo")); |
115 } | 174 } |
116 | 175 |
117 var q = await echo.responseOrError(echo.echoString("quit")); | |
118 expect(q.value, equals("quit")); | |
119 | |
120 await echo.close(); | 176 await echo.close(); |
121 }); | 177 }); |
122 | 178 |
123 test('Multiple Error Checks Success', () { | 179 test('Multiple Error Checks Success', () { |
124 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 180 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
125 | 181 |
126 List<Future> futures = []; | 182 List<Future> futures = []; |
127 for (int i = 0; i < 100; i++) { | 183 for (int i = 0; i < 100; i++) { |
128 var f = echo.responseOrError(echo.echoString("foo")).then((r) { | 184 var c = new Completer(); |
129 expect(r.value, equals("foo")); | 185 echo.echoString("foo", (String value) { |
130 }, onError: (e) { | 186 c.complete(value); |
131 fail('There should be no errors'); | |
132 }); | 187 }); |
133 futures.add(f); | 188 futures.add(echo.responseOrError(c.future)); |
134 } | 189 } |
135 return Future.wait(futures).whenComplete(() => echo.close()); | 190 return Future.wait(futures).whenComplete(() => echo.close()); |
136 }); | 191 }); |
137 | 192 |
138 test('Multiple Error Checks Fail', () { | 193 test('Multiple Error Checks Fail', () { |
139 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 194 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
140 | 195 |
141 List<Future> futures = []; | 196 List<Future> futures = []; |
142 var milliseconds = 100; | 197 var milliseconds = 100; |
143 for (int i = 0; i < 100; i++) { | 198 for (int i = 0; i < 100; i++) { |
144 var f = echo.responseOrError( | 199 var c = new Completer(); |
145 echo.delayedEchoString("foo", milliseconds)).then((_) { | 200 echo.delayedEchoString("foo", milliseconds, (String value) { |
146 fail('This call should fail'); | 201 fail("unreachable"); |
| 202 }); |
| 203 var f = echo.responseOrError(c.future).then((_) { |
| 204 fail("unreachable"); |
147 }, onError: (e) { | 205 }, onError: (e) { |
148 expect(e is ProxyError, isTrue); | 206 expect(e is ProxyError, isTrue); |
149 }); | 207 }); |
150 futures.add(f); | 208 futures.add(f); |
151 } | 209 } |
152 return echo.close().then((_) => Future.wait(futures)); | 210 return echo.close().then((_) => Future.wait(futures)); |
153 }); | 211 }); |
154 | 212 |
155 test('Uncaught Call Closed', () async { | 213 test('Uncaught Call Closed', () async { |
156 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 214 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
157 | 215 |
158 // Do a normal call. | 216 // Do a normal call. |
159 var v = await echo.echoString("foo"); | 217 var c = new Completer(); |
160 expect(v.value, equals("foo")); | 218 echo.echoString("foo", (String value) { |
| 219 c.complete(value); |
| 220 }); |
| 221 expect(await echo.responseOrError(c.future), equals("foo")); |
161 | 222 |
162 // Close the proxy. | 223 // Close the proxy. |
163 await echo.close(); | 224 await echo.close(); |
164 | 225 |
165 // Try to do another call, which should not return. | 226 // Try to do another call, which should not return. |
166 echo.echoString("foo").then((_) { | 227 echo.echoString("foo", (_) { |
167 fail('This should be unreachable'); | 228 fail('This should be unreachable'); |
168 }); | 229 }); |
169 }); | 230 }); |
170 | 231 |
171 test('Catch Call Closed', () async { | 232 test('Catch Call Closed', () async { |
172 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 233 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
173 | 234 |
174 // Do a normal call. | 235 // Do a normal call. |
175 var v = await echo.echoString("foo"); | 236 var c = new Completer(); |
176 expect(v.value, equals("foo")); | 237 echo.echoString("foo", (String value) { |
| 238 c.complete(value); |
| 239 }); |
| 240 expect(await echo.responseOrError(c.future), equals("foo")); |
177 | 241 |
178 // Close the proxy. | 242 // Close the proxy. |
179 await echo.close(); | 243 await echo.close(); |
180 | 244 |
181 // Try to do another call, which should fail. | 245 // Try to do another call, which should fail. |
182 bool caughtException = false; | 246 bool caughtException = false; |
| 247 c = new Completer(); |
| 248 echo.echoString("foo", (String value) { |
| 249 fail("unreachable"); |
| 250 }); |
183 try { | 251 try { |
184 v = await echo.responseOrError(echo.echoString("foo")); | 252 await echo.responseOrError(c.future); |
185 fail('This should be unreachable'); | 253 fail('This should be unreachable'); |
186 } on ProxyError catch (e) { | 254 } on ProxyError catch (e) { |
187 caughtException = true; | 255 caughtException = true; |
188 } | 256 } |
189 expect(caughtException, isTrue); | 257 expect(caughtException, isTrue); |
190 }); | 258 }); |
191 | 259 |
192 test('Catch Call Sequence Closed Twice', () async { | 260 test('Catch Call Sequence Closed Twice', () async { |
193 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 261 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
194 | 262 |
195 // Do a normal call. | 263 // Do a normal call. |
196 var v = await echo.echoString("foo"); | 264 var c = new Completer(); |
197 expect(v.value, equals("foo")); | 265 echo.echoString("foo", (String value) { |
| 266 c.complete(value); |
| 267 }); |
| 268 expect(await echo.responseOrError(c.future), equals("foo")); |
198 | 269 |
199 // Close the proxy. | 270 // Close the proxy. |
200 await echo.close(); | 271 await echo.close(); |
201 | 272 |
202 // Try to do another call, which should fail. | 273 // Try to do another call, which should fail. |
203 bool caughtException = false; | 274 bool caughtException = false; |
| 275 c = new Completer(); |
| 276 echo.echoString("foo", (String value) { |
| 277 fail("unreachable"); |
| 278 }); |
204 try { | 279 try { |
205 v = await echo.responseOrError(echo.echoString("foo")); | 280 await echo.responseOrError(c.future); |
206 fail('This should be unreachable'); | 281 fail('This should be unreachable'); |
207 } on ProxyError catch (e) { | 282 } on ProxyError catch (e) { |
208 caughtException = true; | 283 caughtException = true; |
209 } | 284 } |
210 expect(caughtException, isTrue); | 285 expect(caughtException, isTrue); |
211 | 286 |
212 // Make sure we can catch an error more than once. | 287 // Try to do another call, which should fail. |
213 caughtException = false; | 288 caughtException = false; |
| 289 c = new Completer(); |
| 290 echo.echoString("foo", (String value) { |
| 291 fail("unreachable"); |
| 292 }); |
214 try { | 293 try { |
215 v = await echo.responseOrError(echo.echoString("foo")); | 294 await echo.responseOrError(c.future); |
216 fail('This should be unreachable'); | 295 fail('This should be unreachable'); |
217 } on ProxyError catch (e) { | 296 } on ProxyError catch (e) { |
218 caughtException = true; | 297 caughtException = true; |
219 } | 298 } |
220 expect(caughtException, isTrue); | 299 expect(caughtException, isTrue); |
221 }); | 300 }); |
222 | 301 |
223 test('Catch Call Parallel Closed Twice', () async { | 302 test('Catch Call Parallel Closed Twice', () async { |
224 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 303 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
225 | 304 |
226 // Do a normal call. | 305 // Do a normal call. |
227 var v = await echo.echoString("foo"); | 306 var c = new Completer(); |
228 expect(v.value, equals("foo")); | 307 echo.echoString("foo", (String value) { |
| 308 c.complete(value); |
| 309 }); |
| 310 expect(await echo.responseOrError(c.future), equals("foo")); |
229 | 311 |
230 // Close the proxy. | 312 // Close the proxy. |
231 await echo.close(); | 313 await echo.close(); |
232 | 314 |
233 // Queue up two calls after the close, and make sure they both fail. | 315 // Queue up two calls after the close, and make sure they both fail. |
234 var f1 = echo.responseOrError(echo.echoString("foo")).then((_) { | 316 var c1 = new Completer(); |
235 fail('This should be unreachable'); | 317 echo.echoString("foo", (String value) { |
| 318 fail("unreachable"); |
| 319 }); |
| 320 var c2 = new Completer(); |
| 321 echo.echoString("foo", (String value) { |
| 322 fail("unreachable"); |
| 323 }); |
| 324 var f1 = echo.responseOrError(c1.future).then((_) { |
| 325 fail("unreachable"); |
236 }, onError: (e) { | 326 }, onError: (e) { |
237 expect(e is ProxyError, isTrue); | 327 expect(e is ProxyError, isTrue); |
238 }); | 328 }); |
239 | 329 var f2 = echo.responseOrError(c2.future).then((_) { |
240 var f2 = echo.responseOrError(echo.echoString("foo")).then((_) { | 330 fail("unreachable"); |
241 fail('This should be unreachable'); | |
242 }, onError: (e) { | 331 }, onError: (e) { |
243 expect(e is ProxyError, isTrue); | 332 expect(e is ProxyError, isTrue); |
244 }); | 333 }); |
245 | 334 |
246 return Future.wait([f1, f2]); | 335 return Future.wait([f1, f2]); |
247 }); | 336 }); |
248 | 337 |
249 test('Unbind, close', () async { | 338 test('Unbind, Rebind, Close', () async { |
250 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 339 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
251 | 340 |
252 var r = await echo.responseOrError(echo.echoString("foo")); | 341 // Do a normal call. |
253 expect(r.value, equals("foo")); | 342 var c = new Completer(); |
| 343 echo.echoString("foo", (String value) { |
| 344 c.complete(value); |
| 345 }); |
| 346 expect(await echo.responseOrError(c.future), equals("foo")); |
254 | 347 |
255 var endpoint = echo.ctrl.unbind(); | 348 var endpoint = echo.ctrl.unbind(); |
| 349 echo.ctrl.bind(endpoint); |
| 350 |
| 351 c = new Completer(); |
| 352 echo.echoString("quit", (String value) { |
| 353 fail("unreachable"); |
| 354 }); |
| 355 try { |
| 356 await echo.responseOrError(c.future); |
| 357 fail("unreachable"); |
| 358 } catch (e) { |
| 359 expect(e is ProxyError, isTrue); |
| 360 } |
| 361 |
256 await echo.close(); | 362 await echo.close(); |
257 endpoint.close(); | |
258 }); | 363 }); |
259 | 364 |
260 test('Unbind, rebind to same', () async { | 365 test('Unbind, rebind to same', () async { |
261 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 366 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
262 | 367 |
263 var r = await echo.responseOrError(echo.echoString("foo")); | 368 // Do a normal call. |
264 expect(r.value, equals("foo")); | 369 var c = new Completer(); |
| 370 echo.echoString("foo", (String value) { |
| 371 c.complete(value); |
| 372 }); |
| 373 expect(await echo.responseOrError(c.future), equals("foo")); |
265 | 374 |
266 var endpoint = echo.ctrl.unbind(); | 375 var endpoint = echo.ctrl.unbind(); |
267 echo.ctrl.bind(endpoint); | 376 echo.ctrl.bind(endpoint); |
268 | 377 |
269 r = await echo.responseOrError(echo.echoString("foo")); | 378 // Do a normal call. |
270 expect(r.value, equals("foo")); | 379 c = new Completer(); |
| 380 echo.echoString("foo", (String value) { |
| 381 c.complete(value); |
| 382 }); |
| 383 expect(await echo.responseOrError(c.future), equals("foo")); |
| 384 |
| 385 c = new Completer(); |
| 386 echo.echoString("quit", (String value) { |
| 387 fail("unreachable"); |
| 388 }); |
| 389 try { |
| 390 await echo.responseOrError(c.future); |
| 391 fail("unreachable"); |
| 392 } catch (e) { |
| 393 expect(e is ProxyError, isTrue); |
| 394 } |
271 | 395 |
272 await echo.close(); | 396 await echo.close(); |
273 }); | 397 }); |
274 | 398 |
275 test('Unbind, rebind to different', () async { | 399 test('Unbind, rebind to different', () async { |
276 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 400 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
277 | 401 |
278 var r = await echo.responseOrError(echo.echoString("foo")); | 402 // Do a normal call. |
279 expect(r.value, equals("foo")); | 403 var c = new Completer(); |
| 404 echo.echoString("foo", (String value) { |
| 405 c.complete(value); |
| 406 }); |
| 407 expect(await echo.responseOrError(c.future), equals("foo")); |
280 | 408 |
281 var endpoint = echo.ctrl.unbind(); | 409 var endpoint = echo.ctrl.unbind(); |
282 var differentEchoProxy = new EchoServiceProxy.fromEndpoint(endpoint); | 410 var differentEchoProxy = new EchoServiceProxy.fromEndpoint(endpoint); |
283 | 411 |
284 r = await differentEchoProxy.responseOrError( | 412 // Do a normal call. |
285 differentEchoProxy.echoString("foo")); | 413 c = new Completer(); |
286 expect(r.value, equals("foo")); | 414 differentEchoProxy.echoString("foo", (String value) { |
| 415 c.complete(value); |
| 416 }); |
| 417 expect(await differentEchoProxy.responseOrError(c.future), equals("foo")); |
287 | 418 |
288 await differentEchoProxy.close(); | 419 await differentEchoProxy.close(); |
289 }); | 420 }); |
290 | 421 |
291 test('Unbind, rebind to different, close original', () async { | 422 test('Unbind, rebind to different, close original', () async { |
292 var echo = EchoService.connectToService(application, "mojo:dart_echo"); | 423 var echo = EchoService.connectToService(application, "mojo:dart_echo"); |
293 | 424 |
294 var r = await echo.responseOrError(echo.echoString("foo")); | 425 // Do a normal call. |
295 expect(r.value, equals("foo")); | 426 var c = new Completer(); |
| 427 echo.echoString("foo", (String value) { |
| 428 c.complete(value); |
| 429 }); |
| 430 expect(await echo.responseOrError(c.future), equals("foo")); |
296 | 431 |
297 var endpoint = echo.ctrl.unbind(); | 432 var endpoint = echo.ctrl.unbind(); |
298 var differentEchoProxy = new EchoServiceProxy.fromEndpoint(endpoint); | 433 var differentEchoProxy = new EchoServiceProxy.fromEndpoint(endpoint); |
299 await echo.close(); | 434 await echo.close(); |
300 | 435 |
301 r = await differentEchoProxy.responseOrError( | 436 // Do a normal call. |
302 differentEchoProxy.echoString("foo")); | 437 c = new Completer(); |
303 expect(r.value, equals("foo")); | 438 differentEchoProxy.echoString("foo", (String value) { |
| 439 c.complete(value); |
| 440 }); |
| 441 expect(await differentEchoProxy.responseOrError(c.future), equals("foo")); |
304 | 442 |
305 await differentEchoProxy.close(); | 443 await differentEchoProxy.close(); |
306 }); | 444 }); |
307 | 445 |
308 test('Mock', () async { | 446 test('Mock', () async { |
309 var echo = new EchoServiceInterface.fromMock(new EchoServiceMock()); | 447 var echo = new EchoServiceInterface.fromMock(new EchoServiceMock()); |
310 | 448 |
311 var r = await echo.echoString("foo"); | 449 var c = new Completer(); |
312 expect(r.value, equals("foo")); | 450 echo.echoString("foo", (String value) { |
| 451 c.complete(value); |
| 452 }); |
| 453 expect(await echo.responseOrError(c.future), equals("foo")); |
313 | 454 |
314 await echo.close(); | 455 await echo.close(); |
315 }); | 456 }); |
316 }); | 457 }); |
317 } | 458 } |
OLD | NEW |