Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(743)

Side by Side Diff: mojo/public/dart/tests/echo_test.dart

Issue 674383002: Initial work on Dart bindings for Mojo. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Merge. Work on templates. Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 // This test mimics the implementation of an interface without relying on
6 // the code generation step.
7
8 import 'dart:async';
9 import 'dart:isolate';
10 import 'dart:typed_data';
11
12 import 'package:mojo/public/dart/utils/lib/expect.dart';
13 import 'package:mojo/public/dart/bindings/lib/bindings.dart' as bindings;
14 import 'package:mojo/public/dart/system/lib/core.dart' as core;
15 import 'package:mojo/public/dart/system/lib/embedder.dart' as embedder;
16
17 // import '../bindings/lib/bindings.dart' as bindings;
18 // import '../system/lib/core.dart' as core;
19 // import '../system/lib/embedder.dart' as embedder;
20
21 const int VALUE = 0;
22
23 class EchoString implements bindings.MojoType<EchoString> {
24 String a = null;
25
26 EchoString();
27
28 static const int encodedSize = bindings.kStructHeaderSize + 8;
29 static EchoString decode(bindings.MojoDecoder decoder) {
30 var val = new EchoString();
31 var num_bytes = decoder.readUint32();
32 var num_fields = decoder.readUint32();
33 val.a = decoder.decodeStruct(bindings.MojoString);
34 return val;
35 }
36 static void encode(bindings.MojoEncoder encoder, EchoString val) {
37 encoder.writeUint32(encodedSize);
38 encoder.writeUint32(1);
39 encoder.encodeStruct(bindings.MojoString, val.a);
40 }
41 }
42
43
44 class EchoStringResponse extends EchoString {
45 static const int encodedSize = EchoString.encodedSize;
46 static var decode = EchoString.decode;
47 static var encode = EchoString.encode;
48 }
49
50
51 const int kEchoString_name = 0;
52 const int kEchoStringResponse_name = 1;
53
54 abstract class EchoInterface extends bindings.Interface {
55 EchoInterface(core.MojoMessagePipeEndpoint endpoint) : super(endpoint);
56
57 Future<EchoStringResponse> echoString(EchoString msg);
58
59 Future<bindings.Message> handleMessage(bindings.MessageReader reader) {
60 var response_message = new Completer();
61 switch (reader.name) {
62 case kEchoString_name:
63 var es = reader.decodeStruct(EchoString);
64 echoString(es).then((response) {
65 buildResponse(response_message,
66 EchoStringResponse,
67 kEchoStringResponse_name,
68 response);
69 });
70 break;
71 default:
72 throw new Exception("Unexpected case");
73 break;
74 }
75 return response_message.future;
76 }
77 }
78
79
80 abstract class EchoCalls {
81 List get send_queue;
82 core.MojoHandle get handle;
83
84 Future<List> enqueueMessage(Type t, int name, Object msg);
85
86 Future<List> echoString(String a) {
87 // compose message.
88 var es = new EchoString();
89 es.a = a;
90 return enqueueMessage(EchoString, kEchoString_name, es);
91 }
92 }
93
94
95 class EchoClient extends bindings.Client with EchoCalls {
96 EchoClient(core.MojoMessagePipeEndpoint endpoint) : super(endpoint);
97
98 void handleResponse(bindings.MessageReader reader) {
99 switch (reader.name) {
100 case kEchoStringResponse_name:
101 var esr = reader.decodeStruct(EchoStringResponse);
102 Completer c = completer_queue.removeAt(0);
103 c.complete(esr);
104 break;
105 default:
106 throw new Exception("Unexpected case");
107 break;
108 }
109 }
110 }
111
112
113 class EchoInterfaceImpl extends EchoInterface {
114 EchoInterfaceImpl(core.MojoMessagePipeEndpoint endpoint) : super(endpoint);
115
116 Future<EchoStringResponse> echoString(EchoString msg) {
117 var response = new EchoStringResponse();
118 response.a = msg.a;
119 return new Future.value(response);
120 }
121 }
122
123
124 void providerIsolate(core.MojoMessagePipeEndpoint endpoint) {
125 var provider = new EchoInterfaceImpl(endpoint);
126 }
127
128
129 main() {
130 embedder.mojoEmbedderInit().then((status) {
131 var pipe = new core.MojoMessagePipe();
132 var client = new EchoClient(pipe.endpoints[0]);
133 Isolate.spawn(providerIsolate, pipe.endpoints[1]).then((_) {
134 int n = 100;
135 for (int i = 0; i < n; i++) {
136 client.echoString("hello").then((response) {
137 Expect.equals("hello", response.a);
138 if (i == (n - 1)) {
139 client.close();
140 }
141 });
142 }
143 });
144 });
145 }
OLDNEW
« no previous file with comments | « mojo/public/dart/tests/bindings_generation_test.dart ('k') | mojo/public/dart/utils/lib/expect.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698