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

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

Issue 982673002: Dart: Removes need to call listen(). (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Merge and Format 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
« no previous file with comments | « mojo/dart/test/bindings_generation_test.dart ('k') | mojo/dart/test/validation_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 24 matching lines...) Expand all
35 } 35 }
36 return result; 36 return result;
37 } 37 }
38 38
39 void encode(bindings.Encoder encoder) { 39 void encode(bindings.Encoder encoder) {
40 var encoder0 = encoder.getStructEncoderAtOffset(kDefaultStructInfo); 40 var encoder0 = encoder.getStructEncoderAtOffset(kDefaultStructInfo);
41 encoder0.encodeString(a, 8, false); 41 encoder0.encodeString(a, 8, false);
42 } 42 }
43 } 43 }
44 44
45
46 class EchoStringResponse extends bindings.Struct { 45 class EchoStringResponse extends bindings.Struct {
47 static const int kStructSize = 16; 46 static const int kStructSize = 16;
48 static const bindings.StructDataHeader kDefaultStructInfo = 47 static const bindings.StructDataHeader kDefaultStructInfo =
49 const bindings.StructDataHeader(kStructSize, 1); 48 const bindings.StructDataHeader(kStructSize, 1);
50 String a = null; 49 String a = null;
51 50
52 EchoStringResponse() : super(kStructSize); 51 EchoStringResponse() : super(kStructSize);
53 52
54 static EchoStringResponse deserialize(bindings.Message message) { 53 static EchoStringResponse deserialize(bindings.Message message) {
55 return decode(new bindings.Decoder(message)); 54 return decode(new bindings.Decoder(message));
(...skipping 10 matching lines...) Expand all
66 } 65 }
67 return result; 66 return result;
68 } 67 }
69 68
70 void encode(bindings.Encoder encoder) { 69 void encode(bindings.Encoder encoder) {
71 var encoder0 = encoder.getStructEncoderAtOffset(kDefaultStructInfo); 70 var encoder0 = encoder.getStructEncoderAtOffset(kDefaultStructInfo);
72 encoder0.encodeString(a, 8, false); 71 encoder0.encodeString(a, 8, false);
73 } 72 }
74 } 73 }
75 74
76
77 const int kEchoString_name = 0; 75 const int kEchoString_name = 0;
78 const int kEchoStringResponse_name = 1; 76 const int kEchoStringResponse_name = 1;
79 77
80 class EchoStub extends bindings.Stub { 78 class EchoStub extends bindings.Stub {
81 EchoStub(core.MojoMessagePipeEndpoint endpoint) 79 EchoStub(core.MojoMessagePipeEndpoint endpoint)
82 : super.fromEndpoint(endpoint); 80 : super.fromEndpoint(endpoint);
83 81
84 Future<EchoStringResponse> echoString(EchoString es) { 82 Future<EchoStringResponse> echoString(EchoString es) {
85 var response = new EchoStringResponse(); 83 var response = new EchoStringResponse();
86 response.a = es.a; 84 response.a = es.a;
87 return new Future.value(response); 85 return new Future.value(response);
88 } 86 }
89 87
90 Future<bindings.Message> handleMessage(bindings.ServiceMessage message) { 88 Future<bindings.Message> handleMessage(bindings.ServiceMessage message) {
91 switch (message.header.type) { 89 switch (message.header.type) {
92 case kEchoString_name: 90 case kEchoString_name:
93 var es = EchoString.deserialize(message.payload); 91 var es = EchoString.deserialize(message.payload);
94 return echoString(es).then((response) { 92 return echoString(es).then((response) {
95 if (response != null) { 93 if (response != null) {
96 return buildResponseWithId( 94 return buildResponseWithId(response, kEchoStringResponse_name,
97 response,
98 kEchoStringResponse_name,
99 message.header.requestId, 95 message.header.requestId,
100 bindings.MessageHeader.kMessageIsResponse); 96 bindings.MessageHeader.kMessageIsResponse);
101 } 97 }
102 }); 98 });
103 break; 99 break;
104 default: 100 default:
105 throw new Exception("Unexpected case"); 101 throw new Exception("Unexpected case");
106 break; 102 break;
107 } 103 }
108 return null; 104 return null;
109 } 105 }
110 } 106 }
111 107
112
113 class EchoProxy extends bindings.Proxy { 108 class EchoProxy extends bindings.Proxy {
114 EchoProxy(core.MojoMessagePipeEndpoint endpoint, {bool doListen: true, 109 EchoProxy(core.MojoMessagePipeEndpoint endpoint)
115 Function onClosed}) 110 : super.fromEndpoint(endpoint);
116 : super.fromEndpoint(endpoint, doListen: doListen, onClosed: onClosed);
117 111
118 Future<EchoStringResponse> echoString(String a) { 112 Future<EchoStringResponse> echoString(String a) {
119 // compose message. 113 // compose message.
120 var es = new EchoString(); 114 var es = new EchoString();
121 es.a = a; 115 es.a = a;
122 return sendMessageWithRequestId( 116 return sendMessageWithRequestId(es, kEchoString_name, -1,
123 es,
124 kEchoString_name,
125 -1,
126 bindings.MessageHeader.kMessageExpectsResponse); 117 bindings.MessageHeader.kMessageExpectsResponse);
127 } 118 }
128 119
129 void handleResponse(bindings.ServiceMessage message) { 120 void handleResponse(bindings.ServiceMessage message) {
130 switch (message.header.type) { 121 switch (message.header.type) {
131 case kEchoStringResponse_name: 122 case kEchoStringResponse_name:
132 var esr = EchoStringResponse.deserialize(message.payload); 123 var esr = EchoStringResponse.deserialize(message.payload);
133 Completer c = completerMap[message.header.requestId]; 124 Completer c = completerMap[message.header.requestId];
134 completerMap[message.header.requestId] = null; 125 completerMap[message.header.requestId] = null;
135 c.complete(esr); 126 c.complete(esr);
136 break; 127 break;
137 default: 128 default:
138 throw new Exception("Unexpected case"); 129 throw new Exception("Unexpected case");
139 break; 130 break;
140 } 131 }
141 } 132 }
142 } 133 }
143 134
144
145 void providerIsolate(core.MojoMessagePipeEndpoint endpoint) { 135 void providerIsolate(core.MojoMessagePipeEndpoint endpoint) {
146 new EchoStub(endpoint); 136 new EchoStub(endpoint);
147 } 137 }
148 138
149
150 Future<int> runTest() async { 139 Future<int> runTest() async {
151 var testCompleter = new Completer(); 140 var testCompleter = new Completer();
152 141
153 var pipe = new core.MojoMessagePipe(); 142 var pipe = new core.MojoMessagePipe();
154 var proxy = new EchoProxy(pipe.endpoints[0]); 143 var proxy = new EchoProxy(pipe.endpoints[0]);
155 await Isolate.spawn(providerIsolate, pipe.endpoints[1]); 144 await Isolate.spawn(providerIsolate, pipe.endpoints[1]);
156 145
157 int n = kEchoesCount; 146 int n = kEchoesCount;
158 int count = 0; 147 int count = 0;
159 for (int i = 0; i < n; i++) { 148 for (int i = 0; i < n; i++) {
160 proxy.echoString("hello").then((response) { 149 proxy.echoString("hello").then((response) {
161 Expect.equals("hello", response.a); 150 Expect.equals("hello", response.a);
162 count++; 151 count++;
163 if (i == (n - 1)) { 152 if (i == (n - 1)) {
164 proxy.close(); 153 proxy.close();
165 testCompleter.complete(count); 154 testCompleter.complete(count);
166 } 155 }
167 }); 156 });
168 } 157 }
169 158
170 return testCompleter.future; 159 return testCompleter.future;
171 } 160 }
172 161
173
174 Future runAwaitTest() async { 162 Future runAwaitTest() async {
175 var pipe = new core.MojoMessagePipe(); 163 var pipe = new core.MojoMessagePipe();
176 var proxy = new EchoProxy(pipe.endpoints[0]); 164 var proxy = new EchoProxy(pipe.endpoints[0]);
177 await Isolate.spawn(providerIsolate, pipe.endpoints[1]); 165 await Isolate.spawn(providerIsolate, pipe.endpoints[1]);
178 166
179 int n = kEchoesCount; 167 int n = kEchoesCount;
180 for (int i = 0; i < n; i++) { 168 for (int i = 0; i < n; i++) {
181 var response = await proxy.echoString("Hello"); 169 var response = await proxy.echoString("Hello");
182 Expect.equals("Hello", response.a); 170 Expect.equals("Hello", response.a);
183 } 171 }
184 proxy.close(); 172 proxy.close();
185 } 173 }
186 174
187
188 void closingProviderIsolate(core.MojoMessagePipeEndpoint endpoint) { 175 void closingProviderIsolate(core.MojoMessagePipeEndpoint endpoint) {
189 var provider = new EchoStub(endpoint); 176 var provider = new EchoStub(endpoint);
190 provider.close(); 177 provider.close();
191 } 178 }
192 179
193
194 Future<bool> runOnClosedTest() async { 180 Future<bool> runOnClosedTest() async {
195 var testCompleter = new Completer(); 181 var testCompleter = new Completer();
196 182
197 var pipe = new core.MojoMessagePipe(); 183 var pipe = new core.MojoMessagePipe();
198 var proxy = new EchoProxy(pipe.endpoints[0], onClosed: () { 184 var proxy = new EchoProxy(pipe.endpoints[0]);
199 testCompleter.complete(true); 185 proxy.onError = () => testCompleter.complete(true);
200 });
201 await Isolate.spawn(closingProviderIsolate, pipe.endpoints[1]); 186 await Isolate.spawn(closingProviderIsolate, pipe.endpoints[1]);
202 return testCompleter.future.timeout( 187 return testCompleter.future.timeout(new Duration(seconds: 1),
203 new Duration(seconds: 1),
204 onTimeout: () => false); 188 onTimeout: () => false);
205 } 189 }
206 190
207
208 main() async { 191 main() async {
209 Expect.equals(kEchoesCount, await runTest()); 192 Expect.equals(kEchoesCount, await runTest());
210 await runAwaitTest(); 193 await runAwaitTest();
211 Expect.isTrue(await runOnClosedTest()); 194 Expect.isTrue(await runOnClosedTest());
212 } 195 }
OLDNEW
« no previous file with comments | « mojo/dart/test/bindings_generation_test.dart ('k') | mojo/dart/test/validation_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698