OLD | NEW |
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:typed_data'; | 5 import 'dart:typed_data'; |
6 import 'dart:mojo.bindings' as bindings; | |
7 import 'dart:mojo.core' as core; | |
8 | 6 |
9 import 'package:mojo/dart/testing/expect.dart'; | 7 import 'package:mojo/dart/testing/expect.dart'; |
| 8 import 'package:mojo/public/dart/bindings.dart' as bindings; |
| 9 import 'package:mojo/public/dart/core.dart' as core; |
10 | 10 |
11 class Bar extends bindings.Struct { | 11 class Bar extends bindings.Struct { |
12 static const int kStructSize = 16; | 12 static const int kStructSize = 16; |
13 static const bindings.StructDataHeader kDefaultStructInfo = | 13 static const bindings.StructDataHeader kDefaultStructInfo = |
14 const bindings.StructDataHeader(kStructSize, 4); | 14 const bindings.StructDataHeader(kStructSize, 4); |
15 | 15 |
16 static final int Type_VERTICAL = 1; | 16 static final int Type_VERTICAL = 1; |
17 static final int Type_HORIZONTAL = Type_VERTICAL + 1; | 17 static final int Type_HORIZONTAL = Type_VERTICAL + 1; |
18 static final int Type_BOTH = Type_HORIZONTAL + 1; | 18 static final int Type_BOTH = Type_HORIZONTAL + 1; |
19 static final int Type_INVALID = Type_BOTH + 1; | 19 static final int Type_INVALID = Type_BOTH + 1; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
54 | 54 |
55 void encode(bindings.Encoder encoder) { | 55 void encode(bindings.Encoder encoder) { |
56 var encoder0 = encoder.getStructEncoderAtOffset(kDefaultStructInfo); | 56 var encoder0 = encoder.getStructEncoderAtOffset(kDefaultStructInfo); |
57 encoder0.encodeUint8(alpha, 8); | 57 encoder0.encodeUint8(alpha, 8); |
58 encoder0.encodeUint8(beta, 9); | 58 encoder0.encodeUint8(beta, 9); |
59 encoder0.encodeUint8(gamma, 10); | 59 encoder0.encodeUint8(gamma, 10); |
60 encoder0.encodeInt32(type, 12); | 60 encoder0.encodeInt32(type, 12); |
61 } | 61 } |
62 } | 62 } |
63 | 63 |
64 | |
65 void testBar() { | 64 void testBar() { |
66 var bar = new Bar(); | 65 var bar = new Bar(); |
67 bar.alpha = 1; | 66 bar.alpha = 1; |
68 bar.beta = 2; | 67 bar.beta = 2; |
69 bar.gamma = 3; | 68 bar.gamma = 3; |
70 bar.type = 0x08070605; | 69 bar.type = 0x08070605; |
71 | 70 |
72 int name = 42; | 71 int name = 42; |
73 var header = new bindings.MessageHeader(name); | 72 var header = new bindings.MessageHeader(name); |
74 var message = bar.serializeWithHeader(header); | 73 var message = bar.serializeWithHeader(header); |
75 | 74 |
76 var expectedMemory = new Uint8List.fromList([ | 75 var expectedMemory = new Uint8List.fromList([ |
77 16, 0, 0, 0, | 76 16, |
78 2, 0, 0, 0, | 77 0, |
79 42, 0, 0, 0, | 78 0, |
80 0, 0, 0, 0, | 79 0, |
81 | 80 2, |
82 16, 0, 0, 0, | 81 0, |
83 4, 0, 0, 0, | 82 0, |
84 | 83 0, |
85 1, 2, 3, 0, | 84 42, |
86 5, 6, 7, 8, | 85 0, |
| 86 0, |
| 87 0, |
| 88 0, |
| 89 0, |
| 90 0, |
| 91 0, |
| 92 16, |
| 93 0, |
| 94 0, |
| 95 0, |
| 96 4, |
| 97 0, |
| 98 0, |
| 99 0, |
| 100 1, |
| 101 2, |
| 102 3, |
| 103 0, |
| 104 5, |
| 105 6, |
| 106 7, |
| 107 8, |
87 ]); | 108 ]); |
88 | 109 |
89 var actualMemory = message.buffer.buffer.asUint8List(); | 110 var actualMemory = message.buffer.buffer.asUint8List(); |
90 Expect.listEquals(expectedMemory, actualMemory); | 111 Expect.listEquals(expectedMemory, actualMemory); |
91 | 112 |
92 var receivedMessage = new bindings.ServiceMessage.fromMessage(message); | 113 var receivedMessage = new bindings.ServiceMessage.fromMessage(message); |
93 | 114 |
94 Expect.equals(receivedMessage.header.size, header.size); | 115 Expect.equals(receivedMessage.header.size, header.size); |
95 Expect.equals(receivedMessage.header.type, header.type); | 116 Expect.equals(receivedMessage.header.type, header.type); |
96 | 117 |
97 var bar2 = Bar.deserialize(receivedMessage.payload); | 118 var bar2 = Bar.deserialize(receivedMessage.payload); |
98 | 119 |
99 Expect.equals(bar.alpha, bar2.alpha); | 120 Expect.equals(bar.alpha, bar2.alpha); |
100 Expect.equals(bar.beta, bar2.beta); | 121 Expect.equals(bar.beta, bar2.beta); |
101 Expect.equals(bar.gamma, bar2.gamma); | 122 Expect.equals(bar.gamma, bar2.gamma); |
102 Expect.equals(bar.type, bar2.type); | 123 Expect.equals(bar.type, bar2.type); |
103 } | 124 } |
104 | 125 |
105 | |
106 class Foo extends bindings.Struct { | 126 class Foo extends bindings.Struct { |
107 static const int kStructSize = 96; | 127 static const int kStructSize = 96; |
108 static const bindings.StructDataHeader kDefaultStructInfo = | 128 static const bindings.StructDataHeader kDefaultStructInfo = |
109 const bindings.StructDataHeader(kStructSize, 15); | 129 const bindings.StructDataHeader(kStructSize, 15); |
110 static final kFooby = "Fooby"; | 130 static final kFooby = "Fooby"; |
111 int x = 0; | 131 int x = 0; |
112 int y = 0; | 132 int y = 0; |
113 bool a = true; | 133 bool a = true; |
114 bool b = false; | 134 bool b = false; |
115 bool c = false; | 135 bool c = false; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 } | 180 } |
161 if (mainDataHeader.version > 6) { | 181 if (mainDataHeader.version > 6) { |
162 result.data = decoder0.decodeUint8Array( | 182 result.data = decoder0.decodeUint8Array( |
163 32, bindings.kArrayNullable, bindings.kUnspecifiedArrayLength); | 183 32, bindings.kArrayNullable, bindings.kUnspecifiedArrayLength); |
164 } | 184 } |
165 if (mainDataHeader.version > 7) { | 185 if (mainDataHeader.version > 7) { |
166 var decoder1 = decoder0.decodePointer(40, true); | 186 var decoder1 = decoder0.decodePointer(40, true); |
167 if (decoder1 == null) { | 187 if (decoder1 == null) { |
168 result.extraBars = null; | 188 result.extraBars = null; |
169 } else { | 189 } else { |
170 var si1 = decoder1.decodeDataHeaderForPointerArray( | 190 var si1 = decoder1 |
171 bindings.kUnspecifiedArrayLength); | 191 .decodeDataHeaderForPointerArray(bindings.kUnspecifiedArrayLength); |
172 result.extraBars = new List<Bar>(si1.numElements); | 192 result.extraBars = new List<Bar>(si1.numElements); |
173 for (int i1 = 0; i1 < si1.numElements; ++i1) { | 193 for (int i1 = 0; i1 < si1.numElements; ++i1) { |
174 var decoder2 = decoder1.decodePointer( | 194 var decoder2 = decoder1.decodePointer( |
175 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, | 195 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, |
176 false); | 196 false); |
177 result.extraBars[i1] = Bar.decode(decoder2); | 197 result.extraBars[i1] = Bar.decode(decoder2); |
178 } | 198 } |
179 } | 199 } |
180 } | 200 } |
181 if (mainDataHeader.version > 8) { | 201 if (mainDataHeader.version > 8) { |
182 result.name = decoder0.decodeString(48, false); | 202 result.name = decoder0.decodeString(48, false); |
183 } | 203 } |
184 if (mainDataHeader.version > 10) { | 204 if (mainDataHeader.version > 10) { |
185 result.inputStreams = decoder0.decodeHandleArray( | 205 result.inputStreams = decoder0.decodeHandleArray( |
186 56, bindings.kArrayNullable, bindings.kUnspecifiedArrayLength); | 206 56, bindings.kArrayNullable, bindings.kUnspecifiedArrayLength); |
187 } | 207 } |
188 if (mainDataHeader.version > 11) { | 208 if (mainDataHeader.version > 11) { |
189 result.outputStreams = decoder0.decodeHandleArray( | 209 result.outputStreams = decoder0.decodeHandleArray( |
190 64, bindings.kArrayNullable, bindings.kUnspecifiedArrayLength); | 210 64, bindings.kArrayNullable, bindings.kUnspecifiedArrayLength); |
191 } | 211 } |
192 if (mainDataHeader.version > 12) { | 212 if (mainDataHeader.version > 12) { |
193 var decoder1 = decoder0.decodePointer(72, true); | 213 var decoder1 = decoder0.decodePointer(72, true); |
194 if (decoder1 == null) { | 214 if (decoder1 == null) { |
195 result.arrayOfArrayOfBools = null; | 215 result.arrayOfArrayOfBools = null; |
196 } else { | 216 } else { |
197 var si1 = decoder1.decodeDataHeaderForPointerArray( | 217 var si1 = decoder1 |
198 bindings.kUnspecifiedArrayLength); | 218 .decodeDataHeaderForPointerArray(bindings.kUnspecifiedArrayLength); |
199 result.arrayOfArrayOfBools = new List<List<bool>>(si1.numElements); | 219 result.arrayOfArrayOfBools = new List<List<bool>>(si1.numElements); |
200 for (int i1 = 0; i1 < si1.numElements; ++i1) { | 220 for (int i1 = 0; i1 < si1.numElements; ++i1) { |
201 result.arrayOfArrayOfBools[i1] = decoder1.decodeBoolArray( | 221 result.arrayOfArrayOfBools[i1] = decoder1.decodeBoolArray( |
202 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, | 222 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, |
203 bindings.kNothingNullable, | 223 bindings.kNothingNullable, bindings.kUnspecifiedArrayLength); |
204 bindings.kUnspecifiedArrayLength); | |
205 } | 224 } |
206 } | 225 } |
207 } | 226 } |
208 if (mainDataHeader.version > 13) { | 227 if (mainDataHeader.version > 13) { |
209 var decoder1 = decoder0.decodePointer(80, true); | 228 var decoder1 = decoder0.decodePointer(80, true); |
210 if (decoder1 == null) { | 229 if (decoder1 == null) { |
211 result.multiArrayOfStrings = null; | 230 result.multiArrayOfStrings = null; |
212 } else { | 231 } else { |
213 var si1 = decoder1.decodeDataHeaderForPointerArray( | 232 var si1 = decoder1 |
214 bindings.kUnspecifiedArrayLength); | 233 .decodeDataHeaderForPointerArray(bindings.kUnspecifiedArrayLength); |
215 result.multiArrayOfStrings = | 234 result.multiArrayOfStrings = |
216 new List<List<List<String>>>(si1.numElements); | 235 new List<List<List<String>>>(si1.numElements); |
217 for (int i1 = 0; i1 < si1.numElements; ++i1) { | 236 for (int i1 = 0; i1 < si1.numElements; ++i1) { |
218 var decoder2 = decoder1.decodePointer( | 237 var decoder2 = decoder1.decodePointer( |
219 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, | 238 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, |
220 false); | 239 false); |
221 { | 240 { |
222 var si2 = decoder2.decodeDataHeaderForPointerArray( | 241 var si2 = decoder2.decodeDataHeaderForPointerArray( |
223 bindings.kUnspecifiedArrayLength); | 242 bindings.kUnspecifiedArrayLength); |
224 result.multiArrayOfStrings[i1] = | 243 result.multiArrayOfStrings[i1] = |
225 new List<List<String>>(si2.numElements); | 244 new List<List<String>>(si2.numElements); |
226 for (int i2 = 0; i2 < si2.numElements; ++i2) { | 245 for (int i2 = 0; i2 < si2.numElements; ++i2) { |
227 var decoder3 = decoder2.decodePointer( | 246 var decoder3 = decoder2.decodePointer( |
228 bindings.ArrayDataHeader.kHeaderSize + | 247 bindings.ArrayDataHeader.kHeaderSize + |
229 bindings.kPointerSize * i2, | 248 bindings.kPointerSize * i2, false); |
230 false); | |
231 { | 249 { |
232 var si3 = decoder3.decodeDataHeaderForPointerArray( | 250 var si3 = decoder3.decodeDataHeaderForPointerArray( |
233 bindings.kUnspecifiedArrayLength); | 251 bindings.kUnspecifiedArrayLength); |
234 result.multiArrayOfStrings[i1][i2] = | 252 result.multiArrayOfStrings[i1][i2] = |
235 new List<String>(si3.numElements); | 253 new List<String>(si3.numElements); |
236 for (int i3 = 0; i3 < si3.numElements; ++i3) { | 254 for (int i3 = 0; i3 < si3.numElements; ++i3) { |
237 var length = bindings.ArrayDataHeader.kHeaderSize + | 255 var length = bindings.ArrayDataHeader.kHeaderSize + |
238 bindings.kPointerSize * i3; | 256 bindings.kPointerSize * i3; |
239 result.multiArrayOfStrings[i1][i2][i3] = | 257 result.multiArrayOfStrings[i1][i2][i3] = |
240 decoder3.decodeString(length, false); | 258 decoder3.decodeString(length, false); |
241 } | 259 } |
242 } | 260 } |
243 } | 261 } |
244 } | 262 } |
245 } | 263 } |
246 } | 264 } |
247 } | 265 } |
248 if (mainDataHeader.version > 14) { | 266 if (mainDataHeader.version > 14) { |
(...skipping 14 matching lines...) Expand all Loading... |
263 encoder0.encodeStruct(bar, 24, true); | 281 encoder0.encodeStruct(bar, 24, true); |
264 encoder0.encodeUint8Array( | 282 encoder0.encodeUint8Array( |
265 data, 32, bindings.kArrayNullable, bindings.kUnspecifiedArrayLength); | 283 data, 32, bindings.kArrayNullable, bindings.kUnspecifiedArrayLength); |
266 | 284 |
267 if (extraBars == null) { | 285 if (extraBars == null) { |
268 encoder0.encodeNullPointer(40, true); | 286 encoder0.encodeNullPointer(40, true); |
269 } else { | 287 } else { |
270 var encoder1 = encoder0.encodePointerArray( | 288 var encoder1 = encoder0.encodePointerArray( |
271 extraBars.length, 40, bindings.kUnspecifiedArrayLength); | 289 extraBars.length, 40, bindings.kUnspecifiedArrayLength); |
272 for (int i0 = 0; i0 < extraBars.length; ++i0) { | 290 for (int i0 = 0; i0 < extraBars.length; ++i0) { |
273 encoder1.encodeStruct( | 291 encoder1.encodeStruct(extraBars[i0], |
274 extraBars[i0], | |
275 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i0, | 292 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i0, |
276 false); | 293 false); |
277 } | 294 } |
278 } | 295 } |
279 | 296 |
280 encoder0.encodeString(name, 48, false); | 297 encoder0.encodeString(name, 48, false); |
281 encoder0.encodeHandleArray(inputStreams, | 298 encoder0.encodeHandleArray(inputStreams, 56, |
282 56, | 299 bindings.kArrayNullable, bindings.kUnspecifiedArrayLength); |
283 bindings.kArrayNullable, | 300 encoder0.encodeHandleArray(outputStreams, 64, bindings.kArrayNullable, |
284 bindings.kUnspecifiedArrayLength); | 301 bindings.kUnspecifiedArrayLength); |
285 encoder0.encodeHandleArray(outputStreams, | |
286 64, | |
287 bindings.kArrayNullable, | |
288 bindings.kUnspecifiedArrayLength); | |
289 | 302 |
290 if (arrayOfArrayOfBools == null) { | 303 if (arrayOfArrayOfBools == null) { |
291 encoder0.encodeNullPointer(72, true); | 304 encoder0.encodeNullPointer(72, true); |
292 } else { | 305 } else { |
293 var encoder1 = encoder0.encodePointerArray( | 306 var encoder1 = encoder0.encodePointerArray( |
294 arrayOfArrayOfBools.length, 72, bindings.kUnspecifiedArrayLength); | 307 arrayOfArrayOfBools.length, 72, bindings.kUnspecifiedArrayLength); |
295 for (int i0 = 0; i0 < arrayOfArrayOfBools.length; ++i0) { | 308 for (int i0 = 0; i0 < arrayOfArrayOfBools.length; ++i0) { |
296 encoder1.encodeBoolArray( | 309 encoder1.encodeBoolArray(arrayOfArrayOfBools[i0], |
297 arrayOfArrayOfBools[i0], | |
298 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i0, | 310 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i0, |
299 bindings.kNothingNullable, | 311 bindings.kNothingNullable, bindings.kUnspecifiedArrayLength); |
300 bindings.kUnspecifiedArrayLength); | |
301 } | 312 } |
302 } | 313 } |
303 | 314 |
304 if (multiArrayOfStrings == null) { | 315 if (multiArrayOfStrings == null) { |
305 encoder0.encodeNullPointer(80, true); | 316 encoder0.encodeNullPointer(80, true); |
306 } else { | 317 } else { |
307 var encoder1 = encoder0.encodePointerArray( | 318 var encoder1 = encoder0.encodePointerArray( |
308 multiArrayOfStrings.length, 80, bindings.kUnspecifiedArrayLength); | 319 multiArrayOfStrings.length, 80, bindings.kUnspecifiedArrayLength); |
309 for (int i0 = 0; i0 < multiArrayOfStrings.length; ++i0) { | 320 for (int i0 = 0; i0 < multiArrayOfStrings.length; ++i0) { |
310 if (multiArrayOfStrings[i0] == null) { | 321 if (multiArrayOfStrings[i0] == null) { |
311 encoder1.encodeNullPointer( | 322 encoder1.encodeNullPointer( |
312 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i0, | 323 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i0, |
313 false); | 324 false); |
314 } else { | 325 } else { |
315 var encoder2 = encoder1.encodePointerArray( | 326 var encoder2 = encoder1.encodePointerArray( |
316 multiArrayOfStrings[i0].length, | 327 multiArrayOfStrings[i0].length, |
317 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i0, | 328 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i0, |
318 bindings.kUnspecifiedArrayLength); | 329 bindings.kUnspecifiedArrayLength); |
319 for (int i1 = 0; i1 < multiArrayOfStrings[i0].length; ++i1) { | 330 for (int i1 = 0; i1 < multiArrayOfStrings[i0].length; ++i1) { |
320 if (multiArrayOfStrings[i0][i1] == null) { | 331 if (multiArrayOfStrings[i0][i1] == null) { |
321 encoder2.encodeNullPointer( | 332 encoder2.encodeNullPointer(bindings.ArrayDataHeader.kHeaderSize + |
322 bindings.ArrayDataHeader.kHeaderSize + | 333 bindings.kPointerSize * i1, false); |
323 bindings.kPointerSize * i1, | |
324 false); | |
325 } else { | 334 } else { |
326 var encoder3 = encoder2.encodePointerArray( | 335 var encoder3 = encoder2.encodePointerArray( |
327 multiArrayOfStrings[i0][i1].length, | 336 multiArrayOfStrings[i0][i1].length, |
328 bindings.ArrayDataHeader.kHeaderSize + | 337 bindings.ArrayDataHeader.kHeaderSize + |
329 bindings.kPointerSize * i1, | 338 bindings.kPointerSize * i1, |
330 bindings.kUnspecifiedArrayLength); | 339 bindings.kUnspecifiedArrayLength); |
331 for (int i2 = 0; i2 < multiArrayOfStrings[i0][i1].length; ++i2) { | 340 for (int i2 = 0; i2 < multiArrayOfStrings[i0][i1].length; ++i2) { |
332 var length = bindings.ArrayDataHeader.kHeaderSize + | 341 var length = bindings.ArrayDataHeader.kHeaderSize + |
333 bindings.kPointerSize * i2; | 342 bindings.kPointerSize * i2; |
334 encoder3.encodeString( | 343 encoder3.encodeString( |
335 multiArrayOfStrings[i0][i1][i2], | 344 multiArrayOfStrings[i0][i1][i2], length, false); |
336 length, | |
337 false); | |
338 } | 345 } |
339 } | 346 } |
340 } | 347 } |
341 } | 348 } |
342 } | 349 } |
343 } | 350 } |
344 | 351 |
345 encoder0.encodeBoolArray(arrayOfBools, | 352 encoder0.encodeBoolArray(arrayOfBools, 88, bindings.kArrayNullable, |
346 88, | 353 bindings.kUnspecifiedArrayLength); |
347 bindings.kArrayNullable, | |
348 bindings.kUnspecifiedArrayLength); | |
349 } | 354 } |
350 } | 355 } |
351 | 356 |
352 | |
353 void testFoo() { | 357 void testFoo() { |
354 var foo = new Foo(); | 358 var foo = new Foo(); |
355 foo.x = 0x212B4D5; | 359 foo.x = 0x212B4D5; |
356 foo.y = 0x16E93; | 360 foo.y = 0x16E93; |
357 foo.a = true; | 361 foo.a = true; |
358 foo.b = false; | 362 foo.b = false; |
359 foo.c = true; | 363 foo.c = true; |
360 foo.bar = new Bar(); | 364 foo.bar = new Bar(); |
361 foo.bar.alpha = 91; | 365 foo.bar.alpha = 91; |
362 foo.bar.beta = 82; | 366 foo.bar.beta = 82; |
363 foo.bar.gamma = 73; | 367 foo.bar.gamma = 73; |
364 foo.data = [ | 368 foo.data = [4, 5, 6, 7, 8,]; |
365 4, 5, 6, 7, 8, | 369 foo.extraBars = [new Bar(), new Bar(), new Bar(),]; |
366 ]; | |
367 foo.extraBars = [ | |
368 new Bar(), new Bar(), new Bar(), | |
369 ]; | |
370 for (int i = 0; i < foo.extraBars.length; ++i) { | 370 for (int i = 0; i < foo.extraBars.length; ++i) { |
371 foo.extraBars[i].alpha = 1 * i; | 371 foo.extraBars[i].alpha = 1 * i; |
372 foo.extraBars[i].beta = 2 * i; | 372 foo.extraBars[i].beta = 2 * i; |
373 foo.extraBars[i].gamma = 3 * i; | 373 foo.extraBars[i].gamma = 3 * i; |
374 } | 374 } |
375 foo.name = "I am a banana"; | 375 foo.name = "I am a banana"; |
376 // This is supposed to be a handle, but we fake it with an integer. | 376 // This is supposed to be a handle, but we fake it with an integer. |
377 foo.source = new core.MojoHandle(23423782); | 377 foo.source = new core.MojoHandle(23423782); |
378 foo.arrayOfArrayOfBools = [ | 378 foo.arrayOfArrayOfBools = [[true], [false, true]]; |
379 [true], [false, true] | 379 foo.arrayOfBools = [true, false, true, false, true, false, true, true]; |
380 ]; | |
381 foo.arrayOfBools = [ | |
382 true, false, true, false, true, false, true, true | |
383 ]; | |
384 | 380 |
385 int name = 31; | 381 int name = 31; |
386 var header = new bindings.MessageHeader(name); | 382 var header = new bindings.MessageHeader(name); |
387 var message = foo.serializeWithHeader(header); | 383 var message = foo.serializeWithHeader(header); |
388 | 384 |
389 var expectedMemory = new Uint8List.fromList([ | 385 var expectedMemory = new Uint8List.fromList([ |
390 /* 0: */ 16, 0, 0, 0, 2, 0, 0, 0, | 386 /* 0: */ 16, |
391 /* 8: */ 31, 0, 0, 0, 0, 0, 0, 0, | 387 0, |
392 /* 16: */ 96, 0, 0, 0, 15, 0, 0, 0, | 388 0, |
393 /* 24: */ 0xD5, 0xB4, 0x12, 0x02, 0x93, 0x6E, 0x01, 0, | 389 0, |
394 /* 32: */ 5, 0, 0, 0, 0, 0, 0, 0, | 390 2, |
395 /* 40: */ 72, 0, 0, 0, 0, 0, 0, 0, | 391 0, |
| 392 0, |
| 393 0, |
| 394 /* 8: */ 31, |
| 395 0, |
| 396 0, |
| 397 0, |
| 398 0, |
| 399 0, |
| 400 0, |
| 401 0, |
| 402 /* 16: */ 96, |
| 403 0, |
| 404 0, |
| 405 0, |
| 406 15, |
| 407 0, |
| 408 0, |
| 409 0, |
| 410 /* 24: */ 0xD5, |
| 411 0xB4, |
| 412 0x12, |
| 413 0x02, |
| 414 0x93, |
| 415 0x6E, |
| 416 0x01, |
| 417 0, |
| 418 /* 32: */ 5, |
| 419 0, |
| 420 0, |
| 421 0, |
| 422 0, |
| 423 0, |
| 424 0, |
| 425 0, |
| 426 /* 40: */ 72, |
| 427 0, |
| 428 0, |
| 429 0, |
| 430 0, |
| 431 0, |
| 432 0, |
| 433 0, |
396 ]); | 434 ]); |
397 | 435 |
398 var allActualMemory = message.buffer.buffer.asUint8List(); | 436 var allActualMemory = message.buffer.buffer.asUint8List(); |
399 var actualMemory = allActualMemory.sublist(0, expectedMemory.length); | 437 var actualMemory = allActualMemory.sublist(0, expectedMemory.length); |
400 Expect.listEquals(expectedMemory, actualMemory); | 438 Expect.listEquals(expectedMemory, actualMemory); |
401 | 439 |
402 var expectedHandles = <core.MojoHandle>[ | 440 var expectedHandles = <core.MojoHandle>[new core.MojoHandle(23423782),]; |
403 new core.MojoHandle(23423782), | |
404 ]; | |
405 | 441 |
406 Expect.listEquals(expectedHandles, message.handles); | 442 Expect.listEquals(expectedHandles, message.handles); |
407 | 443 |
408 var receivedMessage = new bindings.ServiceMessage.fromMessage(message); | 444 var receivedMessage = new bindings.ServiceMessage.fromMessage(message); |
409 | 445 |
410 Expect.equals(receivedMessage.header.size, header.size); | 446 Expect.equals(receivedMessage.header.size, header.size); |
411 Expect.equals(receivedMessage.header.type, header.type); | 447 Expect.equals(receivedMessage.header.type, header.type); |
412 | 448 |
413 var foo2 = Foo.deserialize(receivedMessage.payload); | 449 var foo2 = Foo.deserialize(receivedMessage.payload); |
414 | 450 |
(...skipping 15 matching lines...) Expand all Loading... |
430 Expect.equals(foo.extraBars[i].beta, foo2.extraBars[i].beta); | 466 Expect.equals(foo.extraBars[i].beta, foo2.extraBars[i].beta); |
431 Expect.equals(foo.extraBars[i].gamma, foo2.extraBars[i].gamma); | 467 Expect.equals(foo.extraBars[i].gamma, foo2.extraBars[i].gamma); |
432 Expect.equals(foo.extraBars[i].type, foo2.extraBars[i].type); | 468 Expect.equals(foo.extraBars[i].type, foo2.extraBars[i].type); |
433 } | 469 } |
434 | 470 |
435 Expect.equals(foo.name, foo2.name); | 471 Expect.equals(foo.name, foo2.name); |
436 Expect.equals(foo.source, foo2.source); | 472 Expect.equals(foo.source, foo2.source); |
437 | 473 |
438 Expect.listEquals(foo.arrayOfBools, foo2.arrayOfBools); | 474 Expect.listEquals(foo.arrayOfBools, foo2.arrayOfBools); |
439 for (int i = 0; i < foo2.arrayOfArrayOfBools.length; i++) { | 475 for (int i = 0; i < foo2.arrayOfArrayOfBools.length; i++) { |
440 Expect.listEquals(foo.arrayOfArrayOfBools[i], | 476 Expect.listEquals(foo.arrayOfArrayOfBools[i], foo2.arrayOfArrayOfBools[i]); |
441 foo2.arrayOfArrayOfBools[i]); | |
442 } | 477 } |
443 } | 478 } |
444 | 479 |
445 | |
446 class Rect extends bindings.Struct { | 480 class Rect extends bindings.Struct { |
447 static const int kStructSize = 24; | 481 static const int kStructSize = 24; |
448 static const bindings.StructDataHeader kDefaultStructInfo = | 482 static const bindings.StructDataHeader kDefaultStructInfo = |
449 const bindings.StructDataHeader(kStructSize, 4); | 483 const bindings.StructDataHeader(kStructSize, 4); |
450 int x; | 484 int x; |
451 int y; | 485 int y; |
452 int width; | 486 int width; |
453 int height; | 487 int height; |
454 | 488 |
455 Rect() : super(kStructSize); | 489 Rect() : super(kStructSize); |
(...skipping 24 matching lines...) Expand all Loading... |
480 } | 514 } |
481 | 515 |
482 void encode(bindings.Encoder encoder) { | 516 void encode(bindings.Encoder encoder) { |
483 var encoder0 = encoder.getStructEncoderAtOffset(kDefaultStructInfo); | 517 var encoder0 = encoder.getStructEncoderAtOffset(kDefaultStructInfo); |
484 encoder0.encodeInt32(x, 8); | 518 encoder0.encodeInt32(x, 8); |
485 encoder0.encodeInt32(y, 12); | 519 encoder0.encodeInt32(y, 12); |
486 encoder0.encodeInt32(width, 16); | 520 encoder0.encodeInt32(width, 16); |
487 encoder0.encodeInt32(height, 20); | 521 encoder0.encodeInt32(height, 20); |
488 } | 522 } |
489 | 523 |
490 bool operator==(Rect other) => | 524 bool operator ==(Rect other) => (this.x == other.x) && |
491 (this.x == other.x) && | |
492 (this.y == other.y) && | 525 (this.y == other.y) && |
493 (this.width == other.width) && | 526 (this.width == other.width) && |
494 (this.height == other.height); | 527 (this.height == other.height); |
495 } | 528 } |
496 | 529 |
497 | |
498 Rect createRect(int x, int y, int width, int height) { | 530 Rect createRect(int x, int y, int width, int height) { |
499 var r = new Rect(); | 531 var r = new Rect(); |
500 r.x = x; | 532 r.x = x; |
501 r.y = y; | 533 r.y = y; |
502 r.width = width; | 534 r.width = width; |
503 r.height = height; | 535 r.height = height; |
504 return r; | 536 return r; |
505 } | 537 } |
506 | 538 |
507 | |
508 class NamedRegion extends bindings.Struct { | 539 class NamedRegion extends bindings.Struct { |
509 static const int kStructSize = 24; | 540 static const int kStructSize = 24; |
510 static const bindings.StructDataHeader kDefaultStructInfo = | 541 static const bindings.StructDataHeader kDefaultStructInfo = |
511 const bindings.StructDataHeader(kStructSize, 2); | 542 const bindings.StructDataHeader(kStructSize, 2); |
512 String name; | 543 String name; |
513 List<Rect> rects; | 544 List<Rect> rects; |
514 | 545 |
515 NamedRegion() : super(kStructSize); | 546 NamedRegion() : super(kStructSize); |
516 | 547 |
517 static NamedRegion deserialize(bindings.Message message) { | 548 static NamedRegion deserialize(bindings.Message message) { |
518 return decode(new bindings.Decoder(message)); | 549 return decode(new bindings.Decoder(message)); |
519 } | 550 } |
520 | 551 |
521 static NamedRegion decode(bindings.Decoder decoder0) { | 552 static NamedRegion decode(bindings.Decoder decoder0) { |
522 if (decoder0 == null) { | 553 if (decoder0 == null) { |
523 return null; | 554 return null; |
524 } | 555 } |
525 NamedRegion result = new NamedRegion(); | 556 NamedRegion result = new NamedRegion(); |
526 var mainDataHeader = decoder0.decodeStructDataHeader(); | 557 var mainDataHeader = decoder0.decodeStructDataHeader(); |
527 if (mainDataHeader.version > 0) { | 558 if (mainDataHeader.version > 0) { |
528 result.name = decoder0.decodeString(8, true); | 559 result.name = decoder0.decodeString(8, true); |
529 } | 560 } |
530 if (mainDataHeader.version > 1) { | 561 if (mainDataHeader.version > 1) { |
531 var decoder1 = decoder0.decodePointer(16, true); | 562 var decoder1 = decoder0.decodePointer(16, true); |
532 if (decoder1 == null) { | 563 if (decoder1 == null) { |
533 result.rects = null; | 564 result.rects = null; |
534 } else { | 565 } else { |
535 var si1 = decoder1.decodeDataHeaderForPointerArray( | 566 var si1 = decoder1 |
536 bindings.kUnspecifiedArrayLength); | 567 .decodeDataHeaderForPointerArray(bindings.kUnspecifiedArrayLength); |
537 result.rects = new List<Rect>(si1.numElements); | 568 result.rects = new List<Rect>(si1.numElements); |
538 for (int i1 = 0; i1 < si1.numElements; ++i1) { | 569 for (int i1 = 0; i1 < si1.numElements; ++i1) { |
539 var decoder2 = decoder1.decodePointer( | 570 var decoder2 = decoder1.decodePointer( |
540 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, | 571 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i1, |
541 false); | 572 false); |
542 result.rects[i1] = Rect.decode(decoder2); | 573 result.rects[i1] = Rect.decode(decoder2); |
543 } | 574 } |
544 } | 575 } |
545 } | 576 } |
546 return result; | 577 return result; |
547 } | 578 } |
548 | 579 |
549 void encode(bindings.Encoder encoder) { | 580 void encode(bindings.Encoder encoder) { |
550 var encoder0 = encoder.getStructEncoderAtOffset(kDefaultStructInfo); | 581 var encoder0 = encoder.getStructEncoderAtOffset(kDefaultStructInfo); |
551 encoder0.encodeString(name, 8, true); | 582 encoder0.encodeString(name, 8, true); |
552 if (rects == null) { | 583 if (rects == null) { |
553 encoder0.encodeNullPointer(16, true); | 584 encoder0.encodeNullPointer(16, true); |
554 } else { | 585 } else { |
555 var encoder1 = encoder0.encodePointerArray( | 586 var encoder1 = encoder0.encodePointerArray( |
556 rects.length, 16, bindings.kUnspecifiedArrayLength); | 587 rects.length, 16, bindings.kUnspecifiedArrayLength); |
557 for (int i0 = 0; i0 < rects.length; ++i0) { | 588 for (int i0 = 0; i0 < rects.length; ++i0) { |
558 encoder1.encodeStruct( | 589 encoder1.encodeStruct(rects[i0], |
559 rects[i0], | |
560 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i0, | 590 bindings.ArrayDataHeader.kHeaderSize + bindings.kPointerSize * i0, |
561 false); | 591 false); |
562 } | 592 } |
563 } | 593 } |
564 } | 594 } |
565 } | 595 } |
566 | 596 |
567 | |
568 testNamedRegion() { | 597 testNamedRegion() { |
569 var r = new NamedRegion(); | 598 var r = new NamedRegion(); |
570 r.name = "rectangle"; | 599 r.name = "rectangle"; |
571 r.rects = [createRect(1, 2, 3, 4), createRect(10, 20, 30, 40)]; | 600 r.rects = [createRect(1, 2, 3, 4), createRect(10, 20, 30, 40)]; |
572 | 601 |
573 int name = 1; | 602 int name = 1; |
574 var header = new bindings.MessageHeader(name); | 603 var header = new bindings.MessageHeader(name); |
575 var message = r.serializeWithHeader(header); | 604 var message = r.serializeWithHeader(header); |
576 var resultMessage = new bindings.ServiceMessage.fromMessage(message); | 605 var resultMessage = new bindings.ServiceMessage.fromMessage(message); |
577 var result = NamedRegion.deserialize(resultMessage.payload); | 606 var result = NamedRegion.deserialize(resultMessage.payload); |
578 | 607 |
579 Expect.equals("rectangle", result.name); | 608 Expect.equals("rectangle", result.name); |
580 Expect.equals(createRect(1, 2, 3, 4), result.rects[0]); | 609 Expect.equals(createRect(1, 2, 3, 4), result.rects[0]); |
581 Expect.equals(createRect(10, 20, 30, 40), result.rects[1]); | 610 Expect.equals(createRect(10, 20, 30, 40), result.rects[1]); |
582 } | 611 } |
583 | 612 |
584 | |
585 void testAlign() { | 613 void testAlign() { |
586 List aligned = [ | 614 List aligned = [ |
587 0, // 0 | 615 0, // 0 |
588 8, // 1 | 616 8, // 1 |
589 8, // 2 | 617 8, // 2 |
590 8, // 3 | 618 8, // 3 |
591 8, // 4 | 619 8, // 4 |
592 8, // 5 | 620 8, // 5 |
593 8, // 6 | 621 8, // 6 |
594 8, // 7 | 622 8, // 7 |
595 8, // 8 | 623 8, // 8 |
596 16, // 9 | 624 16, // 9 |
597 16, // 10 | 625 16, // 10 |
598 16, // 11 | 626 16, // 11 |
599 16, // 12 | 627 16, // 12 |
600 16, // 13 | 628 16, // 13 |
601 16, // 14 | 629 16, // 14 |
602 16, // 15 | 630 16, // 15 |
603 16, // 16 | 631 16, // 16 |
604 24, // 17 | 632 24, // 17 |
605 24, // 18 | 633 24, // 18 |
606 24, // 19 | 634 24, // 19 |
607 24, // 20 | 635 24, // 20 |
608 ]; | 636 ]; |
609 for (int i = 0; i < aligned.length; ++i) { | 637 for (int i = 0; i < aligned.length; ++i) { |
610 Expect.equals(bindings.align(i), aligned[i]); | 638 Expect.equals(bindings.align(i), aligned[i]); |
611 } | 639 } |
612 } | 640 } |
613 | 641 |
614 | |
615 class MojoString extends bindings.Struct { | 642 class MojoString extends bindings.Struct { |
616 static const int kStructSize = 16; | 643 static const int kStructSize = 16; |
617 static const bindings.StructDataHeader kDefaultStructInfo = | 644 static const bindings.StructDataHeader kDefaultStructInfo = |
618 const bindings.StructDataHeader(kStructSize, 1); | 645 const bindings.StructDataHeader(kStructSize, 1); |
619 String string; | 646 String string; |
620 MojoString() : super(kStructSize); | 647 MojoString() : super(kStructSize); |
621 | 648 |
622 static MojoString deserialize(bindings.Message message) { | 649 static MojoString deserialize(bindings.Message message) { |
623 return decode(new bindings.Decoder(message)); | 650 return decode(new bindings.Decoder(message)); |
624 } | 651 } |
625 | 652 |
626 static MojoString decode(bindings.Decoder decoder0) { | 653 static MojoString decode(bindings.Decoder decoder0) { |
627 if (decoder0 == null) { | 654 if (decoder0 == null) { |
628 return null; | 655 return null; |
629 } | 656 } |
630 MojoString result = new MojoString(); | 657 MojoString result = new MojoString(); |
631 var mainDataHeader = decoder0.decodeStructDataHeader(); | 658 var mainDataHeader = decoder0.decodeStructDataHeader(); |
632 result.string = decoder0.decodeString(8, false); | 659 result.string = decoder0.decodeString(8, false); |
633 return result; | 660 return result; |
634 } | 661 } |
635 | 662 |
636 void encode(bindings.Encoder encoder) { | 663 void encode(bindings.Encoder encoder) { |
637 var encoder0 = encoder.getStructEncoderAtOffset(kDefaultStructInfo); | 664 var encoder0 = encoder.getStructEncoderAtOffset(kDefaultStructInfo); |
638 encoder0.encodeString(string, 8, false); | 665 encoder0.encodeString(string, 8, false); |
639 } | 666 } |
640 } | 667 } |
641 | 668 |
642 | |
643 testUtf8() { | 669 testUtf8() { |
644 var str = "B\u03ba\u1f79"; // some UCS-2 codepoints. | 670 var str = "B\u03ba\u1f79"; // some UCS-2 codepoints. |
645 var name = 42; | 671 var name = 42; |
646 var payloadSize = 24; | 672 var payloadSize = 24; |
647 | 673 |
648 var mojoString = new MojoString(); | 674 var mojoString = new MojoString(); |
649 mojoString.string = str; | 675 mojoString.string = str; |
650 | 676 |
651 var header = new bindings.MessageHeader(name); | 677 var header = new bindings.MessageHeader(name); |
652 var message = mojoString.serializeWithHeader(header); | 678 var message = mojoString.serializeWithHeader(header); |
653 var resultMessage = new bindings.ServiceMessage.fromMessage(message); | 679 var resultMessage = new bindings.ServiceMessage.fromMessage(message); |
654 var result = MojoString.deserialize(resultMessage.payload); | 680 var result = MojoString.deserialize(resultMessage.payload); |
655 | 681 |
656 var expectedMemory = new Uint8List.fromList([ | 682 var expectedMemory = new Uint8List.fromList([ |
657 /* 0: */ 16, 0, 0, 0, 2, 0, 0, 0, | 683 /* 0: */ 16, |
658 /* 8: */ 42, 0, 0, 0, 0, 0, 0, 0, | 684 0, |
659 /* 16: */ 16, 0, 0, 0, 1, 0, 0, 0, | 685 0, |
660 /* 24: */ 8, 0, 0, 0, 0, 0, 0, 0, | 686 0, |
661 /* 32: */ 14, 0, 0, 0, 6, 0, 0, 0, | 687 2, |
662 /* 40: */ 0x42, 0xCE, 0xBA, 0xE1, 0xBD, 0xB9, 0, 0, | 688 0, |
| 689 0, |
| 690 0, |
| 691 /* 8: */ 42, |
| 692 0, |
| 693 0, |
| 694 0, |
| 695 0, |
| 696 0, |
| 697 0, |
| 698 0, |
| 699 /* 16: */ 16, |
| 700 0, |
| 701 0, |
| 702 0, |
| 703 1, |
| 704 0, |
| 705 0, |
| 706 0, |
| 707 /* 24: */ 8, |
| 708 0, |
| 709 0, |
| 710 0, |
| 711 0, |
| 712 0, |
| 713 0, |
| 714 0, |
| 715 /* 32: */ 14, |
| 716 0, |
| 717 0, |
| 718 0, |
| 719 6, |
| 720 0, |
| 721 0, |
| 722 0, |
| 723 /* 40: */ 0x42, |
| 724 0xCE, |
| 725 0xBA, |
| 726 0xE1, |
| 727 0xBD, |
| 728 0xB9, |
| 729 0, |
| 730 0, |
663 ]); | 731 ]); |
664 var allActualMemory = message.buffer.buffer.asUint8List(); | 732 var allActualMemory = message.buffer.buffer.asUint8List(); |
665 var actualMemory = allActualMemory.sublist(0, expectedMemory.length); | 733 var actualMemory = allActualMemory.sublist(0, expectedMemory.length); |
666 Expect.equals(expectedMemory.length, actualMemory.length); | 734 Expect.equals(expectedMemory.length, actualMemory.length); |
667 Expect.listEquals(expectedMemory, actualMemory); | 735 Expect.listEquals(expectedMemory, actualMemory); |
668 | 736 |
669 Expect.equals(str, result.string); | 737 Expect.equals(str, result.string); |
670 } | 738 } |
671 | 739 |
672 | |
673 main() { | 740 main() { |
674 testAlign(); | 741 testAlign(); |
675 testBar(); | 742 testBar(); |
676 testFoo(); | 743 testFoo(); |
677 testNamedRegion(); | 744 testNamedRegion(); |
678 testUtf8(); | 745 testUtf8(); |
679 } | 746 } |
OLD | NEW |