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