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

Side by Side Diff: mojo/dart/test/interface_test.dart

Issue 968243003: Dart: Adds optional named arguments for creating bindings. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Binding -> Stub, delegate -> impl Created 5 years, 9 months 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 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 import 'dart:async'; 5 import 'dart:async';
6 import 'dart:isolate'; 6 import 'dart:isolate';
7 import 'dart:typed_data'; 7 import 'dart:typed_data';
8 import 'mojo:bindings' as bindings; 8 import 'mojo:bindings' as bindings;
9 import 'mojo:core' as core; 9 import 'mojo:core' as core;
10 10
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 var encoder0 = encoder.getStructEncoderAtOffset(kDefaultStructInfo); 71 var encoder0 = encoder.getStructEncoderAtOffset(kDefaultStructInfo);
72 encoder0.encodeString(a, 8, false); 72 encoder0.encodeString(a, 8, false);
73 } 73 }
74 } 74 }
75 75
76 76
77 const int kEchoString_name = 0; 77 const int kEchoString_name = 0;
78 const int kEchoStringResponse_name = 1; 78 const int kEchoStringResponse_name = 1;
79 79
80 class EchoStub extends bindings.Stub { 80 class EchoStub extends bindings.Stub {
81 EchoStub(core.MojoMessagePipeEndpoint endpoint) : super(endpoint); 81 EchoStub(core.MojoMessagePipeEndpoint endpoint) :
82 super.fromEndpoint(endpoint);
82 83
83 Future<EchoStringResponse> echoString(EchoString es) { 84 Future<EchoStringResponse> echoString(EchoString es) {
84 var response = new EchoStringResponse(); 85 var response = new EchoStringResponse();
85 response.a = es.a; 86 response.a = es.a;
86 return new Future.value(response); 87 return new Future.value(response);
87 } 88 }
88 89
89 Future<bindings.Message> handleMessage(bindings.ServiceMessage message) { 90 Future<bindings.Message> handleMessage(bindings.ServiceMessage message) {
90 switch (message.header.type) { 91 switch (message.header.type) {
91 case kEchoString_name: 92 case kEchoString_name:
(...skipping 11 matching lines...) Expand all
103 default: 104 default:
104 throw new Exception("Unexpected case"); 105 throw new Exception("Unexpected case");
105 break; 106 break;
106 } 107 }
107 return null; 108 return null;
108 } 109 }
109 } 110 }
110 111
111 112
112 class EchoProxy extends bindings.Proxy { 113 class EchoProxy extends bindings.Proxy {
113 EchoProxy(core.MojoMessagePipeEndpoint endpoint) : super(endpoint); 114 EchoProxy(core.MojoMessagePipeEndpoint endpoint,
115 {bool doListen: true, Function onClosed}) :
116 super.fromEndpoint(endpoint, doListen: doListen, onClosed: onClosed);
114 117
115 Future<EchoStringResponse> echoString(String a) { 118 Future<EchoStringResponse> echoString(String a) {
116 // compose message. 119 // compose message.
117 var es = new EchoString(); 120 var es = new EchoString();
118 es.a = a; 121 es.a = a;
119 return sendMessageWithRequestId( 122 return sendMessageWithRequestId(
120 es, 123 es,
121 kEchoString_name, 124 kEchoString_name,
122 -1, 125 -1,
123 bindings.MessageHeader.kMessageExpectsResponse); 126 bindings.MessageHeader.kMessageExpectsResponse);
124 } 127 }
125 128
126 void handleResponse(bindings.ServiceMessage message) { 129 void handleResponse(bindings.ServiceMessage message) {
127 switch (message.header.type) { 130 switch (message.header.type) {
128 case kEchoStringResponse_name: 131 case kEchoStringResponse_name:
129 var esr = EchoStringResponse.deserialize(message.payload); 132 var esr = EchoStringResponse.deserialize(message.payload);
130 Completer c = completerMap[message.header.requestId]; 133 Completer c = completerMap[message.header.requestId];
131 completerMap[message.header.requestId] = null; 134 completerMap[message.header.requestId] = null;
132 c.complete(esr); 135 c.complete(esr);
133 break; 136 break;
134 default: 137 default:
135 throw new Exception("Unexpected case"); 138 throw new Exception("Unexpected case");
136 break; 139 break;
137 } 140 }
138 } 141 }
139 } 142 }
140 143
141 144
142 void providerIsolate(core.MojoMessagePipeEndpoint endpoint) { 145 void providerIsolate(core.MojoMessagePipeEndpoint endpoint) {
143 var provider = new EchoStub(endpoint); 146 new EchoStub(endpoint);
144 provider.listen();
145 } 147 }
146 148
147 149
148 Future<int> runTest() async { 150 Future<int> runTest() async {
149 var testCompleter = new Completer(); 151 var testCompleter = new Completer();
150 152
151 var pipe = new core.MojoMessagePipe(); 153 var pipe = new core.MojoMessagePipe();
152 var proxy = new EchoProxy(pipe.endpoints[0]); 154 var proxy = new EchoProxy(pipe.endpoints[0]);
153 await Isolate.spawn(providerIsolate, pipe.endpoints[1]); 155 await Isolate.spawn(providerIsolate, pipe.endpoints[1]);
154 156
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 void closingProviderIsolate(core.MojoMessagePipeEndpoint endpoint) { 188 void closingProviderIsolate(core.MojoMessagePipeEndpoint endpoint) {
187 var provider = new EchoStub(endpoint); 189 var provider = new EchoStub(endpoint);
188 provider.close(); 190 provider.close();
189 } 191 }
190 192
191 193
192 Future<bool> runOnClosedTest() async { 194 Future<bool> runOnClosedTest() async {
193 var testCompleter = new Completer(); 195 var testCompleter = new Completer();
194 196
195 var pipe = new core.MojoMessagePipe(); 197 var pipe = new core.MojoMessagePipe();
196 var proxy = new EchoProxy(pipe.endpoints[0]); 198 var proxy = new EchoProxy(pipe.endpoints[0], onClosed: () {
197 await Isolate.spawn(closingProviderIsolate, pipe.endpoints[1]);
198 proxy.listen(onClosed: () {
199 testCompleter.complete(true); 199 testCompleter.complete(true);
200 }); 200 });
201 201 await Isolate.spawn(closingProviderIsolate, pipe.endpoints[1]);
202 return testCompleter.future.timeout( 202 return testCompleter.future.timeout(
203 new Duration(seconds: 1), 203 new Duration(seconds: 1),
204 onTimeout: () => false); 204 onTimeout: () => false);
205 } 205 }
206 206
207 207
208 main() async { 208 main() async {
209 Expect.equals(kEchoesCount, await runTest()); 209 Expect.equals(kEchoesCount, await runTest());
210 await runAwaitTest(); 210 await runAwaitTest();
211 Expect.isTrue(await runOnClosedTest()); 211 Expect.isTrue(await runOnClosedTest());
212 } 212 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698