| 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 |