| #!mojo mojo:dart_content_handler |
| // Copyright 2016 The Vanadium 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 'expected.dart'; |
| import 'gen/dart-gen/mojom/lib/mojo/v23proxy/tests/end_to_end_test.mojom.dart'; |
| |
| import 'package:mojo/application.dart'; |
| import 'package:mojo/core.dart'; |
| |
| Completer forNoOutArgsPut = new Completer(); |
| |
| class V23ProxyTestImpl implements V23ProxyTest { |
| V23ProxyTestStub _stub; // TODO(alexfandrianto): Do we need to _stub.close()? |
| Application _application; // This isn't needed, is it...? |
| |
| V23ProxyTestImpl(this._application, MojoMessagePipeEndpoint endpoint) { |
| _stub = new V23ProxyTestStub.fromEndpoint(endpoint, this); |
| } |
| |
| @override |
| dynamic simple(int a,[Function responseFactory = null]) { |
| if (a != SimpleRequestA) { |
| throw "expected $SimpleRequestA, but got $a"; |
| } |
| return responseFactory(SimpleResponseValue); |
| } |
| |
| @override |
| dynamic multiArgs(bool a,List<double> b,Map<String, int> c,AStruct d,[Function responseFactory = null]) { |
| if (a != MultiArgsRequestA) { |
| throw "expected $MultiArgsRequestA, but got $a"; |
| } |
| for (int i = 0; i < MultiArgsRequestB.length; i++) { |
| if (b[i] != MultiArgsRequestB[i]) { |
| throw "expected $MultiArgsRequestB, but got $b"; |
| } |
| } |
| MultiArgsRequestC.forEach((String key, int value) { |
| if (c[key] != value) { |
| throw "expected $MultiArgsRequestC, but got $c"; |
| } |
| }); |
| if (d.toString() != MultiArgsRequestD.toString()) {// d is a struct, so we'll just toString both. |
| throw "expected $MultiArgsRequestD, but got $d"; |
| } |
| return responseFactory(MultiArgsResponseX, MultiArgsResponseY); |
| } |
| |
| @override |
| dynamic noOutArgsPut(String storedMsg,[Function responseFactory = null]) { |
| forNoOutArgsPut.complete(storedMsg); |
| return responseFactory(); |
| } |
| |
| @override |
| dynamic fetchMsgFromNoOutArgsPut([Function responseFactory = null]) { |
| Completer completer = new Completer(); |
| |
| new Future.delayed(const Duration(seconds: 1)).then((_) { |
| completer.completeError("timed out waiting for no return message"); |
| }); |
| |
| forNoOutArgsPut.future.then((String answer) { |
| if (!completer.isCompleted) { |
| completer.complete(responseFactory(answer)); |
| } |
| }); |
| return completer.future; |
| } |
| } |
| |
| class EndToEndTestServer extends Application { |
| EndToEndTestServer.fromHandle(MojoHandle handle) : super.fromHandle(handle); |
| |
| @override |
| void acceptConnection(String requestorUrl, String resolvedUrl, |
| ApplicationConnection connection) { |
| connection.provideService(V23ProxyTest.serviceName, |
| (endpoint) => new V23ProxyTestImpl(this, endpoint), |
| description: V23ProxyTestStub.serviceDescription); |
| } |
| } |
| |
| main(List args, Object handleToken) { |
| MojoHandle appHandle = new MojoHandle(handleToken); |
| new EndToEndTestServer.fromHandle(appHandle); |
| } |