| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:async'; |
| import 'dart:isolate'; |
| import 'dart:mojo_bindings' as bindings; |
| import 'dart:mojo_core' as core; |
| import 'dart:typed_data'; |
| |
| import 'package:mojo/dart/testing/expect.dart'; |
| import 'package:mojo/public/interfaces/bindings/tests/sample_interfaces.mojom.dart' as sample; |
| |
| |
| void providerIsolate(core.MojoMessagePipeEndpoint endpoint) { |
| var provider = new sample.ProviderInterface(endpoint); |
| provider.listen((msg) { |
| if (msg is sample.Provider_EchoString_Params) { |
| var response = new sample.Provider_EchoString_ResponseParams(); |
| response.a = msg.a; |
| return response; |
| } else if (msg is sample.Provider_EchoStrings_Params) { |
| var response = new sample.Provider_EchoStrings_ResponseParams(); |
| response.a = msg.a; |
| response.b = msg.b; |
| return response; |
| } else if (msg is sample.Provider_EchoMessagePipeHandle_Params) { |
| var response = new sample.Provider_EchoMessagePipeHandle_ResponseParams(); |
| response.a = msg.a; |
| return response; |
| } else if (msg is sample.Provider_EchoEnum_Params) { |
| var response = new sample.Provider_EchoEnum_ResponseParams(); |
| response.a = msg.a; |
| return response; |
| } else { |
| throw new Exception("Unexpected message"); |
| } |
| }); |
| } |
| |
| |
| Future<bool> test() { |
| var pipe = new core.MojoMessagePipe(); |
| var client = new sample.ProviderClient(pipe.endpoints[0]); |
| var c = new Completer(); |
| client.open(); |
| Isolate.spawn(providerIsolate, pipe.endpoints[1]).then((_) { |
| client.echoString("hello!").then((echoStringResponse) { |
| Expect.equals("hello!", echoStringResponse.a); |
| }).then((_) { |
| client.echoStrings("hello", "mojo!").then((echoStringsResponse) { |
| Expect.equals("hello", echoStringsResponse.a); |
| Expect.equals("mojo!", echoStringsResponse.b); |
| client.close(); |
| c.complete(true); |
| }); |
| }); |
| }); |
| return c.future; |
| } |
| |
| |
| Future testAwait() async { |
| var pipe = new core.MojoMessagePipe(); |
| var client = new sample.ProviderClient(pipe.endpoints[0]); |
| var isolate = await Isolate.spawn(providerIsolate, pipe.endpoints[1]); |
| |
| client.open(); |
| var echoStringResponse = await client.echoString("hello!"); |
| Expect.equals("hello!", echoStringResponse.a); |
| |
| var echoStringsResponse = await client.echoStrings("hello", "mojo!"); |
| Expect.equals("hello", echoStringsResponse.a); |
| Expect.equals("mojo!", echoStringsResponse.b); |
| |
| client.close(); |
| } |
| |
| |
| main() async { |
| await test(); |
| await testAwait(); |
| } |