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

Side by Side Diff: mojo/public/dart/system/tests/core_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 import 'dart:typed_data';
6
7 import 'package:mojo/public/dart/utils/lib/expect.dart';
8 import 'package:mojo/public/dart/system/lib/core.dart';
9 import 'package:mojo/public/dart/system/lib/embedder.dart' as embedder;
10
11 // import '../../tests/expect.dart';
12 // import '../lib/core.dart';
13 // import '../lib/embedder.dart' as embedder;
14
15 invalidHandleTest() {
16 RawMojoHandle invalid_handle = new RawMojoHandle(RawMojoHandle.INVALID);
17
18 // Close.
19 int res = invalid_handle.close();
20 Expect.isTrue(MojoResult.isInvalidArgument(res));
21
22 // Wait.
23 res = invalid_handle.wait(MojoHandleSignals.READWRITE, 1000000);
24 Expect.isTrue(MojoResult.isInvalidArgument(res));
25
26 res = RawMojoHandle.waitMany([invalid_handle.h],
27 [MojoHandleSignals.READWRITE],
28 RawMojoHandle.DEADLINE_INDEFINITE);
29 Expect.isTrue(MojoResult.isInvalidArgument(res));
30
31 // Message pipe.
32 MojoMessagePipe pipe = new MojoMessagePipe();
33 Expect.isNotNull(pipe);
34 ByteData bd = new ByteData(10);
35 pipe.endpoints[0].handle.close();
36 pipe.endpoints[1].handle.close();
37 res = pipe.endpoints[0].write(bd);
38 Expect.isTrue(MojoResult.isInvalidArgument(pipe.endpoints[0].status));
39
40 List read_result = pipe.endpoints[0].read(bd);
41 Expect.isTrue(MojoResult.isInvalidArgument(pipe.endpoints[0].status));
42
43 // Data pipe.
44 MojoDataPipe data_pipe = new MojoDataPipe();
45 Expect.isNotNull(data_pipe);
46 data_pipe.producer.handle.close();
47 data_pipe.consumer.handle.close();
48
49 res = data_pipe.producer.write(bd);
50 Expect.isTrue(MojoResult.isInvalidArgument(data_pipe.producer.status));
51
52 ByteData write_data = data_pipe.producer.beginWrite(10);
53 Expect.isNull(write_data);
54 Expect.isTrue(MojoResult.isInvalidArgument(data_pipe.producer.status));
55 data_pipe.producer.endWrite(10);
56 Expect.isTrue(MojoResult.isInvalidArgument(data_pipe.producer.status));
57
58 int read = data_pipe.consumer.read(bd);
59 Expect.isTrue(MojoResult.isInvalidArgument(data_pipe.consumer.status));
60
61 ByteData read_data = data_pipe.consumer.beginRead(10);
62 Expect.isNull(read_data);
63 Expect.isTrue(MojoResult.isInvalidArgument(data_pipe.consumer.status));
64 data_pipe.consumer.endRead(10);
65 Expect.isTrue(MojoResult.isInvalidArgument(data_pipe.consumer.status));
66
67 // Shared buffer.
68 MojoSharedBuffer shared_buffer = new MojoSharedBuffer.create(10);
69 Expect.isNotNull(shared_buffer);
70 shared_buffer.close();
71 MojoSharedBuffer dup = new MojoSharedBuffer.duplicate(shared_buffer);
72 Expect.isNull(dup);
73
74 shared_buffer = new MojoSharedBuffer.create(10);
75 Expect.isNotNull(shared_buffer);
76 shared_buffer.close();
77 res = shared_buffer.map(0, 10);
78 Expect.isTrue(MojoResult.isInvalidArgument(res));
79 }
80
81
82 basicMessagePipeTest() {
83 MojoMessagePipe pipe = new MojoMessagePipe();
84 Expect.isNotNull(pipe);
85 Expect.isTrue(MojoResult.isOk(pipe.status));
86 Expect.isNotNull(pipe.endpoints);
87
88 MojoMessagePipeEndpoint end0 = pipe.endpoints[0];
89 MojoMessagePipeEndpoint end1 = pipe.endpoints[1];
90 Expect.isTrue(RawMojoHandle.isValid(end0.handle));
91 Expect.isTrue(RawMojoHandle.isValid(end1.handle));
92
93 // Not readable, yet.
94 int res = end0.handle.wait(MojoHandleSignals.READABLE, 0);
95 Expect.isTrue(MojoResult.isDeadlineExceeded(res));
96
97 // Should be writable.
98 res = end0.handle.wait(MojoHandleSignals.WRITABLE, 0);
99 Expect.isTrue(MojoResult.isOk(res));
100
101 // Try to read.
102 ByteData data = new ByteData(10);
103 end0.read(data);
104 Expect.isTrue(MojoResult.isShouldWait(end0.status));
105
106 // Write end1.
107 String hello = "hello";
108 ByteData hello_data =
109 new ByteData.view((new Uint8List.fromList(hello.codeUnits)).buffer);
110 res = end1.write(hello_data);
111 Expect.isTrue(MojoResult.isOk(res));
112
113 // end0 should now be readable.
114 res = RawMojoHandle.waitMany([end0.handle.h],
115 [MojoHandleSignals.READABLE],
116 RawMojoHandle.DEADLINE_INDEFINITE);
117 Expect.isTrue(MojoResult.isOk(res));
118
119 // Read from end0.
120 List read_result = end0.read(data);
121 Expect.isNotNull(read_result);
122 Expect.equals(read_result.length, 3);
123 Expect.isTrue(MojoResult.isOk(read_result[0]));
124 Expect.equals(read_result[1], hello_data.lengthInBytes);
125 Expect.equals(read_result[2], 0);
126
127 String hello_result = new String.fromCharCodes(
128 data.buffer.asUint8List().sublist(0, read_result[1]).toList());
129 Expect.equals(hello_result, "hello");
130
131 // end0 should no longer be readable.
132 res = end0.handle.wait(MojoHandleSignals.READABLE, 10);
133 Expect.isTrue(MojoResult.isDeadlineExceeded(res));
134
135 // Close end0's handle.
136 res = end0.handle.close();
137 Expect.isTrue(MojoResult.isOk(res));
138
139 // end1 should no longer be readable or writable.
140 res = end1.handle.wait(MojoHandleSignals.READWRITE, 1000);
141 Expect.isTrue(MojoResult.isFailedPrecondition(res));
142
143 res = end1.handle.close();
144 Expect.isTrue(MojoResult.isOk(res));
145 }
146
147
148 basicDataPipeTest() {
149 MojoDataPipe pipe = new MojoDataPipe();
150 Expect.isNotNull(pipe);
151 Expect.isTrue(MojoResult.isOk(pipe.status));
152 Expect.notEquals(pipe.consumer.handle, RawMojoHandle.INVALID);
153 Expect.notEquals(pipe.producer.handle, RawMojoHandle.INVALID);
154
155 MojoDataPipeProducer producer = pipe.producer;
156 MojoDataPipeConsumer consumer = pipe.consumer;
157 Expect.notEquals(producer.handle.h, RawMojoHandle.INVALID);
158 Expect.notEquals(consumer.handle.h, RawMojoHandle.INVALID);
159
160 // Consumer should not be readable.
161 int res = consumer.handle.wait(MojoHandleSignals.READABLE, 0);
162 Expect.isTrue(MojoResult.isDeadlineExceeded(res));
163
164 // Producer should be writable.
165 res = producer.handle.wait(MojoHandleSignals.WRITABLE, 0);
166 Expect.isTrue(MojoResult.isOk(res));
167
168 // Try to read from consumer.
169 ByteData buffer = new ByteData(20);
170 consumer.read(buffer, buffer.lengthInBytes, MojoDataPipeConsumer.FLAG_NONE);
171 Expect.isTrue(MojoResult.isShouldWait(consumer.status));
172
173 // Try to begin a two-phase read from consumer.
174 ByteData b = consumer.beginRead(20, MojoDataPipeConsumer.FLAG_NONE);
175 Expect.isNull(b);
176 Expect.isTrue(MojoResult.isShouldWait(consumer.status));
177
178 // Write to producer.
179 String hello = "hello ";
180 ByteData hello_data =
181 new ByteData.view((new Uint8List.fromList(hello.codeUnits)).buffer);
182 int written = producer.write(
183 hello_data, hello_data.lengthInBytes, MojoDataPipeProducer.FLAG_NONE);
184 Expect.isTrue(MojoResult.isOk(producer.status));
185 Expect.equals(written, hello_data.lengthInBytes);
186
187 // Now that we have written, the consumer should be readable.
188 res = RawMojoHandle.waitMany([consumer.handle.h],
189 [MojoHandleSignals.READABLE],
190 RawMojoHandle.DEADLINE_INDEFINITE);
191 Expect.isTrue(MojoResult.isOk(res));
192
193 // Do a two-phase write to the producer.
194 ByteData two_phase_write = producer.beginWrite(
195 20, MojoDataPipeProducer.FLAG_NONE);
196 Expect.isTrue(MojoResult.isOk(producer.status));
197 Expect.isNotNull(two_phase_write);
198 Expect.isTrue(two_phase_write.lengthInBytes >= 20);
199
200 String world = "world";
201 two_phase_write.buffer.asUint8List().setAll(0, world.codeUnits);
202 producer.endWrite(Uint8List.BYTES_PER_ELEMENT * world.codeUnits.length);
203 Expect.isTrue(MojoResult.isOk(producer.status));
204
205 // Read one character from consumer.
206 int read = consumer.read(buffer, 1, MojoDataPipeConsumer.FLAG_NONE);
207 Expect.isTrue(MojoResult.isOk(consumer.status));
208 Expect.equals(read, 1);
209
210 // Close the producer.
211 res = producer.handle.close();
212 Expect.isTrue(MojoResult.isOk(res));
213
214 // Consumer should still be readable.
215 res = consumer.handle.wait(MojoHandleSignals.READABLE, 0);
216 Expect.isTrue(MojoResult.isOk(res));
217
218 // Get the number of remaining bytes.
219 int remaining = consumer.read(
220 null, 0, MojoDataPipeConsumer.FLAG_QUERY);
221 Expect.isTrue(MojoResult.isOk(consumer.status));
222 Expect.equals(remaining, "hello world".length - 1);
223
224 // Do a two-phase read.
225 ByteData two_phase_read = consumer.beginRead(
226 remaining, MojoDataPipeConsumer.FLAG_NONE);
227 Expect.isTrue(MojoResult.isOk(consumer.status));
228 Expect.isNotNull(two_phase_read);
229 Expect.isTrue(two_phase_read.lengthInBytes <= remaining);
230
231 Uint8List uint8_list = buffer.buffer.asUint8List();
232 uint8_list.setAll(1, two_phase_read.buffer.asUint8List());
233 uint8_list = uint8_list.sublist(0, 1 + two_phase_read.lengthInBytes);
234
235 consumer.endRead(two_phase_read.lengthInBytes);
236 Expect.isTrue(MojoResult.isOk(consumer.status));
237
238 String hello_world = new String.fromCharCodes(
239 uint8_list.toList());
240 Expect.equals("hello world", hello_world);
241
242 res = consumer.handle.close();
243 Expect.isTrue(MojoResult.isOk(res));
244 }
245
246
247 basicSharedBufferTest() {
248 MojoSharedBuffer mojo_buffer = new MojoSharedBuffer.create(
249 100, MojoSharedBuffer.CREATE_FLAG_NONE);
250 Expect.isNotNull(mojo_buffer);
251 Expect.isNotNull(mojo_buffer.status);
252 Expect.isTrue(MojoResult.isResult(mojo_buffer.status));
253 Expect.isTrue(MojoResult.isOk(mojo_buffer.status));
254 Expect.isNotNull(mojo_buffer.handle);
255 Expect.isTrue(mojo_buffer.handle is RawMojoHandle);
256 Expect.notEquals(mojo_buffer.handle.h, RawMojoHandle.INVALID);
257
258 mojo_buffer.map(0, 100, MojoSharedBuffer.MAP_FLAG_NONE);
259 Expect.isNotNull(mojo_buffer.status);
260 Expect.isTrue(MojoResult.isResult(mojo_buffer.status));
261 Expect.isTrue(MojoResult.isOk(mojo_buffer.status));
262 Expect.isNotNull(mojo_buffer.mapping);
263 Expect.isTrue(mojo_buffer.mapping is ByteData);
264
265 mojo_buffer.mapping.setInt8(50, 42);
266
267 MojoSharedBuffer duplicate = new MojoSharedBuffer.duplicate(
268 mojo_buffer, MojoSharedBuffer.DUPLICATE_FLAG_NONE);
269 Expect.isNotNull(duplicate);
270 Expect.isNotNull(duplicate.status);
271 Expect.isTrue(MojoResult.isResult(duplicate.status));
272 Expect.isTrue(MojoResult.isOk(duplicate.status));
273 Expect.isTrue(duplicate.handle is RawMojoHandle);
274 Expect.notEquals(duplicate.handle.h, RawMojoHandle.INVALID);
275 Expect.isNotNull(duplicate.mapping);
276 Expect.isTrue(duplicate.mapping is ByteData);
277
278 mojo_buffer.close();
279 mojo_buffer = null;
280
281 duplicate.mapping.setInt8(51, 43);
282
283 duplicate.unmap();
284 Expect.isNotNull(duplicate.status);
285 Expect.isTrue(MojoResult.isResult(duplicate.status));
286 Expect.isTrue(MojoResult.isOk(duplicate.status));
287 Expect.isNull(duplicate.mapping);
288
289 duplicate.map(50, 50, MojoSharedBuffer.MAP_FLAG_NONE);
290 Expect.isNotNull(duplicate.status);
291 Expect.isTrue(MojoResult.isResult(duplicate.status));
292 Expect.isTrue(MojoResult.isOk(duplicate.status));
293 Expect.isNotNull(duplicate.mapping);
294 Expect.isTrue(duplicate.mapping is ByteData);
295
296 Expect.equals(duplicate.mapping.getInt8(0), 42);
297 Expect.equals(duplicate.mapping.getInt8(1), 43);
298
299 duplicate.unmap();
300 Expect.isNotNull(duplicate.status);
301 Expect.isTrue(MojoResult.isResult(duplicate.status));
302 Expect.isTrue(MojoResult.isOk(duplicate.status));
303 Expect.isNull(duplicate.mapping);
304
305 duplicate.close();
306 duplicate = null;
307 }
308
309 main() {
310 embedder.mojoEmbedderInit().then((status) {
311 invalidHandleTest();
312 basicMessagePipeTest();
313 basicDataPipeTest();
314 basicSharedBufferTest();
315 });
316 }
OLDNEW
« no previous file with comments | « mojo/public/dart/system/lib/src/types.dart ('k') | mojo/public/dart/system/tests/event_handler_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698