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

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

Issue 800523004: Dart: Simplifies the handle watcher. Various cleanups and bugfixes. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 11 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:mojo_core'; 5 import 'dart:mojo_core';
6 import 'dart:typed_data'; 6 import 'dart:typed_data';
7 7
8 import 'package:mojo/dart/testing/expect.dart'; 8 import 'package:mojo/dart/testing/expect.dart';
9 9
10 10
11 invalidHandleTest() { 11 invalidHandleTest() {
12 RawMojoHandle invalidHandle = new RawMojoHandle(RawMojoHandle.INVALID); 12 RawMojoHandle invalidHandle = new RawMojoHandle(RawMojoHandle.INVALID);
13 13
14 // Close. 14 // Close.
15 MojoResult result = invalidHandle.close(); 15 MojoResult result = invalidHandle.close();
16 Expect.isTrue(result.isInvalidArgument); 16 Expect.isTrue(result.isInvalidArgument);
17 17
18 // Wait. 18 // Wait.
19 result = invalidHandle.wait(MojoHandleSignals.READWRITE, 1000000); 19 result = invalidHandle.wait(MojoHandleSignals.kReadWrite, 1000000);
20 Expect.isTrue(result.isInvalidArgument); 20 Expect.isTrue(result.isInvalidArgument);
21 21
22 int res = RawMojoHandle.waitMany([invalidHandle.h], 22 int res = RawMojoHandle.waitMany([invalidHandle.h],
23 [MojoHandleSignals.READWRITE], 23 [MojoHandleSignals.kReadWrite],
24 RawMojoHandle.DEADLINE_INDEFINITE); 24 RawMojoHandle.DEADLINE_INDEFINITE);
25 Expect.equals(res, MojoResult.kInvalidArgument); 25 Expect.equals(res, MojoResult.kInvalidArgument);
26 26
27 // Message pipe. 27 // Message pipe.
28 MojoMessagePipe pipe = new MojoMessagePipe(); 28 MojoMessagePipe pipe = new MojoMessagePipe();
29 Expect.isNotNull(pipe); 29 Expect.isNotNull(pipe);
30 ByteData bd = new ByteData(10); 30 ByteData bd = new ByteData(10);
31 pipe.endpoints[0].handle.close(); 31 pipe.endpoints[0].handle.close();
32 pipe.endpoints[1].handle.close(); 32 pipe.endpoints[1].handle.close();
33 result = pipe.endpoints[0].write(bd); 33 result = pipe.endpoints[0].write(bd);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 Expect.isNotNull(pipe); 80 Expect.isNotNull(pipe);
81 Expect.isTrue(pipe.status.isOk); 81 Expect.isTrue(pipe.status.isOk);
82 Expect.isNotNull(pipe.endpoints); 82 Expect.isNotNull(pipe.endpoints);
83 83
84 MojoMessagePipeEndpoint end0 = pipe.endpoints[0]; 84 MojoMessagePipeEndpoint end0 = pipe.endpoints[0];
85 MojoMessagePipeEndpoint end1 = pipe.endpoints[1]; 85 MojoMessagePipeEndpoint end1 = pipe.endpoints[1];
86 Expect.isTrue(end0.handle.isValid); 86 Expect.isTrue(end0.handle.isValid);
87 Expect.isTrue(end1.handle.isValid); 87 Expect.isTrue(end1.handle.isValid);
88 88
89 // Not readable, yet. 89 // Not readable, yet.
90 MojoResult result = end0.handle.wait(MojoHandleSignals.READABLE, 0); 90 MojoResult result = end0.handle.wait(MojoHandleSignals.kReadable, 0);
91 Expect.isTrue(result.isDeadlineExceeded); 91 Expect.isTrue(result.isDeadlineExceeded);
92 92
93 // Should be writable. 93 // Should be writable.
94 result = end0.handle.wait(MojoHandleSignals.WRITABLE, 0); 94 result = end0.handle.wait(MojoHandleSignals.kWritable, 0);
95 Expect.isTrue(result.isOk); 95 Expect.isTrue(result.isOk);
96 96
97 // Try to read. 97 // Try to read.
98 ByteData data = new ByteData(10); 98 ByteData data = new ByteData(10);
99 end0.read(data); 99 end0.read(data);
100 Expect.isTrue(end0.status.isShouldWait); 100 Expect.isTrue(end0.status.isShouldWait);
101 101
102 // Write end1. 102 // Write end1.
103 String hello = "hello"; 103 String hello = "hello";
104 ByteData helloData = 104 ByteData helloData =
105 new ByteData.view((new Uint8List.fromList(hello.codeUnits)).buffer); 105 new ByteData.view((new Uint8List.fromList(hello.codeUnits)).buffer);
106 result = end1.write(helloData); 106 result = end1.write(helloData);
107 Expect.isTrue(result.isOk); 107 Expect.isTrue(result.isOk);
108 108
109 // end0 should now be readable. 109 // end0 should now be readable.
110 int res = RawMojoHandle.waitMany([end0.handle.h], 110 int res = RawMojoHandle.waitMany([end0.handle.h],
111 [MojoHandleSignals.READABLE], 111 [MojoHandleSignals.kReadable],
112 RawMojoHandle.DEADLINE_INDEFINITE); 112 RawMojoHandle.DEADLINE_INDEFINITE);
113 Expect.equals(res, MojoResult.kOk); 113 Expect.equals(res, MojoResult.kOk);
114 114
115 // Read from end0. 115 // Read from end0.
116 MojoMessagePipeReadResult readResult = end0.read(data); 116 MojoMessagePipeReadResult readResult = end0.read(data);
117 Expect.isNotNull(readResult); 117 Expect.isNotNull(readResult);
118 Expect.isTrue(readResult.status.isOk); 118 Expect.isTrue(readResult.status.isOk);
119 Expect.equals(readResult.bytesRead, helloData.lengthInBytes); 119 Expect.equals(readResult.bytesRead, helloData.lengthInBytes);
120 Expect.equals(readResult.handlesRead, 0); 120 Expect.equals(readResult.handlesRead, 0);
121 121
122 String hello_result = new String.fromCharCodes( 122 String hello_result = new String.fromCharCodes(
123 data.buffer.asUint8List().sublist(0, readResult.bytesRead).toList()); 123 data.buffer.asUint8List().sublist(0, readResult.bytesRead).toList());
124 Expect.equals(hello_result, "hello"); 124 Expect.equals(hello_result, "hello");
125 125
126 // end0 should no longer be readable. 126 // end0 should no longer be readable.
127 result = end0.handle.wait(MojoHandleSignals.READABLE, 10); 127 result = end0.handle.wait(MojoHandleSignals.kReadable, 10);
128 Expect.isTrue(result.isDeadlineExceeded); 128 Expect.isTrue(result.isDeadlineExceeded);
129 129
130 // Close end0's handle. 130 // Close end0's handle.
131 result = end0.handle.close(); 131 result = end0.handle.close();
132 Expect.isTrue(result.isOk); 132 Expect.isTrue(result.isOk);
133 133
134 // end1 should no longer be readable or writable. 134 // end1 should no longer be readable or writable.
135 result = end1.handle.wait(MojoHandleSignals.READWRITE, 1000); 135 result = end1.handle.wait(MojoHandleSignals.kReadWrite, 1000);
136 Expect.isTrue(result.isFailedPrecondition); 136 Expect.isTrue(result.isFailedPrecondition);
137 137
138 result = end1.handle.close(); 138 result = end1.handle.close();
139 Expect.isTrue(result.isOk); 139 Expect.isTrue(result.isOk);
140 } 140 }
141 141
142 142
143 basicDataPipeTest() { 143 basicDataPipeTest() {
144 MojoDataPipe pipe = new MojoDataPipe(); 144 MojoDataPipe pipe = new MojoDataPipe();
145 Expect.isNotNull(pipe); 145 Expect.isNotNull(pipe);
146 Expect.isTrue(pipe.status.isOk); 146 Expect.isTrue(pipe.status.isOk);
147 Expect.isTrue(pipe.consumer.handle.isValid); 147 Expect.isTrue(pipe.consumer.handle.isValid);
148 Expect.isTrue(pipe.producer.handle.isValid); 148 Expect.isTrue(pipe.producer.handle.isValid);
149 149
150 MojoDataPipeProducer producer = pipe.producer; 150 MojoDataPipeProducer producer = pipe.producer;
151 MojoDataPipeConsumer consumer = pipe.consumer; 151 MojoDataPipeConsumer consumer = pipe.consumer;
152 Expect.isTrue(producer.handle.isValid); 152 Expect.isTrue(producer.handle.isValid);
153 Expect.isTrue(consumer.handle.isValid); 153 Expect.isTrue(consumer.handle.isValid);
154 154
155 // Consumer should not be readable. 155 // Consumer should not be readable.
156 MojoResult result = consumer.handle.wait(MojoHandleSignals.READABLE, 0); 156 MojoResult result = consumer.handle.wait(MojoHandleSignals.kReadable, 0);
157 Expect.isTrue(result.isDeadlineExceeded); 157 Expect.isTrue(result.isDeadlineExceeded);
158 158
159 // Producer should be writable. 159 // Producer should be writable.
160 result = producer.handle.wait(MojoHandleSignals.WRITABLE, 0); 160 result = producer.handle.wait(MojoHandleSignals.kWritable, 0);
161 Expect.isTrue(result.isOk); 161 Expect.isTrue(result.isOk);
162 162
163 // Try to read from consumer. 163 // Try to read from consumer.
164 ByteData buffer = new ByteData(20); 164 ByteData buffer = new ByteData(20);
165 consumer.read(buffer, buffer.lengthInBytes, MojoDataPipeConsumer.FLAG_NONE); 165 consumer.read(buffer, buffer.lengthInBytes, MojoDataPipeConsumer.FLAG_NONE);
166 Expect.isTrue(consumer.status.isShouldWait); 166 Expect.isTrue(consumer.status.isShouldWait);
167 167
168 // Try to begin a two-phase read from consumer. 168 // Try to begin a two-phase read from consumer.
169 ByteData b = consumer.beginRead(20, MojoDataPipeConsumer.FLAG_NONE); 169 ByteData b = consumer.beginRead(20, MojoDataPipeConsumer.FLAG_NONE);
170 Expect.isNull(b); 170 Expect.isNull(b);
171 Expect.isTrue(consumer.status.isShouldWait); 171 Expect.isTrue(consumer.status.isShouldWait);
172 172
173 // Write to producer. 173 // Write to producer.
174 String hello = "hello "; 174 String hello = "hello ";
175 ByteData helloData = 175 ByteData helloData =
176 new ByteData.view((new Uint8List.fromList(hello.codeUnits)).buffer); 176 new ByteData.view((new Uint8List.fromList(hello.codeUnits)).buffer);
177 int written = producer.write( 177 int written = producer.write(
178 helloData, helloData.lengthInBytes, MojoDataPipeProducer.FLAG_NONE); 178 helloData, helloData.lengthInBytes, MojoDataPipeProducer.FLAG_NONE);
179 Expect.isTrue(producer.status.isOk); 179 Expect.isTrue(producer.status.isOk);
180 Expect.equals(written, helloData.lengthInBytes); 180 Expect.equals(written, helloData.lengthInBytes);
181 181
182 // Now that we have written, the consumer should be readable. 182 // Now that we have written, the consumer should be readable.
183 int res = RawMojoHandle.waitMany([consumer.handle.h], 183 int res = RawMojoHandle.waitMany([consumer.handle.h],
184 [MojoHandleSignals.READABLE], 184 [MojoHandleSignals.kReadable],
185 RawMojoHandle.DEADLINE_INDEFINITE); 185 RawMojoHandle.DEADLINE_INDEFINITE);
186 Expect.equals(res, MojoResult.kOk); 186 Expect.equals(res, MojoResult.kOk);
187 187
188 // Do a two-phase write to the producer. 188 // Do a two-phase write to the producer.
189 ByteData twoPhaseWrite = producer.beginWrite( 189 ByteData twoPhaseWrite = producer.beginWrite(
190 20, MojoDataPipeProducer.FLAG_NONE); 190 20, MojoDataPipeProducer.FLAG_NONE);
191 Expect.isTrue(producer.status.isOk); 191 Expect.isTrue(producer.status.isOk);
192 Expect.isNotNull(twoPhaseWrite); 192 Expect.isNotNull(twoPhaseWrite);
193 Expect.isTrue(twoPhaseWrite.lengthInBytes >= 20); 193 Expect.isTrue(twoPhaseWrite.lengthInBytes >= 20);
194 194
195 String world = "world"; 195 String world = "world";
196 twoPhaseWrite.buffer.asUint8List().setAll(0, world.codeUnits); 196 twoPhaseWrite.buffer.asUint8List().setAll(0, world.codeUnits);
197 producer.endWrite(Uint8List.BYTES_PER_ELEMENT * world.codeUnits.length); 197 producer.endWrite(Uint8List.BYTES_PER_ELEMENT * world.codeUnits.length);
198 Expect.isTrue(producer.status.isOk); 198 Expect.isTrue(producer.status.isOk);
199 199
200 // Read one character from consumer. 200 // Read one character from consumer.
201 int read = consumer.read(buffer, 1, MojoDataPipeConsumer.FLAG_NONE); 201 int read = consumer.read(buffer, 1, MojoDataPipeConsumer.FLAG_NONE);
202 Expect.isTrue(consumer.status.isOk); 202 Expect.isTrue(consumer.status.isOk);
203 Expect.equals(read, 1); 203 Expect.equals(read, 1);
204 204
205 // Close the producer. 205 // Close the producer.
206 result = producer.handle.close(); 206 result = producer.handle.close();
207 Expect.isTrue(result.isOk); 207 Expect.isTrue(result.isOk);
208 208
209 // Consumer should still be readable. 209 // Consumer should still be readable.
210 result = consumer.handle.wait(MojoHandleSignals.READABLE, 0); 210 result = consumer.handle.wait(MojoHandleSignals.kReadable, 0);
211 Expect.isTrue(result.isOk); 211 Expect.isTrue(result.isOk);
212 212
213 // Get the number of remaining bytes. 213 // Get the number of remaining bytes.
214 int remaining = consumer.read( 214 int remaining = consumer.read(
215 null, 0, MojoDataPipeConsumer.FLAG_QUERY); 215 null, 0, MojoDataPipeConsumer.FLAG_QUERY);
216 Expect.isTrue(consumer.status.isOk); 216 Expect.isTrue(consumer.status.isOk);
217 Expect.equals(remaining, "hello world".length - 1); 217 Expect.equals(remaining, "hello world".length - 1);
218 218
219 // Do a two-phase read. 219 // Do a two-phase read.
220 ByteData twoPhaseRead = consumer.beginRead( 220 ByteData twoPhaseRead = consumer.beginRead(
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 duplicate = null; 298 duplicate = null;
299 } 299 }
300 300
301 301
302 main() { 302 main() {
303 invalidHandleTest(); 303 invalidHandleTest();
304 basicMessagePipeTest(); 304 basicMessagePipeTest();
305 basicDataPipeTest(); 305 basicDataPipeTest();
306 basicSharedBufferTest(); 306 basicSharedBufferTest();
307 } 307 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698