Index: mojo/dart/test/sample_service_test.dart |
diff --git a/mojo/dart/test/sample_service_test.dart b/mojo/dart/test/sample_service_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..29eb16b51f91bea4cbfdeefcf3456b5fb6d3822b |
--- /dev/null |
+++ b/mojo/dart/test/sample_service_test.dart |
@@ -0,0 +1,80 @@ |
+// 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 'package:mojo/public/interfaces/bindings/tests/sample_service.mojom.dart' as sample; |
+ |
+class ExpectPortInterfaceImpl implements sample.PortInterface { |
+ String _expected; |
+ ExpectPortInterfaceImpl([this._expected = ""]); |
+ |
+ void postMessage(String messageText, sample.PortClient port) { |
+ assert(messageText == _expected); |
+ port.close(); |
+ } |
+} |
+ |
+class ServiceImpl extends sample.ServiceInterface { |
+ ServiceImpl(core.MojoMessagePipeEndpoint endpoint) : super(endpoint); |
+ |
+ void frobinate(sample.Foo foo, int baz, sample.PortClient portClient) { |
+ var portInterface = new sample.PortInterface.unbound(); |
+ portInterface.delegate = new ExpectPortInterfaceImpl(); |
+ portClient.callPostMessage("frobinated", portInterface); |
+ portInterface.listen(); |
+ callDidFrobinate(42); |
+ portClient.close(); |
+ } |
+ |
+ void getPort(sample.PortInterface portInterface) { |
+ portInterface.delegate = new ExpectPortInterfaceImpl("port"); |
+ portInterface.listen(); |
+ } |
+} |
+ |
+class ServiceClientImpl extends sample.ServiceClientInterface |
+ with sample.ServiceCalls { |
+ Completer completer; |
+ |
+ ServiceClientImpl(core.MojoMessagePipeEndpoint endpoint) : super(endpoint); |
+ |
+ void didFrobinate(int result) { |
+ assert(result == 42); |
+ completer.complete(null); |
+ } |
+ |
+ Future run() { |
+ completer = new Completer(); |
+ |
+ listen(); |
+ var portClient = new sample.PortClient.unbound(); |
+ callGetPort(portClient); |
+ portClient.close(); |
+ |
+ var portInterface = new sample.PortInterface.unbound(); |
+ portInterface.delegate = new ExpectPortInterfaceImpl("frobinated"); |
+ callFrobinate(new sample.Foo(), sample.BazOptions_EXTRA, portInterface); |
+ portInterface.listen(); |
+ return completer.future; |
+ } |
+} |
+ |
+void serviceIsolate(core.MojoMessagePipeEndpoint endpoint) { |
+ var service = new ServiceImpl(endpoint); |
+ service.listen(); |
+} |
+ |
+main() async { |
+ var pipe = new core.MojoMessagePipe(); |
+ var isolate = await Isolate.spawn(serviceIsolate, pipe.endpoints[0]); |
+ |
+ var serviceClient = new ServiceClientImpl(pipe.endpoints[1]); |
+ await serviceClient.run(); |
+ |
+ serviceClient.close(); |
+} |