OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "include/dart_debugger_api.h" | 5 #include "include/dart_debugger_api.h" |
6 #include "platform/assert.h" | 6 #include "platform/assert.h" |
7 #include "vm/bigint_operations.h" | 7 #include "vm/bigint_operations.h" |
8 #include "vm/class_finalizer.h" | 8 #include "vm/class_finalizer.h" |
9 #include "vm/dart_api_impl.h" | 9 #include "vm/dart_api_impl.h" |
10 #include "vm/dart_api_message.h" | 10 #include "vm/dart_api_message.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 Zone* zone = Isolate::Current()->current_zone(); | 58 Zone* zone = Isolate::Current()->current_zone(); |
59 return zone->Realloc<uint8_t>(ptr, old_size, new_size); | 59 return zone->Realloc<uint8_t>(ptr, old_size, new_size); |
60 } | 60 } |
61 | 61 |
62 | 62 |
63 // Compare two Dart_CObject object graphs rooted in first and | 63 // Compare two Dart_CObject object graphs rooted in first and |
64 // second. The second graph will be destroyed by this operation no matter | 64 // second. The second graph will be destroyed by this operation no matter |
65 // whether the graphs are equal or not. | 65 // whether the graphs are equal or not. |
66 static void CompareDartCObjects(Dart_CObject* first, Dart_CObject* second) { | 66 static void CompareDartCObjects(Dart_CObject* first, Dart_CObject* second) { |
67 // Return immediately if entering a cycle. | 67 // Return immediately if entering a cycle. |
68 if (second->type == Dart_CObject::kNumberOfTypes) return; | 68 if (second->type == Dart_CObject_kNumberOfTypes) return; |
69 | 69 |
70 EXPECT_NE(first, second); | 70 EXPECT_NE(first, second); |
71 EXPECT_EQ(first->type, second->type); | 71 EXPECT_EQ(first->type, second->type); |
72 switch (first->type) { | 72 switch (first->type) { |
73 case Dart_CObject::kNull: | 73 case Dart_CObject_kNull: |
74 // Nothing more to compare. | 74 // Nothing more to compare. |
75 break; | 75 break; |
76 case Dart_CObject::kBool: | 76 case Dart_CObject_kBool: |
77 EXPECT_EQ(first->value.as_bool, second->value.as_bool); | 77 EXPECT_EQ(first->value.as_bool, second->value.as_bool); |
78 break; | 78 break; |
79 case Dart_CObject::kInt32: | 79 case Dart_CObject_kInt32: |
80 EXPECT_EQ(first->value.as_int32, second->value.as_int32); | 80 EXPECT_EQ(first->value.as_int32, second->value.as_int32); |
81 break; | 81 break; |
82 case Dart_CObject::kInt64: | 82 case Dart_CObject_kInt64: |
83 EXPECT_EQ(first->value.as_int64, second->value.as_int64); | 83 EXPECT_EQ(first->value.as_int64, second->value.as_int64); |
84 break; | 84 break; |
85 case Dart_CObject::kBigint: | 85 case Dart_CObject_kBigint: |
86 EXPECT_STREQ(first->value.as_bigint, second->value.as_bigint); | 86 EXPECT_STREQ(first->value.as_bigint, second->value.as_bigint); |
87 break; | 87 break; |
88 case Dart_CObject::kDouble: | 88 case Dart_CObject_kDouble: |
89 EXPECT_EQ(first->value.as_double, second->value.as_double); | 89 EXPECT_EQ(first->value.as_double, second->value.as_double); |
90 break; | 90 break; |
91 case Dart_CObject::kString: | 91 case Dart_CObject_kString: |
92 EXPECT_STREQ(first->value.as_string, second->value.as_string); | 92 EXPECT_STREQ(first->value.as_string, second->value.as_string); |
93 break; | 93 break; |
94 case Dart_CObject::kTypedData: | 94 case Dart_CObject_kTypedData: |
95 EXPECT_EQ(first->value.as_typed_data.length, | 95 EXPECT_EQ(first->value.as_typed_data.length, |
96 second->value.as_typed_data.length); | 96 second->value.as_typed_data.length); |
97 for (int i = 0; i < first->value.as_typed_data.length; i++) { | 97 for (int i = 0; i < first->value.as_typed_data.length; i++) { |
98 EXPECT_EQ(first->value.as_typed_data.values[i], | 98 EXPECT_EQ(first->value.as_typed_data.values[i], |
99 second->value.as_typed_data.values[i]); | 99 second->value.as_typed_data.values[i]); |
100 } | 100 } |
101 break; | 101 break; |
102 case Dart_CObject::kArray: | 102 case Dart_CObject_kArray: |
103 // Use invalid type as a visited marker to avoid infinite | 103 // Use invalid type as a visited marker to avoid infinite |
104 // recursion on graphs with cycles. | 104 // recursion on graphs with cycles. |
105 second->type = Dart_CObject::kNumberOfTypes; | 105 second->type = Dart_CObject_kNumberOfTypes; |
106 EXPECT_EQ(first->value.as_array.length, second->value.as_array.length); | 106 EXPECT_EQ(first->value.as_array.length, second->value.as_array.length); |
107 for (int i = 0; i < first->value.as_array.length; i++) { | 107 for (int i = 0; i < first->value.as_array.length; i++) { |
108 CompareDartCObjects(first->value.as_array.values[i], | 108 CompareDartCObjects(first->value.as_array.values[i], |
109 second->value.as_array.values[i]); | 109 second->value.as_array.values[i]); |
110 } | 110 } |
111 break; | 111 break; |
112 default: | 112 default: |
113 EXPECT(false); | 113 EXPECT(false); |
114 } | 114 } |
115 } | 115 } |
(...skipping 26 matching lines...) Expand all Loading... |
142 SnapshotReader reader(buffer, buffer_len, | 142 SnapshotReader reader(buffer, buffer_len, |
143 Snapshot::kMessage, Isolate::Current()); | 143 Snapshot::kMessage, Isolate::Current()); |
144 const Object& serialized_object = Object::Handle(reader.ReadObject()); | 144 const Object& serialized_object = Object::Handle(reader.ReadObject()); |
145 EXPECT(Equals(null_object, serialized_object)); | 145 EXPECT(Equals(null_object, serialized_object)); |
146 | 146 |
147 // Read object back from the snapshot into a C structure. | 147 // Read object back from the snapshot into a C structure. |
148 ApiNativeScope scope; | 148 ApiNativeScope scope; |
149 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 149 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
150 Dart_CObject* root = api_reader.ReadMessage(); | 150 Dart_CObject* root = api_reader.ReadMessage(); |
151 EXPECT_NOTNULL(root); | 151 EXPECT_NOTNULL(root); |
152 EXPECT_EQ(Dart_CObject::kNull, root->type); | 152 EXPECT_EQ(Dart_CObject_kNull, root->type); |
153 CheckEncodeDecodeMessage(root); | 153 CheckEncodeDecodeMessage(root); |
154 } | 154 } |
155 | 155 |
156 | 156 |
157 TEST_CASE(SerializeSmi1) { | 157 TEST_CASE(SerializeSmi1) { |
158 StackZone zone(Isolate::Current()); | 158 StackZone zone(Isolate::Current()); |
159 | 159 |
160 // Write snapshot with object content. | 160 // Write snapshot with object content. |
161 uint8_t* buffer; | 161 uint8_t* buffer; |
162 MessageWriter writer(&buffer, &zone_allocator); | 162 MessageWriter writer(&buffer, &zone_allocator); |
163 const Smi& smi = Smi::Handle(Smi::New(124)); | 163 const Smi& smi = Smi::Handle(Smi::New(124)); |
164 writer.WriteMessage(smi); | 164 writer.WriteMessage(smi); |
165 intptr_t buffer_len = writer.BytesWritten(); | 165 intptr_t buffer_len = writer.BytesWritten(); |
166 | 166 |
167 // Read object back from the snapshot. | 167 // Read object back from the snapshot. |
168 SnapshotReader reader(buffer, buffer_len, | 168 SnapshotReader reader(buffer, buffer_len, |
169 Snapshot::kMessage, Isolate::Current()); | 169 Snapshot::kMessage, Isolate::Current()); |
170 const Object& serialized_object = Object::Handle(reader.ReadObject()); | 170 const Object& serialized_object = Object::Handle(reader.ReadObject()); |
171 EXPECT(Equals(smi, serialized_object)); | 171 EXPECT(Equals(smi, serialized_object)); |
172 | 172 |
173 // Read object back from the snapshot into a C structure. | 173 // Read object back from the snapshot into a C structure. |
174 ApiNativeScope scope; | 174 ApiNativeScope scope; |
175 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 175 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
176 Dart_CObject* root = api_reader.ReadMessage(); | 176 Dart_CObject* root = api_reader.ReadMessage(); |
177 EXPECT_NOTNULL(root); | 177 EXPECT_NOTNULL(root); |
178 EXPECT_EQ(Dart_CObject::kInt32, root->type); | 178 EXPECT_EQ(Dart_CObject_kInt32, root->type); |
179 EXPECT_EQ(smi.Value(), root->value.as_int32); | 179 EXPECT_EQ(smi.Value(), root->value.as_int32); |
180 CheckEncodeDecodeMessage(root); | 180 CheckEncodeDecodeMessage(root); |
181 } | 181 } |
182 | 182 |
183 | 183 |
184 TEST_CASE(SerializeSmi2) { | 184 TEST_CASE(SerializeSmi2) { |
185 StackZone zone(Isolate::Current()); | 185 StackZone zone(Isolate::Current()); |
186 | 186 |
187 // Write snapshot with object content. | 187 // Write snapshot with object content. |
188 uint8_t* buffer; | 188 uint8_t* buffer; |
189 MessageWriter writer(&buffer, &zone_allocator); | 189 MessageWriter writer(&buffer, &zone_allocator); |
190 const Smi& smi = Smi::Handle(Smi::New(-1)); | 190 const Smi& smi = Smi::Handle(Smi::New(-1)); |
191 writer.WriteMessage(smi); | 191 writer.WriteMessage(smi); |
192 intptr_t buffer_len = writer.BytesWritten(); | 192 intptr_t buffer_len = writer.BytesWritten(); |
193 | 193 |
194 // Read object back from the snapshot. | 194 // Read object back from the snapshot. |
195 SnapshotReader reader(buffer, buffer_len, | 195 SnapshotReader reader(buffer, buffer_len, |
196 Snapshot::kMessage, Isolate::Current()); | 196 Snapshot::kMessage, Isolate::Current()); |
197 const Object& serialized_object = Object::Handle(reader.ReadObject()); | 197 const Object& serialized_object = Object::Handle(reader.ReadObject()); |
198 EXPECT(Equals(smi, serialized_object)); | 198 EXPECT(Equals(smi, serialized_object)); |
199 | 199 |
200 // Read object back from the snapshot into a C structure. | 200 // Read object back from the snapshot into a C structure. |
201 ApiNativeScope scope; | 201 ApiNativeScope scope; |
202 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 202 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
203 Dart_CObject* root = api_reader.ReadMessage(); | 203 Dart_CObject* root = api_reader.ReadMessage(); |
204 EXPECT_NOTNULL(root); | 204 EXPECT_NOTNULL(root); |
205 EXPECT_EQ(Dart_CObject::kInt32, root->type); | 205 EXPECT_EQ(Dart_CObject_kInt32, root->type); |
206 EXPECT_EQ(smi.Value(), root->value.as_int32); | 206 EXPECT_EQ(smi.Value(), root->value.as_int32); |
207 CheckEncodeDecodeMessage(root); | 207 CheckEncodeDecodeMessage(root); |
208 } | 208 } |
209 | 209 |
210 | 210 |
211 Dart_CObject* SerializeAndDeserializeMint(const Mint& mint) { | 211 Dart_CObject* SerializeAndDeserializeMint(const Mint& mint) { |
212 // Write snapshot with object content. | 212 // Write snapshot with object content. |
213 uint8_t* buffer; | 213 uint8_t* buffer; |
214 MessageWriter writer(&buffer, &zone_allocator); | 214 MessageWriter writer(&buffer, &zone_allocator); |
215 writer.WriteMessage(mint); | 215 writer.WriteMessage(mint); |
(...skipping 19 matching lines...) Expand all Loading... |
235 | 235 |
236 Mint& mint = Mint::Handle(); | 236 Mint& mint = Mint::Handle(); |
237 mint ^= Integer::New(value); | 237 mint ^= Integer::New(value); |
238 ApiNativeScope scope; | 238 ApiNativeScope scope; |
239 Dart_CObject* mint_cobject = SerializeAndDeserializeMint(mint); | 239 Dart_CObject* mint_cobject = SerializeAndDeserializeMint(mint); |
240 // On 64-bit platforms mints always require 64-bits as the smi range | 240 // On 64-bit platforms mints always require 64-bits as the smi range |
241 // here covers most of the 64-bit range. On 32-bit platforms the smi | 241 // here covers most of the 64-bit range. On 32-bit platforms the smi |
242 // range covers most of the 32-bit range and values outside that | 242 // range covers most of the 32-bit range and values outside that |
243 // range are also represented as mints. | 243 // range are also represented as mints. |
244 #if defined(ARCH_IS_64_BIT) | 244 #if defined(ARCH_IS_64_BIT) |
245 EXPECT_EQ(Dart_CObject::kInt64, mint_cobject->type); | 245 EXPECT_EQ(Dart_CObject_kInt64, mint_cobject->type); |
246 EXPECT_EQ(value, mint_cobject->value.as_int64); | 246 EXPECT_EQ(value, mint_cobject->value.as_int64); |
247 #else | 247 #else |
248 if (kMinInt32 < value && value < kMaxInt32) { | 248 if (kMinInt32 < value && value < kMaxInt32) { |
249 EXPECT_EQ(Dart_CObject::kInt32, mint_cobject->type); | 249 EXPECT_EQ(Dart_CObject_kInt32, mint_cobject->type); |
250 EXPECT_EQ(value, mint_cobject->value.as_int32); | 250 EXPECT_EQ(value, mint_cobject->value.as_int32); |
251 } else { | 251 } else { |
252 EXPECT_EQ(Dart_CObject::kInt64, mint_cobject->type); | 252 EXPECT_EQ(Dart_CObject_kInt64, mint_cobject->type); |
253 EXPECT_EQ(value, mint_cobject->value.as_int64); | 253 EXPECT_EQ(value, mint_cobject->value.as_int64); |
254 } | 254 } |
255 #endif | 255 #endif |
256 } | 256 } |
257 | 257 |
258 | 258 |
259 TEST_CASE(SerializeMints) { | 259 TEST_CASE(SerializeMints) { |
260 // Min positive mint. | 260 // Min positive mint. |
261 CheckMint(Smi::kMaxValue + 1); | 261 CheckMint(Smi::kMaxValue + 1); |
262 // Min positive mint + 1. | 262 // Min positive mint + 1. |
(...skipping 27 matching lines...) Expand all Loading... |
290 SnapshotReader reader(buffer, buffer_len, | 290 SnapshotReader reader(buffer, buffer_len, |
291 Snapshot::kMessage, Isolate::Current()); | 291 Snapshot::kMessage, Isolate::Current()); |
292 const Object& serialized_object = Object::Handle(reader.ReadObject()); | 292 const Object& serialized_object = Object::Handle(reader.ReadObject()); |
293 EXPECT(Equals(dbl, serialized_object)); | 293 EXPECT(Equals(dbl, serialized_object)); |
294 | 294 |
295 // Read object back from the snapshot into a C structure. | 295 // Read object back from the snapshot into a C structure. |
296 ApiNativeScope scope; | 296 ApiNativeScope scope; |
297 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 297 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
298 Dart_CObject* root = api_reader.ReadMessage(); | 298 Dart_CObject* root = api_reader.ReadMessage(); |
299 EXPECT_NOTNULL(root); | 299 EXPECT_NOTNULL(root); |
300 EXPECT_EQ(Dart_CObject::kDouble, root->type); | 300 EXPECT_EQ(Dart_CObject_kDouble, root->type); |
301 EXPECT_EQ(dbl.value(), root->value.as_double); | 301 EXPECT_EQ(dbl.value(), root->value.as_double); |
302 CheckEncodeDecodeMessage(root); | 302 CheckEncodeDecodeMessage(root); |
303 } | 303 } |
304 | 304 |
305 | 305 |
306 TEST_CASE(SerializeTrue) { | 306 TEST_CASE(SerializeTrue) { |
307 StackZone zone(Isolate::Current()); | 307 StackZone zone(Isolate::Current()); |
308 | 308 |
309 // Write snapshot with true object. | 309 // Write snapshot with true object. |
310 uint8_t* buffer; | 310 uint8_t* buffer; |
311 MessageWriter writer(&buffer, &zone_allocator); | 311 MessageWriter writer(&buffer, &zone_allocator); |
312 const Bool& bl = Bool::True(); | 312 const Bool& bl = Bool::True(); |
313 writer.WriteMessage(bl); | 313 writer.WriteMessage(bl); |
314 intptr_t buffer_len = writer.BytesWritten(); | 314 intptr_t buffer_len = writer.BytesWritten(); |
315 | 315 |
316 // Read object back from the snapshot. | 316 // Read object back from the snapshot. |
317 SnapshotReader reader(buffer, buffer_len, | 317 SnapshotReader reader(buffer, buffer_len, |
318 Snapshot::kMessage, Isolate::Current()); | 318 Snapshot::kMessage, Isolate::Current()); |
319 const Object& serialized_object = Object::Handle(reader.ReadObject()); | 319 const Object& serialized_object = Object::Handle(reader.ReadObject()); |
320 fprintf(stderr, "%s / %s\n", bl.ToCString(), serialized_object.ToCString()); | 320 fprintf(stderr, "%s / %s\n", bl.ToCString(), serialized_object.ToCString()); |
321 | 321 |
322 EXPECT(Equals(bl, serialized_object)); | 322 EXPECT(Equals(bl, serialized_object)); |
323 | 323 |
324 // Read object back from the snapshot into a C structure. | 324 // Read object back from the snapshot into a C structure. |
325 ApiNativeScope scope; | 325 ApiNativeScope scope; |
326 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 326 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
327 Dart_CObject* root = api_reader.ReadMessage(); | 327 Dart_CObject* root = api_reader.ReadMessage(); |
328 EXPECT_NOTNULL(root); | 328 EXPECT_NOTNULL(root); |
329 EXPECT_EQ(Dart_CObject::kBool, root->type); | 329 EXPECT_EQ(Dart_CObject_kBool, root->type); |
330 EXPECT_EQ(true, root->value.as_bool); | 330 EXPECT_EQ(true, root->value.as_bool); |
331 CheckEncodeDecodeMessage(root); | 331 CheckEncodeDecodeMessage(root); |
332 } | 332 } |
333 | 333 |
334 | 334 |
335 TEST_CASE(SerializeFalse) { | 335 TEST_CASE(SerializeFalse) { |
336 StackZone zone(Isolate::Current()); | 336 StackZone zone(Isolate::Current()); |
337 | 337 |
338 // Write snapshot with false object. | 338 // Write snapshot with false object. |
339 uint8_t* buffer; | 339 uint8_t* buffer; |
340 MessageWriter writer(&buffer, &zone_allocator); | 340 MessageWriter writer(&buffer, &zone_allocator); |
341 const Bool& bl = Bool::False(); | 341 const Bool& bl = Bool::False(); |
342 writer.WriteMessage(bl); | 342 writer.WriteMessage(bl); |
343 intptr_t buffer_len = writer.BytesWritten(); | 343 intptr_t buffer_len = writer.BytesWritten(); |
344 | 344 |
345 // Read object back from the snapshot. | 345 // Read object back from the snapshot. |
346 SnapshotReader reader(buffer, buffer_len, | 346 SnapshotReader reader(buffer, buffer_len, |
347 Snapshot::kMessage, Isolate::Current()); | 347 Snapshot::kMessage, Isolate::Current()); |
348 const Object& serialized_object = Object::Handle(reader.ReadObject()); | 348 const Object& serialized_object = Object::Handle(reader.ReadObject()); |
349 EXPECT(Equals(bl, serialized_object)); | 349 EXPECT(Equals(bl, serialized_object)); |
350 | 350 |
351 // Read object back from the snapshot into a C structure. | 351 // Read object back from the snapshot into a C structure. |
352 ApiNativeScope scope; | 352 ApiNativeScope scope; |
353 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 353 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
354 Dart_CObject* root = api_reader.ReadMessage(); | 354 Dart_CObject* root = api_reader.ReadMessage(); |
355 EXPECT_NOTNULL(root); | 355 EXPECT_NOTNULL(root); |
356 EXPECT_EQ(Dart_CObject::kBool, root->type); | 356 EXPECT_EQ(Dart_CObject_kBool, root->type); |
357 EXPECT_EQ(false, root->value.as_bool); | 357 EXPECT_EQ(false, root->value.as_bool); |
358 CheckEncodeDecodeMessage(root); | 358 CheckEncodeDecodeMessage(root); |
359 } | 359 } |
360 | 360 |
361 | 361 |
362 static uword allocator(intptr_t size) { | 362 static uword allocator(intptr_t size) { |
363 return reinterpret_cast<uword>(malloc(size)); | 363 return reinterpret_cast<uword>(malloc(size)); |
364 } | 364 } |
365 | 365 |
366 | 366 |
(...skipping 18 matching lines...) Expand all Loading... |
385 | 385 |
386 EXPECT_STREQ(BigintOperations::ToHexCString(bigint, &allocator), | 386 EXPECT_STREQ(BigintOperations::ToHexCString(bigint, &allocator), |
387 BigintOperations::ToHexCString(obj, &allocator)); | 387 BigintOperations::ToHexCString(obj, &allocator)); |
388 | 388 |
389 // Read object back from the snapshot into a C structure. | 389 // Read object back from the snapshot into a C structure. |
390 ApiNativeScope scope; | 390 ApiNativeScope scope; |
391 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 391 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
392 Dart_CObject* root = api_reader.ReadMessage(); | 392 Dart_CObject* root = api_reader.ReadMessage(); |
393 // Bigint not supported. | 393 // Bigint not supported. |
394 EXPECT_NOTNULL(root); | 394 EXPECT_NOTNULL(root); |
395 EXPECT_EQ(Dart_CObject::kBigint, root->type); | 395 EXPECT_EQ(Dart_CObject_kBigint, root->type); |
396 EXPECT_STREQ("270FFFFFFFFFFFFFD8F0", root->value.as_bigint); | 396 EXPECT_STREQ("270FFFFFFFFFFFFFD8F0", root->value.as_bigint); |
397 CheckEncodeDecodeMessage(root); | 397 CheckEncodeDecodeMessage(root); |
398 } | 398 } |
399 | 399 |
400 | 400 |
401 Dart_CObject* SerializeAndDeserializeBigint(const Bigint& bigint) { | 401 Dart_CObject* SerializeAndDeserializeBigint(const Bigint& bigint) { |
402 // Write snapshot with object content. | 402 // Write snapshot with object content. |
403 uint8_t* buffer; | 403 uint8_t* buffer; |
404 MessageWriter writer(&buffer, &zone_allocator); | 404 MessageWriter writer(&buffer, &zone_allocator); |
405 writer.WriteMessage(bigint); | 405 writer.WriteMessage(bigint); |
(...skipping 21 matching lines...) Expand all Loading... |
427 } | 427 } |
428 | 428 |
429 | 429 |
430 void CheckBigint(const char* bigint_value) { | 430 void CheckBigint(const char* bigint_value) { |
431 StackZone zone(Isolate::Current()); | 431 StackZone zone(Isolate::Current()); |
432 ApiNativeScope scope; | 432 ApiNativeScope scope; |
433 | 433 |
434 Bigint& bigint = Bigint::Handle(); | 434 Bigint& bigint = Bigint::Handle(); |
435 bigint ^= BigintOperations::NewFromCString(bigint_value); | 435 bigint ^= BigintOperations::NewFromCString(bigint_value); |
436 Dart_CObject* bigint_cobject = SerializeAndDeserializeBigint(bigint); | 436 Dart_CObject* bigint_cobject = SerializeAndDeserializeBigint(bigint); |
437 EXPECT_EQ(Dart_CObject::kBigint, bigint_cobject->type); | 437 EXPECT_EQ(Dart_CObject_kBigint, bigint_cobject->type); |
438 if (bigint_value[0] == '0') { | 438 if (bigint_value[0] == '0') { |
439 EXPECT_STREQ(bigint_value + 2, bigint_cobject->value.as_bigint); | 439 EXPECT_STREQ(bigint_value + 2, bigint_cobject->value.as_bigint); |
440 } else { | 440 } else { |
441 EXPECT_EQ('-', bigint_value[0]); | 441 EXPECT_EQ('-', bigint_value[0]); |
442 EXPECT_EQ('-', bigint_cobject->value.as_bigint[0]); | 442 EXPECT_EQ('-', bigint_cobject->value.as_bigint[0]); |
443 EXPECT_STREQ(bigint_value + 3, bigint_cobject->value.as_bigint + 1); | 443 EXPECT_STREQ(bigint_value + 3, bigint_cobject->value.as_bigint + 1); |
444 } | 444 } |
445 } | 445 } |
446 | 446 |
447 | 447 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 SnapshotReader reader(buffer, buffer_len, | 513 SnapshotReader reader(buffer, buffer_len, |
514 Snapshot::kMessage, Isolate::Current()); | 514 Snapshot::kMessage, Isolate::Current()); |
515 String& serialized_str = String::Handle(); | 515 String& serialized_str = String::Handle(); |
516 serialized_str ^= reader.ReadObject(); | 516 serialized_str ^= reader.ReadObject(); |
517 EXPECT(str.Equals(serialized_str)); | 517 EXPECT(str.Equals(serialized_str)); |
518 | 518 |
519 // Read object back from the snapshot into a C structure. | 519 // Read object back from the snapshot into a C structure. |
520 ApiNativeScope scope; | 520 ApiNativeScope scope; |
521 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 521 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
522 Dart_CObject* root = api_reader.ReadMessage(); | 522 Dart_CObject* root = api_reader.ReadMessage(); |
523 EXPECT_EQ(Dart_CObject::kString, root->type); | 523 EXPECT_EQ(Dart_CObject_kString, root->type); |
524 EXPECT_STREQ(cstr, root->value.as_string); | 524 EXPECT_STREQ(cstr, root->value.as_string); |
525 CheckEncodeDecodeMessage(root); | 525 CheckEncodeDecodeMessage(root); |
526 } | 526 } |
527 | 527 |
528 | 528 |
529 TEST_CASE(SerializeString) { | 529 TEST_CASE(SerializeString) { |
530 TestString("This string shall be serialized"); | 530 TestString("This string shall be serialized"); |
531 TestString("æøå"); // This file is UTF-8 encoded. | 531 TestString("æøå"); // This file is UTF-8 encoded. |
532 const char* data = "\x01" | 532 const char* data = "\x01" |
533 "\x7F" | 533 "\x7F" |
(...skipping 27 matching lines...) Expand all Loading... |
561 SnapshotReader reader(buffer, buffer_len, | 561 SnapshotReader reader(buffer, buffer_len, |
562 Snapshot::kMessage, Isolate::Current()); | 562 Snapshot::kMessage, Isolate::Current()); |
563 Array& serialized_array = Array::Handle(); | 563 Array& serialized_array = Array::Handle(); |
564 serialized_array ^= reader.ReadObject(); | 564 serialized_array ^= reader.ReadObject(); |
565 EXPECT(array.Equals(serialized_array)); | 565 EXPECT(array.Equals(serialized_array)); |
566 | 566 |
567 // Read object back from the snapshot into a C structure. | 567 // Read object back from the snapshot into a C structure. |
568 ApiNativeScope scope; | 568 ApiNativeScope scope; |
569 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 569 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
570 Dart_CObject* root = api_reader.ReadMessage(); | 570 Dart_CObject* root = api_reader.ReadMessage(); |
571 EXPECT_EQ(Dart_CObject::kArray, root->type); | 571 EXPECT_EQ(Dart_CObject_kArray, root->type); |
572 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 572 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
573 for (int i = 0; i < kArrayLength; i++) { | 573 for (int i = 0; i < kArrayLength; i++) { |
574 Dart_CObject* element = root->value.as_array.values[i]; | 574 Dart_CObject* element = root->value.as_array.values[i]; |
575 EXPECT_EQ(Dart_CObject::kInt32, element->type); | 575 EXPECT_EQ(Dart_CObject_kInt32, element->type); |
576 EXPECT_EQ(i, element->value.as_int32); | 576 EXPECT_EQ(i, element->value.as_int32); |
577 } | 577 } |
578 CheckEncodeDecodeMessage(root); | 578 CheckEncodeDecodeMessage(root); |
579 } | 579 } |
580 | 580 |
581 | 581 |
582 TEST_CASE(SerializeEmptyArray) { | 582 TEST_CASE(SerializeEmptyArray) { |
583 StackZone zone(Isolate::Current()); | 583 StackZone zone(Isolate::Current()); |
584 | 584 |
585 // Write snapshot with object content. | 585 // Write snapshot with object content. |
586 uint8_t* buffer; | 586 uint8_t* buffer; |
587 MessageWriter writer(&buffer, &zone_allocator); | 587 MessageWriter writer(&buffer, &zone_allocator); |
588 const int kArrayLength = 0; | 588 const int kArrayLength = 0; |
589 Array& array = Array::Handle(Array::New(kArrayLength)); | 589 Array& array = Array::Handle(Array::New(kArrayLength)); |
590 writer.WriteMessage(array); | 590 writer.WriteMessage(array); |
591 intptr_t buffer_len = writer.BytesWritten(); | 591 intptr_t buffer_len = writer.BytesWritten(); |
592 | 592 |
593 // Read object back from the snapshot. | 593 // Read object back from the snapshot. |
594 SnapshotReader reader(buffer, buffer_len, | 594 SnapshotReader reader(buffer, buffer_len, |
595 Snapshot::kMessage, Isolate::Current()); | 595 Snapshot::kMessage, Isolate::Current()); |
596 Array& serialized_array = Array::Handle(); | 596 Array& serialized_array = Array::Handle(); |
597 serialized_array ^= reader.ReadObject(); | 597 serialized_array ^= reader.ReadObject(); |
598 EXPECT(array.Equals(serialized_array)); | 598 EXPECT(array.Equals(serialized_array)); |
599 | 599 |
600 // Read object back from the snapshot into a C structure. | 600 // Read object back from the snapshot into a C structure. |
601 ApiNativeScope scope; | 601 ApiNativeScope scope; |
602 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 602 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
603 Dart_CObject* root = api_reader.ReadMessage(); | 603 Dart_CObject* root = api_reader.ReadMessage(); |
604 EXPECT_EQ(Dart_CObject::kArray, root->type); | 604 EXPECT_EQ(Dart_CObject_kArray, root->type); |
605 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 605 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
606 EXPECT(root->value.as_array.values == NULL); | 606 EXPECT(root->value.as_array.values == NULL); |
607 CheckEncodeDecodeMessage(root); | 607 CheckEncodeDecodeMessage(root); |
608 } | 608 } |
609 | 609 |
610 | 610 |
611 TEST_CASE(SerializeByteArray) { | 611 TEST_CASE(SerializeByteArray) { |
612 StackZone zone(Isolate::Current()); | 612 StackZone zone(Isolate::Current()); |
613 | 613 |
614 // Write snapshot with object content. | 614 // Write snapshot with object content. |
(...skipping 12 matching lines...) Expand all Loading... |
627 SnapshotReader reader(buffer, buffer_len, | 627 SnapshotReader reader(buffer, buffer_len, |
628 Snapshot::kMessage, Isolate::Current()); | 628 Snapshot::kMessage, Isolate::Current()); |
629 TypedData& serialized_typed_data = TypedData::Handle(); | 629 TypedData& serialized_typed_data = TypedData::Handle(); |
630 serialized_typed_data ^= reader.ReadObject(); | 630 serialized_typed_data ^= reader.ReadObject(); |
631 EXPECT(serialized_typed_data.IsTypedData()); | 631 EXPECT(serialized_typed_data.IsTypedData()); |
632 | 632 |
633 // Read object back from the snapshot into a C structure. | 633 // Read object back from the snapshot into a C structure. |
634 ApiNativeScope scope; | 634 ApiNativeScope scope; |
635 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 635 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
636 Dart_CObject* root = api_reader.ReadMessage(); | 636 Dart_CObject* root = api_reader.ReadMessage(); |
637 EXPECT_EQ(Dart_CObject::kTypedData, root->type); | 637 EXPECT_EQ(Dart_CObject_kTypedData, root->type); |
638 EXPECT_EQ(kTypedDataLength, root->value.as_typed_data.length); | 638 EXPECT_EQ(kTypedDataLength, root->value.as_typed_data.length); |
639 for (int i = 0; i < kTypedDataLength; i++) { | 639 for (int i = 0; i < kTypedDataLength; i++) { |
640 EXPECT(root->value.as_typed_data.values[i] == i); | 640 EXPECT(root->value.as_typed_data.values[i] == i); |
641 } | 641 } |
642 CheckEncodeDecodeMessage(root); | 642 CheckEncodeDecodeMessage(root); |
643 } | 643 } |
644 | 644 |
645 | 645 |
646 #define TEST_TYPED_ARRAY(darttype, ctype) \ | 646 #define TEST_TYPED_ARRAY(darttype, ctype) \ |
647 { \ | 647 { \ |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
736 SnapshotReader reader(buffer, buffer_len, | 736 SnapshotReader reader(buffer, buffer_len, |
737 Snapshot::kMessage, Isolate::Current()); | 737 Snapshot::kMessage, Isolate::Current()); |
738 TypedData& serialized_typed_data = TypedData::Handle(); | 738 TypedData& serialized_typed_data = TypedData::Handle(); |
739 serialized_typed_data ^= reader.ReadObject(); | 739 serialized_typed_data ^= reader.ReadObject(); |
740 EXPECT(serialized_typed_data.IsTypedData()); | 740 EXPECT(serialized_typed_data.IsTypedData()); |
741 | 741 |
742 // Read object back from the snapshot into a C structure. | 742 // Read object back from the snapshot into a C structure. |
743 ApiNativeScope scope; | 743 ApiNativeScope scope; |
744 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 744 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
745 Dart_CObject* root = api_reader.ReadMessage(); | 745 Dart_CObject* root = api_reader.ReadMessage(); |
746 EXPECT_EQ(Dart_CObject::kTypedData, root->type); | 746 EXPECT_EQ(Dart_CObject_kTypedData, root->type); |
747 EXPECT_EQ(Dart_CObject::kUint8Array, root->value.as_typed_data.type); | 747 EXPECT_EQ(Dart_TypedData_kUint8, root->value.as_typed_data.type); |
748 EXPECT_EQ(kTypedDataLength, root->value.as_typed_data.length); | 748 EXPECT_EQ(kTypedDataLength, root->value.as_typed_data.length); |
749 EXPECT(root->value.as_typed_data.values == NULL); | 749 EXPECT(root->value.as_typed_data.values == NULL); |
750 CheckEncodeDecodeMessage(root); | 750 CheckEncodeDecodeMessage(root); |
751 } | 751 } |
752 | 752 |
753 | 753 |
754 class TestSnapshotWriter : public SnapshotWriter { | 754 class TestSnapshotWriter : public SnapshotWriter { |
755 public: | 755 public: |
756 static const intptr_t kInitialSize = 64 * KB; | 756 static const intptr_t kInitialSize = 64 * KB; |
757 TestSnapshotWriter(uint8_t** buffer, ReAlloc alloc) | 757 TestSnapshotWriter(uint8_t** buffer, ReAlloc alloc) |
(...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1232 | 1232 |
1233 static const int kArrayLength = 2; | 1233 static const int kArrayLength = 2; |
1234 intptr_t data[kArrayLength] = {1, 2}; | 1234 intptr_t data[kArrayLength] = {1, 2}; |
1235 int len = kArrayLength; | 1235 int len = kArrayLength; |
1236 writer.WriteMessage(len, data); | 1236 writer.WriteMessage(len, data); |
1237 | 1237 |
1238 // Read object back from the snapshot into a C structure. | 1238 // Read object back from the snapshot into a C structure. |
1239 ApiNativeScope scope; | 1239 ApiNativeScope scope; |
1240 ApiMessageReader api_reader(buffer, writer.BytesWritten(), &zone_allocator); | 1240 ApiMessageReader api_reader(buffer, writer.BytesWritten(), &zone_allocator); |
1241 Dart_CObject* root = api_reader.ReadMessage(); | 1241 Dart_CObject* root = api_reader.ReadMessage(); |
1242 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1242 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1243 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1243 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1244 for (int i = 0; i < kArrayLength; i++) { | 1244 for (int i = 0; i < kArrayLength; i++) { |
1245 Dart_CObject* element = root->value.as_array.values[i]; | 1245 Dart_CObject* element = root->value.as_array.values[i]; |
1246 EXPECT_EQ(Dart_CObject::kInt32, element->type); | 1246 EXPECT_EQ(Dart_CObject_kInt32, element->type); |
1247 EXPECT_EQ(i + 1, element->value.as_int32); | 1247 EXPECT_EQ(i + 1, element->value.as_int32); |
1248 } | 1248 } |
1249 CheckEncodeDecodeMessage(root); | 1249 CheckEncodeDecodeMessage(root); |
1250 } | 1250 } |
1251 | 1251 |
1252 | 1252 |
1253 // Helper function to call a top level Dart function, serialize the | 1253 // Helper function to call a top level Dart function, serialize the |
1254 // result and deserialize the result into a Dart_CObject structure. | 1254 // result and deserialize the result into a Dart_CObject structure. |
1255 static Dart_CObject* GetDeserializedDartMessage(Dart_Handle lib, | 1255 static Dart_CObject* GetDeserializedDartMessage(Dart_Handle lib, |
1256 const char* dart_function) { | 1256 const char* dart_function) { |
(...skipping 21 matching lines...) Expand all Loading... |
1278 String& str = String::Handle(); | 1278 String& str = String::Handle(); |
1279 str ^= Api::UnwrapHandle(dart_string); | 1279 str ^= Api::UnwrapHandle(dart_string); |
1280 writer.WriteMessage(str); | 1280 writer.WriteMessage(str); |
1281 intptr_t buffer_len = writer.BytesWritten(); | 1281 intptr_t buffer_len = writer.BytesWritten(); |
1282 | 1282 |
1283 // Read object back from the snapshot into a C structure. | 1283 // Read object back from the snapshot into a C structure. |
1284 ApiNativeScope scope; | 1284 ApiNativeScope scope; |
1285 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 1285 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
1286 Dart_CObject* root = api_reader.ReadMessage(); | 1286 Dart_CObject* root = api_reader.ReadMessage(); |
1287 EXPECT_NOTNULL(root); | 1287 EXPECT_NOTNULL(root); |
1288 EXPECT_EQ(Dart_CObject::kString, root->type); | 1288 EXPECT_EQ(Dart_CObject_kString, root->type); |
1289 EXPECT_STREQ(expected, root->value.as_string); | 1289 EXPECT_STREQ(expected, root->value.as_string); |
1290 CheckEncodeDecodeMessage(root); | 1290 CheckEncodeDecodeMessage(root); |
1291 } | 1291 } |
1292 | 1292 |
1293 | 1293 |
1294 static void CheckStringInvalid(Dart_Handle dart_string) { | 1294 static void CheckStringInvalid(Dart_Handle dart_string) { |
1295 StackZone zone(Isolate::Current()); | 1295 StackZone zone(Isolate::Current()); |
1296 uint8_t* buffer; | 1296 uint8_t* buffer; |
1297 MessageWriter writer(&buffer, &zone_allocator); | 1297 MessageWriter writer(&buffer, &zone_allocator); |
1298 String& str = String::Handle(); | 1298 String& str = String::Handle(); |
1299 str ^= Api::UnwrapHandle(dart_string); | 1299 str ^= Api::UnwrapHandle(dart_string); |
1300 writer.WriteMessage(str); | 1300 writer.WriteMessage(str); |
1301 intptr_t buffer_len = writer.BytesWritten(); | 1301 intptr_t buffer_len = writer.BytesWritten(); |
1302 | 1302 |
1303 // Read object back from the snapshot into a C structure. | 1303 // Read object back from the snapshot into a C structure. |
1304 ApiNativeScope scope; | 1304 ApiNativeScope scope; |
1305 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 1305 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
1306 Dart_CObject* root = api_reader.ReadMessage(); | 1306 Dart_CObject* root = api_reader.ReadMessage(); |
1307 EXPECT_NOTNULL(root); | 1307 EXPECT_NOTNULL(root); |
1308 EXPECT_EQ(Dart_CObject::kUnsupported, root->type); | 1308 EXPECT_EQ(Dart_CObject_kUnsupported, root->type); |
1309 } | 1309 } |
1310 | 1310 |
1311 | 1311 |
1312 UNIT_TEST_CASE(DartGeneratedMessages) { | 1312 UNIT_TEST_CASE(DartGeneratedMessages) { |
1313 static const char* kCustomIsolateScriptChars = | 1313 static const char* kCustomIsolateScriptChars = |
1314 "getSmi() {\n" | 1314 "getSmi() {\n" |
1315 " return 42;\n" | 1315 " return 42;\n" |
1316 "}\n" | 1316 "}\n" |
1317 "getBigint() {\n" | 1317 "getBigint() {\n" |
1318 " return -0x424242424242424242424242424242424242;\n" | 1318 " return -0x424242424242424242424242424242424242;\n" |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1408 Smi& smi = Smi::Handle(); | 1408 Smi& smi = Smi::Handle(); |
1409 smi ^= Api::UnwrapHandle(smi_result); | 1409 smi ^= Api::UnwrapHandle(smi_result); |
1410 writer.WriteMessage(smi); | 1410 writer.WriteMessage(smi); |
1411 intptr_t buffer_len = writer.BytesWritten(); | 1411 intptr_t buffer_len = writer.BytesWritten(); |
1412 | 1412 |
1413 // Read object back from the snapshot into a C structure. | 1413 // Read object back from the snapshot into a C structure. |
1414 ApiNativeScope scope; | 1414 ApiNativeScope scope; |
1415 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 1415 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
1416 Dart_CObject* root = api_reader.ReadMessage(); | 1416 Dart_CObject* root = api_reader.ReadMessage(); |
1417 EXPECT_NOTNULL(root); | 1417 EXPECT_NOTNULL(root); |
1418 EXPECT_EQ(Dart_CObject::kInt32, root->type); | 1418 EXPECT_EQ(Dart_CObject_kInt32, root->type); |
1419 EXPECT_EQ(42, root->value.as_int32); | 1419 EXPECT_EQ(42, root->value.as_int32); |
1420 CheckEncodeDecodeMessage(root); | 1420 CheckEncodeDecodeMessage(root); |
1421 } | 1421 } |
1422 { | 1422 { |
1423 StackZone zone(Isolate::Current()); | 1423 StackZone zone(Isolate::Current()); |
1424 uint8_t* buffer; | 1424 uint8_t* buffer; |
1425 MessageWriter writer(&buffer, &zone_allocator); | 1425 MessageWriter writer(&buffer, &zone_allocator); |
1426 Bigint& bigint = Bigint::Handle(); | 1426 Bigint& bigint = Bigint::Handle(); |
1427 bigint ^= Api::UnwrapHandle(bigint_result); | 1427 bigint ^= Api::UnwrapHandle(bigint_result); |
1428 writer.WriteMessage(bigint); | 1428 writer.WriteMessage(bigint); |
1429 intptr_t buffer_len = writer.BytesWritten(); | 1429 intptr_t buffer_len = writer.BytesWritten(); |
1430 | 1430 |
1431 // Read object back from the snapshot into a C structure. | 1431 // Read object back from the snapshot into a C structure. |
1432 ApiNativeScope scope; | 1432 ApiNativeScope scope; |
1433 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 1433 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
1434 Dart_CObject* root = api_reader.ReadMessage(); | 1434 Dart_CObject* root = api_reader.ReadMessage(); |
1435 EXPECT_NOTNULL(root); | 1435 EXPECT_NOTNULL(root); |
1436 EXPECT_EQ(Dart_CObject::kBigint, root->type); | 1436 EXPECT_EQ(Dart_CObject_kBigint, root->type); |
1437 EXPECT_STREQ("-424242424242424242424242424242424242", | 1437 EXPECT_STREQ("-424242424242424242424242424242424242", |
1438 root->value.as_bigint); | 1438 root->value.as_bigint); |
1439 CheckEncodeDecodeMessage(root); | 1439 CheckEncodeDecodeMessage(root); |
1440 } | 1440 } |
1441 CheckString(ascii_string_result, "Hello, world!"); | 1441 CheckString(ascii_string_result, "Hello, world!"); |
1442 CheckString(non_ascii_string_result, "Blåbærgrød"); | 1442 CheckString(non_ascii_string_result, "Blåbærgrød"); |
1443 CheckString(non_bmp_string_result, | 1443 CheckString(non_bmp_string_result, |
1444 "\xf0\x90\x80\x80" | 1444 "\xf0\x90\x80\x80" |
1445 "\xf0\x9f\x98\x81" | 1445 "\xf0\x9f\x98\x81" |
1446 "\xf0\x9f\x98\xb7" | 1446 "\xf0\x9f\x98\xb7" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1489 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 1489 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
1490 EXPECT_VALID(lib); | 1490 EXPECT_VALID(lib); |
1491 | 1491 |
1492 { | 1492 { |
1493 DARTSCOPE(isolate); | 1493 DARTSCOPE(isolate); |
1494 { | 1494 { |
1495 // Generate a list of nulls from Dart code. | 1495 // Generate a list of nulls from Dart code. |
1496 ApiNativeScope scope; | 1496 ApiNativeScope scope; |
1497 Dart_CObject* root = GetDeserializedDartMessage(lib, "getList"); | 1497 Dart_CObject* root = GetDeserializedDartMessage(lib, "getList"); |
1498 EXPECT_NOTNULL(root); | 1498 EXPECT_NOTNULL(root); |
1499 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1499 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1500 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1500 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1501 for (int i = 0; i < kArrayLength; i++) { | 1501 for (int i = 0; i < kArrayLength; i++) { |
1502 EXPECT_EQ(Dart_CObject::kNull, root->value.as_array.values[i]->type); | 1502 EXPECT_EQ(Dart_CObject_kNull, root->value.as_array.values[i]->type); |
1503 } | 1503 } |
1504 CheckEncodeDecodeMessage(root); | 1504 CheckEncodeDecodeMessage(root); |
1505 } | 1505 } |
1506 { | 1506 { |
1507 // Generate a list of ints from Dart code. | 1507 // Generate a list of ints from Dart code. |
1508 ApiNativeScope scope; | 1508 ApiNativeScope scope; |
1509 Dart_CObject* root = GetDeserializedDartMessage(lib, "getIntList"); | 1509 Dart_CObject* root = GetDeserializedDartMessage(lib, "getIntList"); |
1510 EXPECT_NOTNULL(root); | 1510 EXPECT_NOTNULL(root); |
1511 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1511 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1512 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1512 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1513 for (int i = 0; i < kArrayLength; i++) { | 1513 for (int i = 0; i < kArrayLength; i++) { |
1514 EXPECT_EQ(Dart_CObject::kInt32, root->value.as_array.values[i]->type); | 1514 EXPECT_EQ(Dart_CObject_kInt32, root->value.as_array.values[i]->type); |
1515 EXPECT_EQ(i, root->value.as_array.values[i]->value.as_int32); | 1515 EXPECT_EQ(i, root->value.as_array.values[i]->value.as_int32); |
1516 } | 1516 } |
1517 CheckEncodeDecodeMessage(root); | 1517 CheckEncodeDecodeMessage(root); |
1518 } | 1518 } |
1519 { | 1519 { |
1520 // Generate a list of strings from Dart code. | 1520 // Generate a list of strings from Dart code. |
1521 ApiNativeScope scope; | 1521 ApiNativeScope scope; |
1522 Dart_CObject* root = GetDeserializedDartMessage(lib, "getStringList"); | 1522 Dart_CObject* root = GetDeserializedDartMessage(lib, "getStringList"); |
1523 EXPECT_NOTNULL(root); | 1523 EXPECT_NOTNULL(root); |
1524 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1524 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1525 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1525 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1526 for (int i = 0; i < kArrayLength; i++) { | 1526 for (int i = 0; i < kArrayLength; i++) { |
1527 EXPECT_EQ(Dart_CObject::kString, root->value.as_array.values[i]->type); | 1527 EXPECT_EQ(Dart_CObject_kString, root->value.as_array.values[i]->type); |
1528 char buffer[3]; | 1528 char buffer[3]; |
1529 snprintf(buffer, sizeof(buffer), "%d", i); | 1529 snprintf(buffer, sizeof(buffer), "%d", i); |
1530 EXPECT_STREQ(buffer, root->value.as_array.values[i]->value.as_string); | 1530 EXPECT_STREQ(buffer, root->value.as_array.values[i]->value.as_string); |
1531 } | 1531 } |
1532 } | 1532 } |
1533 { | 1533 { |
1534 // Generate a list of objects of different types from Dart code. | 1534 // Generate a list of objects of different types from Dart code. |
1535 ApiNativeScope scope; | 1535 ApiNativeScope scope; |
1536 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList"); | 1536 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList"); |
1537 EXPECT_NOTNULL(root); | 1537 EXPECT_NOTNULL(root); |
1538 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1538 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1539 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1539 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1540 | 1540 |
1541 EXPECT_EQ(Dart_CObject::kInt32, root->value.as_array.values[0]->type); | 1541 EXPECT_EQ(Dart_CObject_kInt32, root->value.as_array.values[0]->type); |
1542 EXPECT_EQ(0, root->value.as_array.values[0]->value.as_int32); | 1542 EXPECT_EQ(0, root->value.as_array.values[0]->value.as_int32); |
1543 EXPECT_EQ(Dart_CObject::kString, root->value.as_array.values[1]->type); | 1543 EXPECT_EQ(Dart_CObject_kString, root->value.as_array.values[1]->type); |
1544 EXPECT_STREQ("1", root->value.as_array.values[1]->value.as_string); | 1544 EXPECT_STREQ("1", root->value.as_array.values[1]->value.as_string); |
1545 EXPECT_EQ(Dart_CObject::kDouble, root->value.as_array.values[2]->type); | 1545 EXPECT_EQ(Dart_CObject_kDouble, root->value.as_array.values[2]->type); |
1546 EXPECT_EQ(2.2, root->value.as_array.values[2]->value.as_double); | 1546 EXPECT_EQ(2.2, root->value.as_array.values[2]->value.as_double); |
1547 EXPECT_EQ(Dart_CObject::kBool, root->value.as_array.values[3]->type); | 1547 EXPECT_EQ(Dart_CObject_kBool, root->value.as_array.values[3]->type); |
1548 EXPECT_EQ(true, root->value.as_array.values[3]->value.as_bool); | 1548 EXPECT_EQ(true, root->value.as_array.values[3]->value.as_bool); |
1549 | 1549 |
1550 for (int i = 0; i < kArrayLength; i++) { | 1550 for (int i = 0; i < kArrayLength; i++) { |
1551 if (i > 3) { | 1551 if (i > 3) { |
1552 EXPECT_EQ(Dart_CObject::kNull, root->value.as_array.values[i]->type); | 1552 EXPECT_EQ(Dart_CObject_kNull, root->value.as_array.values[i]->type); |
1553 } | 1553 } |
1554 } | 1554 } |
1555 } | 1555 } |
1556 } | 1556 } |
1557 Dart_ExitScope(); | 1557 Dart_ExitScope(); |
1558 Dart_ShutdownIsolate(); | 1558 Dart_ShutdownIsolate(); |
1559 } | 1559 } |
1560 | 1560 |
1561 | 1561 |
1562 UNIT_TEST_CASE(DartGeneratedArrayLiteralMessages) { | 1562 UNIT_TEST_CASE(DartGeneratedArrayLiteralMessages) { |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1607 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 1607 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
1608 EXPECT_VALID(lib); | 1608 EXPECT_VALID(lib); |
1609 | 1609 |
1610 { | 1610 { |
1611 DARTSCOPE(isolate); | 1611 DARTSCOPE(isolate); |
1612 { | 1612 { |
1613 // Generate a list of nulls from Dart code. | 1613 // Generate a list of nulls from Dart code. |
1614 ApiNativeScope scope; | 1614 ApiNativeScope scope; |
1615 Dart_CObject* root = GetDeserializedDartMessage(lib, "getList"); | 1615 Dart_CObject* root = GetDeserializedDartMessage(lib, "getList"); |
1616 EXPECT_NOTNULL(root); | 1616 EXPECT_NOTNULL(root); |
1617 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1617 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1618 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1618 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1619 for (int i = 0; i < kArrayLength; i++) { | 1619 for (int i = 0; i < kArrayLength; i++) { |
1620 EXPECT_EQ(Dart_CObject::kNull, root->value.as_array.values[i]->type); | 1620 EXPECT_EQ(Dart_CObject_kNull, root->value.as_array.values[i]->type); |
1621 } | 1621 } |
1622 CheckEncodeDecodeMessage(root); | 1622 CheckEncodeDecodeMessage(root); |
1623 } | 1623 } |
1624 { | 1624 { |
1625 // Generate a list of ints from Dart code. | 1625 // Generate a list of ints from Dart code. |
1626 ApiNativeScope scope; | 1626 ApiNativeScope scope; |
1627 Dart_CObject* root = GetDeserializedDartMessage(lib, "getIntList"); | 1627 Dart_CObject* root = GetDeserializedDartMessage(lib, "getIntList"); |
1628 EXPECT_NOTNULL(root); | 1628 EXPECT_NOTNULL(root); |
1629 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1629 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1630 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1630 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1631 for (int i = 0; i < kArrayLength; i++) { | 1631 for (int i = 0; i < kArrayLength; i++) { |
1632 EXPECT_EQ(Dart_CObject::kInt32, root->value.as_array.values[i]->type); | 1632 EXPECT_EQ(Dart_CObject_kInt32, root->value.as_array.values[i]->type); |
1633 EXPECT_EQ(i, root->value.as_array.values[i]->value.as_int32); | 1633 EXPECT_EQ(i, root->value.as_array.values[i]->value.as_int32); |
1634 } | 1634 } |
1635 CheckEncodeDecodeMessage(root); | 1635 CheckEncodeDecodeMessage(root); |
1636 } | 1636 } |
1637 { | 1637 { |
1638 // Generate a list of strings from Dart code. | 1638 // Generate a list of strings from Dart code. |
1639 ApiNativeScope scope; | 1639 ApiNativeScope scope; |
1640 Dart_CObject* root = GetDeserializedDartMessage(lib, "getStringList"); | 1640 Dart_CObject* root = GetDeserializedDartMessage(lib, "getStringList"); |
1641 EXPECT_NOTNULL(root); | 1641 EXPECT_NOTNULL(root); |
1642 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1642 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1643 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1643 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1644 for (int i = 0; i < kArrayLength; i++) { | 1644 for (int i = 0; i < kArrayLength; i++) { |
1645 EXPECT_EQ(Dart_CObject::kString, root->value.as_array.values[i]->type); | 1645 EXPECT_EQ(Dart_CObject_kString, root->value.as_array.values[i]->type); |
1646 char buffer[3]; | 1646 char buffer[3]; |
1647 snprintf(buffer, sizeof(buffer), "%d", i); | 1647 snprintf(buffer, sizeof(buffer), "%d", i); |
1648 EXPECT_STREQ(buffer, root->value.as_array.values[i]->value.as_string); | 1648 EXPECT_STREQ(buffer, root->value.as_array.values[i]->value.as_string); |
1649 } | 1649 } |
1650 } | 1650 } |
1651 { | 1651 { |
1652 // Generate a list of lists from Dart code. | 1652 // Generate a list of lists from Dart code. |
1653 ApiNativeScope scope; | 1653 ApiNativeScope scope; |
1654 Dart_CObject* root = GetDeserializedDartMessage(lib, "getListList"); | 1654 Dart_CObject* root = GetDeserializedDartMessage(lib, "getListList"); |
1655 EXPECT_NOTNULL(root); | 1655 EXPECT_NOTNULL(root); |
1656 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1656 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1657 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1657 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1658 for (int i = 0; i < kArrayLength; i++) { | 1658 for (int i = 0; i < kArrayLength; i++) { |
1659 Dart_CObject* element = root->value.as_array.values[i]; | 1659 Dart_CObject* element = root->value.as_array.values[i]; |
1660 EXPECT_EQ(Dart_CObject::kArray, element->type); | 1660 EXPECT_EQ(Dart_CObject_kArray, element->type); |
1661 EXPECT_EQ(i, element->value.as_array.length); | 1661 EXPECT_EQ(i, element->value.as_array.length); |
1662 for (int j = 0; j < i; j++) { | 1662 for (int j = 0; j < i; j++) { |
1663 EXPECT_EQ(Dart_CObject::kInt32, | 1663 EXPECT_EQ(Dart_CObject_kInt32, |
1664 element->value.as_array.values[j]->type); | 1664 element->value.as_array.values[j]->type); |
1665 EXPECT_EQ(j, element->value.as_array.values[j]->value.as_int32); | 1665 EXPECT_EQ(j, element->value.as_array.values[j]->value.as_int32); |
1666 } | 1666 } |
1667 } | 1667 } |
1668 } | 1668 } |
1669 { | 1669 { |
1670 // Generate a list of objects of different types from Dart code. | 1670 // Generate a list of objects of different types from Dart code. |
1671 ApiNativeScope scope; | 1671 ApiNativeScope scope; |
1672 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList"); | 1672 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList"); |
1673 EXPECT_NOTNULL(root); | 1673 EXPECT_NOTNULL(root); |
1674 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1674 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1675 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1675 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1676 | 1676 |
1677 EXPECT_EQ(Dart_CObject::kInt32, root->value.as_array.values[0]->type); | 1677 EXPECT_EQ(Dart_CObject_kInt32, root->value.as_array.values[0]->type); |
1678 EXPECT_EQ(0, root->value.as_array.values[0]->value.as_int32); | 1678 EXPECT_EQ(0, root->value.as_array.values[0]->value.as_int32); |
1679 EXPECT_EQ(Dart_CObject::kString, root->value.as_array.values[1]->type); | 1679 EXPECT_EQ(Dart_CObject_kString, root->value.as_array.values[1]->type); |
1680 EXPECT_STREQ("1", root->value.as_array.values[1]->value.as_string); | 1680 EXPECT_STREQ("1", root->value.as_array.values[1]->value.as_string); |
1681 EXPECT_EQ(Dart_CObject::kDouble, root->value.as_array.values[2]->type); | 1681 EXPECT_EQ(Dart_CObject_kDouble, root->value.as_array.values[2]->type); |
1682 EXPECT_EQ(2.2, root->value.as_array.values[2]->value.as_double); | 1682 EXPECT_EQ(2.2, root->value.as_array.values[2]->value.as_double); |
1683 EXPECT_EQ(Dart_CObject::kBool, root->value.as_array.values[3]->type); | 1683 EXPECT_EQ(Dart_CObject_kBool, root->value.as_array.values[3]->type); |
1684 EXPECT_EQ(true, root->value.as_array.values[3]->value.as_bool); | 1684 EXPECT_EQ(true, root->value.as_array.values[3]->value.as_bool); |
1685 | 1685 |
1686 for (int i = 0; i < kArrayLength; i++) { | 1686 for (int i = 0; i < kArrayLength; i++) { |
1687 if (i > 3) { | 1687 if (i > 3) { |
1688 EXPECT_EQ(Dart_CObject::kArray, root->value.as_array.values[i]->type); | 1688 EXPECT_EQ(Dart_CObject_kArray, root->value.as_array.values[i]->type); |
1689 } | 1689 } |
1690 } | 1690 } |
1691 | 1691 |
1692 Dart_CObject* element; | 1692 Dart_CObject* element; |
1693 Dart_CObject* e; | 1693 Dart_CObject* e; |
1694 | 1694 |
1695 // [] | 1695 // [] |
1696 element = root->value.as_array.values[4]; | 1696 element = root->value.as_array.values[4]; |
1697 EXPECT_EQ(0, element->value.as_array.length); | 1697 EXPECT_EQ(0, element->value.as_array.length); |
1698 | 1698 |
1699 // [[]] | 1699 // [[]] |
1700 element = root->value.as_array.values[5]; | 1700 element = root->value.as_array.values[5]; |
1701 EXPECT_EQ(1, element->value.as_array.length); | 1701 EXPECT_EQ(1, element->value.as_array.length); |
1702 element = element->value.as_array.values[0]; | 1702 element = element->value.as_array.values[0]; |
1703 EXPECT_EQ(Dart_CObject::kArray, element->type); | 1703 EXPECT_EQ(Dart_CObject_kArray, element->type); |
1704 EXPECT_EQ(0, element->value.as_array.length); | 1704 EXPECT_EQ(0, element->value.as_array.length); |
1705 | 1705 |
1706 // [[[]]]" | 1706 // [[[]]]" |
1707 element = root->value.as_array.values[6]; | 1707 element = root->value.as_array.values[6]; |
1708 EXPECT_EQ(1, element->value.as_array.length); | 1708 EXPECT_EQ(1, element->value.as_array.length); |
1709 element = element->value.as_array.values[0]; | 1709 element = element->value.as_array.values[0]; |
1710 EXPECT_EQ(Dart_CObject::kArray, element->type); | 1710 EXPECT_EQ(Dart_CObject_kArray, element->type); |
1711 EXPECT_EQ(1, element->value.as_array.length); | 1711 EXPECT_EQ(1, element->value.as_array.length); |
1712 element = element->value.as_array.values[0]; | 1712 element = element->value.as_array.values[0]; |
1713 EXPECT_EQ(Dart_CObject::kArray, element->type); | 1713 EXPECT_EQ(Dart_CObject_kArray, element->type); |
1714 EXPECT_EQ(0, element->value.as_array.length); | 1714 EXPECT_EQ(0, element->value.as_array.length); |
1715 | 1715 |
1716 // [1, [2, [3]]] | 1716 // [1, [2, [3]]] |
1717 element = root->value.as_array.values[7]; | 1717 element = root->value.as_array.values[7]; |
1718 EXPECT_EQ(2, element->value.as_array.length); | 1718 EXPECT_EQ(2, element->value.as_array.length); |
1719 e = element->value.as_array.values[0]; | 1719 e = element->value.as_array.values[0]; |
1720 EXPECT_EQ(Dart_CObject::kInt32, e->type); | 1720 EXPECT_EQ(Dart_CObject_kInt32, e->type); |
1721 EXPECT_EQ(1, e->value.as_int32); | 1721 EXPECT_EQ(1, e->value.as_int32); |
1722 element = element->value.as_array.values[1]; | 1722 element = element->value.as_array.values[1]; |
1723 EXPECT_EQ(Dart_CObject::kArray, element->type); | 1723 EXPECT_EQ(Dart_CObject_kArray, element->type); |
1724 EXPECT_EQ(2, element->value.as_array.length); | 1724 EXPECT_EQ(2, element->value.as_array.length); |
1725 e = element->value.as_array.values[0]; | 1725 e = element->value.as_array.values[0]; |
1726 EXPECT_EQ(Dart_CObject::kInt32, e->type); | 1726 EXPECT_EQ(Dart_CObject_kInt32, e->type); |
1727 EXPECT_EQ(2, e->value.as_int32); | 1727 EXPECT_EQ(2, e->value.as_int32); |
1728 element = element->value.as_array.values[1]; | 1728 element = element->value.as_array.values[1]; |
1729 EXPECT_EQ(Dart_CObject::kArray, element->type); | 1729 EXPECT_EQ(Dart_CObject_kArray, element->type); |
1730 EXPECT_EQ(1, element->value.as_array.length); | 1730 EXPECT_EQ(1, element->value.as_array.length); |
1731 e = element->value.as_array.values[0]; | 1731 e = element->value.as_array.values[0]; |
1732 EXPECT_EQ(Dart_CObject::kInt32, e->type); | 1732 EXPECT_EQ(Dart_CObject_kInt32, e->type); |
1733 EXPECT_EQ(3, e->value.as_int32); | 1733 EXPECT_EQ(3, e->value.as_int32); |
1734 | 1734 |
1735 // [1, [1, 2, [1, 2, 3]]] | 1735 // [1, [1, 2, [1, 2, 3]]] |
1736 element = root->value.as_array.values[8]; | 1736 element = root->value.as_array.values[8]; |
1737 EXPECT_EQ(2, element->value.as_array.length); | 1737 EXPECT_EQ(2, element->value.as_array.length); |
1738 e = element->value.as_array.values[0]; | 1738 e = element->value.as_array.values[0]; |
1739 EXPECT_EQ(Dart_CObject::kInt32, e->type); | 1739 EXPECT_EQ(Dart_CObject_kInt32, e->type); |
1740 e = element->value.as_array.values[0]; | 1740 e = element->value.as_array.values[0]; |
1741 EXPECT_EQ(Dart_CObject::kInt32, e->type); | 1741 EXPECT_EQ(Dart_CObject_kInt32, e->type); |
1742 EXPECT_EQ(1, e->value.as_int32); | 1742 EXPECT_EQ(1, e->value.as_int32); |
1743 element = element->value.as_array.values[1]; | 1743 element = element->value.as_array.values[1]; |
1744 EXPECT_EQ(Dart_CObject::kArray, element->type); | 1744 EXPECT_EQ(Dart_CObject_kArray, element->type); |
1745 EXPECT_EQ(3, element->value.as_array.length); | 1745 EXPECT_EQ(3, element->value.as_array.length); |
1746 for (int i = 0; i < 2; i++) { | 1746 for (int i = 0; i < 2; i++) { |
1747 e = element->value.as_array.values[i]; | 1747 e = element->value.as_array.values[i]; |
1748 EXPECT_EQ(Dart_CObject::kInt32, e->type); | 1748 EXPECT_EQ(Dart_CObject_kInt32, e->type); |
1749 EXPECT_EQ(i + 1, e->value.as_int32); | 1749 EXPECT_EQ(i + 1, e->value.as_int32); |
1750 } | 1750 } |
1751 element = element->value.as_array.values[2]; | 1751 element = element->value.as_array.values[2]; |
1752 EXPECT_EQ(Dart_CObject::kArray, element->type); | 1752 EXPECT_EQ(Dart_CObject_kArray, element->type); |
1753 EXPECT_EQ(3, element->value.as_array.length); | 1753 EXPECT_EQ(3, element->value.as_array.length); |
1754 for (int i = 0; i < 3; i++) { | 1754 for (int i = 0; i < 3; i++) { |
1755 e = element->value.as_array.values[i]; | 1755 e = element->value.as_array.values[i]; |
1756 EXPECT_EQ(Dart_CObject::kInt32, e->type); | 1756 EXPECT_EQ(Dart_CObject_kInt32, e->type); |
1757 EXPECT_EQ(i + 1, e->value.as_int32); | 1757 EXPECT_EQ(i + 1, e->value.as_int32); |
1758 } | 1758 } |
1759 | 1759 |
1760 // [1, 2, 3] | 1760 // [1, 2, 3] |
1761 element = root->value.as_array.values[9]; | 1761 element = root->value.as_array.values[9]; |
1762 EXPECT_EQ(3, element->value.as_array.length); | 1762 EXPECT_EQ(3, element->value.as_array.length); |
1763 for (int i = 0; i < 3; i++) { | 1763 for (int i = 0; i < 3; i++) { |
1764 e = element->value.as_array.values[i]; | 1764 e = element->value.as_array.values[i]; |
1765 EXPECT_EQ(Dart_CObject::kInt32, e->type); | 1765 EXPECT_EQ(Dart_CObject_kInt32, e->type); |
1766 EXPECT_EQ(i + 1, e->value.as_int32); | 1766 EXPECT_EQ(i + 1, e->value.as_int32); |
1767 } | 1767 } |
1768 } | 1768 } |
1769 } | 1769 } |
1770 Dart_ExitScope(); | 1770 Dart_ExitScope(); |
1771 Dart_ShutdownIsolate(); | 1771 Dart_ShutdownIsolate(); |
1772 } | 1772 } |
1773 | 1773 |
1774 | 1774 |
1775 UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) { | 1775 UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) { |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1840 EXPECT_VALID(lib); | 1840 EXPECT_VALID(lib); |
1841 | 1841 |
1842 { | 1842 { |
1843 DARTSCOPE(isolate); | 1843 DARTSCOPE(isolate); |
1844 | 1844 |
1845 { | 1845 { |
1846 // Generate a list of strings from Dart code. | 1846 // Generate a list of strings from Dart code. |
1847 ApiNativeScope scope; | 1847 ApiNativeScope scope; |
1848 Dart_CObject* root = GetDeserializedDartMessage(lib, "getStringList"); | 1848 Dart_CObject* root = GetDeserializedDartMessage(lib, "getStringList"); |
1849 EXPECT_NOTNULL(root); | 1849 EXPECT_NOTNULL(root); |
1850 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1850 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1851 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1851 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1852 for (int i = 0; i < kArrayLength; i++) { | 1852 for (int i = 0; i < kArrayLength; i++) { |
1853 Dart_CObject* element = root->value.as_array.values[i]; | 1853 Dart_CObject* element = root->value.as_array.values[i]; |
1854 EXPECT_EQ(root->value.as_array.values[0], element); | 1854 EXPECT_EQ(root->value.as_array.values[0], element); |
1855 EXPECT_EQ(Dart_CObject::kString, element->type); | 1855 EXPECT_EQ(Dart_CObject_kString, element->type); |
1856 EXPECT_STREQ("Hello, world!", element->value.as_string); | 1856 EXPECT_STREQ("Hello, world!", element->value.as_string); |
1857 } | 1857 } |
1858 } | 1858 } |
1859 { | 1859 { |
1860 // Generate a list of medium ints from Dart code. | 1860 // Generate a list of medium ints from Dart code. |
1861 ApiNativeScope scope; | 1861 ApiNativeScope scope; |
1862 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMintList"); | 1862 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMintList"); |
1863 EXPECT_NOTNULL(root); | 1863 EXPECT_NOTNULL(root); |
1864 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1864 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1865 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1865 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1866 for (int i = 0; i < kArrayLength; i++) { | 1866 for (int i = 0; i < kArrayLength; i++) { |
1867 Dart_CObject* element = root->value.as_array.values[i]; | 1867 Dart_CObject* element = root->value.as_array.values[i]; |
1868 EXPECT_EQ(root->value.as_array.values[0], element); | 1868 EXPECT_EQ(root->value.as_array.values[0], element); |
1869 EXPECT_EQ(Dart_CObject::kInt64, element->type); | 1869 EXPECT_EQ(Dart_CObject_kInt64, element->type); |
1870 EXPECT_EQ(DART_INT64_C(0x7FFFFFFFFFFFFFFF), element->value.as_int64); | 1870 EXPECT_EQ(DART_INT64_C(0x7FFFFFFFFFFFFFFF), element->value.as_int64); |
1871 } | 1871 } |
1872 } | 1872 } |
1873 { | 1873 { |
1874 // Generate a list of bigints from Dart code. | 1874 // Generate a list of bigints from Dart code. |
1875 ApiNativeScope scope; | 1875 ApiNativeScope scope; |
1876 Dart_CObject* root = GetDeserializedDartMessage(lib, "getBigintList"); | 1876 Dart_CObject* root = GetDeserializedDartMessage(lib, "getBigintList"); |
1877 EXPECT_NOTNULL(root); | 1877 EXPECT_NOTNULL(root); |
1878 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1878 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1879 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1879 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1880 for (int i = 0; i < kArrayLength; i++) { | 1880 for (int i = 0; i < kArrayLength; i++) { |
1881 Dart_CObject* element = root->value.as_array.values[i]; | 1881 Dart_CObject* element = root->value.as_array.values[i]; |
1882 EXPECT_EQ(root->value.as_array.values[0], element); | 1882 EXPECT_EQ(root->value.as_array.values[0], element); |
1883 EXPECT_EQ(Dart_CObject::kBigint, element->type); | 1883 EXPECT_EQ(Dart_CObject_kBigint, element->type); |
1884 EXPECT_STREQ("1234567890123456789012345678901234567890", | 1884 EXPECT_STREQ("1234567890123456789012345678901234567890", |
1885 element->value.as_bigint); | 1885 element->value.as_bigint); |
1886 } | 1886 } |
1887 } | 1887 } |
1888 { | 1888 { |
1889 // Generate a list of doubles from Dart code. | 1889 // Generate a list of doubles from Dart code. |
1890 ApiNativeScope scope; | 1890 ApiNativeScope scope; |
1891 Dart_CObject* root = GetDeserializedDartMessage(lib, "getDoubleList"); | 1891 Dart_CObject* root = GetDeserializedDartMessage(lib, "getDoubleList"); |
1892 EXPECT_NOTNULL(root); | 1892 EXPECT_NOTNULL(root); |
1893 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1893 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1894 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1894 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1895 for (int i = 0; i < kArrayLength; i++) { | 1895 for (int i = 0; i < kArrayLength; i++) { |
1896 Dart_CObject* element = root->value.as_array.values[i]; | 1896 Dart_CObject* element = root->value.as_array.values[i]; |
1897 EXPECT_EQ(root->value.as_array.values[0], element); | 1897 EXPECT_EQ(root->value.as_array.values[0], element); |
1898 EXPECT_EQ(Dart_CObject::kDouble, element->type); | 1898 EXPECT_EQ(Dart_CObject_kDouble, element->type); |
1899 EXPECT_EQ(3.14, element->value.as_double); | 1899 EXPECT_EQ(3.14, element->value.as_double); |
1900 } | 1900 } |
1901 } | 1901 } |
1902 { | 1902 { |
1903 // Generate a list of Uint8Lists from Dart code. | 1903 // Generate a list of Uint8Lists from Dart code. |
1904 ApiNativeScope scope; | 1904 ApiNativeScope scope; |
1905 Dart_CObject* root = GetDeserializedDartMessage(lib, "getTypedDataList"); | 1905 Dart_CObject* root = GetDeserializedDartMessage(lib, "getTypedDataList"); |
1906 EXPECT_NOTNULL(root); | 1906 EXPECT_NOTNULL(root); |
1907 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1907 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1908 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1908 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1909 for (int i = 0; i < kArrayLength; i++) { | 1909 for (int i = 0; i < kArrayLength; i++) { |
1910 Dart_CObject* element = root->value.as_array.values[i]; | 1910 Dart_CObject* element = root->value.as_array.values[i]; |
1911 EXPECT_EQ(root->value.as_array.values[0], element); | 1911 EXPECT_EQ(root->value.as_array.values[0], element); |
1912 EXPECT_EQ(Dart_CObject::kTypedData, element->type); | 1912 EXPECT_EQ(Dart_CObject_kTypedData, element->type); |
1913 EXPECT_EQ(Dart_CObject::kUint8Array, element->value.as_typed_data.type); | 1913 EXPECT_EQ(Dart_TypedData_kUint8, element->value.as_typed_data.type); |
1914 EXPECT_EQ(256, element->value.as_typed_data.length); | 1914 EXPECT_EQ(256, element->value.as_typed_data.length); |
1915 } | 1915 } |
1916 } | 1916 } |
1917 { | 1917 { |
1918 // Generate a list of Uint8List views from Dart code. | 1918 // Generate a list of Uint8List views from Dart code. |
1919 ApiNativeScope scope; | 1919 ApiNativeScope scope; |
1920 Dart_CObject* root = | 1920 Dart_CObject* root = |
1921 GetDeserializedDartMessage(lib, "getTypedDataViewList"); | 1921 GetDeserializedDartMessage(lib, "getTypedDataViewList"); |
1922 EXPECT_NOTNULL(root); | 1922 EXPECT_NOTNULL(root); |
1923 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1923 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1924 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1924 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1925 for (int i = 0; i < kArrayLength; i++) { | 1925 for (int i = 0; i < kArrayLength; i++) { |
1926 Dart_CObject* element = root->value.as_array.values[i]; | 1926 Dart_CObject* element = root->value.as_array.values[i]; |
1927 EXPECT_EQ(root->value.as_array.values[0], element); | 1927 EXPECT_EQ(root->value.as_array.values[0], element); |
1928 EXPECT_EQ(Dart_CObject::kTypedData, element->type); | 1928 EXPECT_EQ(Dart_CObject_kTypedData, element->type); |
1929 EXPECT_EQ(Dart_CObject::kUint8Array, element->value.as_typed_data.type); | 1929 EXPECT_EQ(Dart_TypedData_kUint8, element->value.as_typed_data.type); |
1930 EXPECT_EQ(128, element->value.as_typed_data.length); | 1930 EXPECT_EQ(128, element->value.as_typed_data.length); |
1931 EXPECT_EQ(1, element->value.as_typed_data.values[0]); | 1931 EXPECT_EQ(1, element->value.as_typed_data.values[0]); |
1932 EXPECT_EQ(0, element->value.as_typed_data.values[1]); | 1932 EXPECT_EQ(0, element->value.as_typed_data.values[1]); |
1933 } | 1933 } |
1934 } | 1934 } |
1935 { | 1935 { |
1936 // Generate a list of objects of different types from Dart code. | 1936 // Generate a list of objects of different types from Dart code. |
1937 ApiNativeScope scope; | 1937 ApiNativeScope scope; |
1938 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList"); | 1938 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList"); |
1939 EXPECT_NOTNULL(root); | 1939 EXPECT_NOTNULL(root); |
1940 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1940 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1941 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1941 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1942 for (int i = 0; i < kArrayLength; i++) { | 1942 for (int i = 0; i < kArrayLength; i++) { |
1943 Dart_CObject* element = root->value.as_array.values[i]; | 1943 Dart_CObject* element = root->value.as_array.values[i]; |
1944 if ((i % 2) == 0) { | 1944 if ((i % 2) == 0) { |
1945 EXPECT_EQ(root->value.as_array.values[0], element); | 1945 EXPECT_EQ(root->value.as_array.values[0], element); |
1946 EXPECT_EQ(Dart_CObject::kString, element->type); | 1946 EXPECT_EQ(Dart_CObject_kString, element->type); |
1947 EXPECT_STREQ("A", element->value.as_string); | 1947 EXPECT_STREQ("A", element->value.as_string); |
1948 } else { | 1948 } else { |
1949 EXPECT_EQ(root->value.as_array.values[1], element); | 1949 EXPECT_EQ(root->value.as_array.values[1], element); |
1950 EXPECT_EQ(Dart_CObject::kDouble, element->type); | 1950 EXPECT_EQ(Dart_CObject_kDouble, element->type); |
1951 EXPECT_STREQ(2.72, element->value.as_double); | 1951 EXPECT_STREQ(2.72, element->value.as_double); |
1952 } | 1952 } |
1953 } | 1953 } |
1954 } | 1954 } |
1955 { | 1955 { |
1956 // Generate a list of objects of different types from Dart code. | 1956 // Generate a list of objects of different types from Dart code. |
1957 ApiNativeScope scope; | 1957 ApiNativeScope scope; |
1958 Dart_CObject* root = GetDeserializedDartMessage(lib, "getSelfRefList"); | 1958 Dart_CObject* root = GetDeserializedDartMessage(lib, "getSelfRefList"); |
1959 EXPECT_NOTNULL(root); | 1959 EXPECT_NOTNULL(root); |
1960 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1960 EXPECT_EQ(Dart_CObject_kArray, root->type); |
1961 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1961 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
1962 for (int i = 0; i < kArrayLength; i++) { | 1962 for (int i = 0; i < kArrayLength; i++) { |
1963 Dart_CObject* element = root->value.as_array.values[i]; | 1963 Dart_CObject* element = root->value.as_array.values[i]; |
1964 EXPECT_EQ(Dart_CObject::kArray, element->type); | 1964 EXPECT_EQ(Dart_CObject_kArray, element->type); |
1965 EXPECT_EQ(root, element); | 1965 EXPECT_EQ(root, element); |
1966 } | 1966 } |
1967 } | 1967 } |
1968 } | 1968 } |
1969 Dart_ExitScope(); | 1969 Dart_ExitScope(); |
1970 Dart_ShutdownIsolate(); | 1970 Dart_ShutdownIsolate(); |
1971 } | 1971 } |
1972 | 1972 |
1973 | 1973 |
1974 UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) { | 1974 UNIT_TEST_CASE(DartGeneratedArrayLiteralMessagesWithBackref) { |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2044 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 2044 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
2045 EXPECT_VALID(lib); | 2045 EXPECT_VALID(lib); |
2046 | 2046 |
2047 { | 2047 { |
2048 DARTSCOPE(isolate); | 2048 DARTSCOPE(isolate); |
2049 { | 2049 { |
2050 // Generate a list of strings from Dart code. | 2050 // Generate a list of strings from Dart code. |
2051 ApiNativeScope scope; | 2051 ApiNativeScope scope; |
2052 Dart_CObject* root = GetDeserializedDartMessage(lib, "getStringList"); | 2052 Dart_CObject* root = GetDeserializedDartMessage(lib, "getStringList"); |
2053 EXPECT_NOTNULL(root); | 2053 EXPECT_NOTNULL(root); |
2054 EXPECT_EQ(Dart_CObject::kArray, root->type); | 2054 EXPECT_EQ(Dart_CObject_kArray, root->type); |
2055 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 2055 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
2056 for (int i = 0; i < kArrayLength; i++) { | 2056 for (int i = 0; i < kArrayLength; i++) { |
2057 Dart_CObject* element = root->value.as_array.values[i]; | 2057 Dart_CObject* element = root->value.as_array.values[i]; |
2058 EXPECT_EQ(root->value.as_array.values[0], element); | 2058 EXPECT_EQ(root->value.as_array.values[0], element); |
2059 EXPECT_EQ(Dart_CObject::kString, element->type); | 2059 EXPECT_EQ(Dart_CObject_kString, element->type); |
2060 EXPECT_STREQ("Hello, world!", element->value.as_string); | 2060 EXPECT_STREQ("Hello, world!", element->value.as_string); |
2061 } | 2061 } |
2062 } | 2062 } |
2063 { | 2063 { |
2064 // Generate a list of medium ints from Dart code. | 2064 // Generate a list of medium ints from Dart code. |
2065 ApiNativeScope scope; | 2065 ApiNativeScope scope; |
2066 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMintList"); | 2066 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMintList"); |
2067 EXPECT_NOTNULL(root); | 2067 EXPECT_NOTNULL(root); |
2068 EXPECT_EQ(Dart_CObject::kArray, root->type); | 2068 EXPECT_EQ(Dart_CObject_kArray, root->type); |
2069 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 2069 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
2070 for (int i = 0; i < kArrayLength; i++) { | 2070 for (int i = 0; i < kArrayLength; i++) { |
2071 Dart_CObject* element = root->value.as_array.values[i]; | 2071 Dart_CObject* element = root->value.as_array.values[i]; |
2072 EXPECT_EQ(root->value.as_array.values[0], element); | 2072 EXPECT_EQ(root->value.as_array.values[0], element); |
2073 EXPECT_EQ(Dart_CObject::kInt64, element->type); | 2073 EXPECT_EQ(Dart_CObject_kInt64, element->type); |
2074 EXPECT_EQ(DART_INT64_C(0x7FFFFFFFFFFFFFFF), element->value.as_int64); | 2074 EXPECT_EQ(DART_INT64_C(0x7FFFFFFFFFFFFFFF), element->value.as_int64); |
2075 } | 2075 } |
2076 } | 2076 } |
2077 { | 2077 { |
2078 // Generate a list of bigints from Dart code. | 2078 // Generate a list of bigints from Dart code. |
2079 ApiNativeScope scope; | 2079 ApiNativeScope scope; |
2080 Dart_CObject* root = GetDeserializedDartMessage(lib, "getBigintList"); | 2080 Dart_CObject* root = GetDeserializedDartMessage(lib, "getBigintList"); |
2081 EXPECT_NOTNULL(root); | 2081 EXPECT_NOTNULL(root); |
2082 EXPECT_EQ(Dart_CObject::kArray, root->type); | 2082 EXPECT_EQ(Dart_CObject_kArray, root->type); |
2083 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 2083 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
2084 for (int i = 0; i < kArrayLength; i++) { | 2084 for (int i = 0; i < kArrayLength; i++) { |
2085 Dart_CObject* element = root->value.as_array.values[i]; | 2085 Dart_CObject* element = root->value.as_array.values[i]; |
2086 EXPECT_EQ(root->value.as_array.values[0], element); | 2086 EXPECT_EQ(root->value.as_array.values[0], element); |
2087 EXPECT_EQ(Dart_CObject::kBigint, element->type); | 2087 EXPECT_EQ(Dart_CObject_kBigint, element->type); |
2088 EXPECT_STREQ("1234567890123456789012345678901234567890", | 2088 EXPECT_STREQ("1234567890123456789012345678901234567890", |
2089 element->value.as_bigint); | 2089 element->value.as_bigint); |
2090 } | 2090 } |
2091 } | 2091 } |
2092 { | 2092 { |
2093 // Generate a list of doubles from Dart code. | 2093 // Generate a list of doubles from Dart code. |
2094 ApiNativeScope scope; | 2094 ApiNativeScope scope; |
2095 Dart_CObject* root = GetDeserializedDartMessage(lib, "getDoubleList"); | 2095 Dart_CObject* root = GetDeserializedDartMessage(lib, "getDoubleList"); |
2096 EXPECT_NOTNULL(root); | 2096 EXPECT_NOTNULL(root); |
2097 EXPECT_EQ(Dart_CObject::kArray, root->type); | 2097 EXPECT_EQ(Dart_CObject_kArray, root->type); |
2098 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 2098 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
2099 for (int i = 0; i < kArrayLength; i++) { | 2099 for (int i = 0; i < kArrayLength; i++) { |
2100 Dart_CObject* element = root->value.as_array.values[i]; | 2100 Dart_CObject* element = root->value.as_array.values[i]; |
2101 EXPECT_EQ(root->value.as_array.values[0], element); | 2101 EXPECT_EQ(root->value.as_array.values[0], element); |
2102 EXPECT_EQ(Dart_CObject::kDouble, element->type); | 2102 EXPECT_EQ(Dart_CObject_kDouble, element->type); |
2103 EXPECT_EQ(3.14, element->value.as_double); | 2103 EXPECT_EQ(3.14, element->value.as_double); |
2104 } | 2104 } |
2105 } | 2105 } |
2106 { | 2106 { |
2107 // Generate a list of Uint8Lists from Dart code. | 2107 // Generate a list of Uint8Lists from Dart code. |
2108 ApiNativeScope scope; | 2108 ApiNativeScope scope; |
2109 Dart_CObject* root = GetDeserializedDartMessage(lib, "getTypedDataList"); | 2109 Dart_CObject* root = GetDeserializedDartMessage(lib, "getTypedDataList"); |
2110 EXPECT_NOTNULL(root); | 2110 EXPECT_NOTNULL(root); |
2111 EXPECT_EQ(Dart_CObject::kArray, root->type); | 2111 EXPECT_EQ(Dart_CObject_kArray, root->type); |
2112 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 2112 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
2113 for (int i = 0; i < kArrayLength; i++) { | 2113 for (int i = 0; i < kArrayLength; i++) { |
2114 Dart_CObject* element = root->value.as_array.values[i]; | 2114 Dart_CObject* element = root->value.as_array.values[i]; |
2115 EXPECT_EQ(root->value.as_array.values[0], element); | 2115 EXPECT_EQ(root->value.as_array.values[0], element); |
2116 EXPECT_EQ(Dart_CObject::kTypedData, element->type); | 2116 EXPECT_EQ(Dart_CObject_kTypedData, element->type); |
2117 EXPECT_EQ(Dart_CObject::kUint8Array, element->value.as_typed_data.type); | 2117 EXPECT_EQ(Dart_TypedData_kUint8, element->value.as_typed_data.type); |
2118 EXPECT_EQ(256, element->value.as_typed_data.length); | 2118 EXPECT_EQ(256, element->value.as_typed_data.length); |
2119 } | 2119 } |
2120 } | 2120 } |
2121 { | 2121 { |
2122 // Generate a list of Uint8List views from Dart code. | 2122 // Generate a list of Uint8List views from Dart code. |
2123 ApiNativeScope scope; | 2123 ApiNativeScope scope; |
2124 Dart_CObject* root = | 2124 Dart_CObject* root = |
2125 GetDeserializedDartMessage(lib, "getTypedDataViewList"); | 2125 GetDeserializedDartMessage(lib, "getTypedDataViewList"); |
2126 EXPECT_NOTNULL(root); | 2126 EXPECT_NOTNULL(root); |
2127 EXPECT_EQ(Dart_CObject::kArray, root->type); | 2127 EXPECT_EQ(Dart_CObject_kArray, root->type); |
2128 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 2128 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
2129 for (int i = 0; i < kArrayLength; i++) { | 2129 for (int i = 0; i < kArrayLength; i++) { |
2130 Dart_CObject* element = root->value.as_array.values[i]; | 2130 Dart_CObject* element = root->value.as_array.values[i]; |
2131 EXPECT_EQ(root->value.as_array.values[0], element); | 2131 EXPECT_EQ(root->value.as_array.values[0], element); |
2132 EXPECT_EQ(Dart_CObject::kTypedData, element->type); | 2132 EXPECT_EQ(Dart_CObject_kTypedData, element->type); |
2133 EXPECT_EQ(Dart_CObject::kUint8Array, element->value.as_typed_data.type); | 2133 EXPECT_EQ(Dart_TypedData_kUint8, element->value.as_typed_data.type); |
2134 EXPECT_EQ(128, element->value.as_typed_data.length); | 2134 EXPECT_EQ(128, element->value.as_typed_data.length); |
2135 EXPECT_EQ(1, element->value.as_typed_data.values[0]); | 2135 EXPECT_EQ(1, element->value.as_typed_data.values[0]); |
2136 EXPECT_EQ(0, element->value.as_typed_data.values[1]); | 2136 EXPECT_EQ(0, element->value.as_typed_data.values[1]); |
2137 } | 2137 } |
2138 } | 2138 } |
2139 { | 2139 { |
2140 // Generate a list of objects of different types from Dart code. | 2140 // Generate a list of objects of different types from Dart code. |
2141 ApiNativeScope scope; | 2141 ApiNativeScope scope; |
2142 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList"); | 2142 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList"); |
2143 EXPECT_NOTNULL(root); | 2143 EXPECT_NOTNULL(root); |
2144 EXPECT_EQ(Dart_CObject::kArray, root->type); | 2144 EXPECT_EQ(Dart_CObject_kArray, root->type); |
2145 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 2145 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
2146 for (int i = 0; i < kArrayLength; i++) { | 2146 for (int i = 0; i < kArrayLength; i++) { |
2147 Dart_CObject* element = root->value.as_array.values[i]; | 2147 Dart_CObject* element = root->value.as_array.values[i]; |
2148 if ((i % 2) == 0) { | 2148 if ((i % 2) == 0) { |
2149 EXPECT_EQ(root->value.as_array.values[0], element); | 2149 EXPECT_EQ(root->value.as_array.values[0], element); |
2150 EXPECT_EQ(Dart_CObject::kString, element->type); | 2150 EXPECT_EQ(Dart_CObject_kString, element->type); |
2151 EXPECT_STREQ(".", element->value.as_string); | 2151 EXPECT_STREQ(".", element->value.as_string); |
2152 } else { | 2152 } else { |
2153 EXPECT_EQ(root->value.as_array.values[1], element); | 2153 EXPECT_EQ(root->value.as_array.values[1], element); |
2154 EXPECT_EQ(Dart_CObject::kDouble, element->type); | 2154 EXPECT_EQ(Dart_CObject_kDouble, element->type); |
2155 EXPECT_STREQ(2.72, element->value.as_double); | 2155 EXPECT_STREQ(2.72, element->value.as_double); |
2156 } | 2156 } |
2157 } | 2157 } |
2158 } | 2158 } |
2159 { | 2159 { |
2160 // Generate a list of objects of different types from Dart code. | 2160 // Generate a list of objects of different types from Dart code. |
2161 ApiNativeScope scope; | 2161 ApiNativeScope scope; |
2162 Dart_CObject* root = GetDeserializedDartMessage(lib, "getSelfRefList"); | 2162 Dart_CObject* root = GetDeserializedDartMessage(lib, "getSelfRefList"); |
2163 EXPECT_NOTNULL(root); | 2163 EXPECT_NOTNULL(root); |
2164 EXPECT_EQ(Dart_CObject::kArray, root->type); | 2164 EXPECT_EQ(Dart_CObject_kArray, root->type); |
2165 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 2165 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
2166 for (int i = 0; i < kArrayLength; i++) { | 2166 for (int i = 0; i < kArrayLength; i++) { |
2167 Dart_CObject* element = root->value.as_array.values[i]; | 2167 Dart_CObject* element = root->value.as_array.values[i]; |
2168 EXPECT_EQ(Dart_CObject::kArray, element->type); | 2168 EXPECT_EQ(Dart_CObject_kArray, element->type); |
2169 EXPECT_EQ(root, element); | 2169 EXPECT_EQ(root, element); |
2170 } | 2170 } |
2171 } | 2171 } |
2172 } | 2172 } |
2173 Dart_ExitScope(); | 2173 Dart_ExitScope(); |
2174 Dart_ShutdownIsolate(); | 2174 Dart_ShutdownIsolate(); |
2175 } | 2175 } |
2176 | 2176 |
2177 | 2177 |
2178 static void CheckTypedData(Dart_CObject* object, | 2178 static void CheckTypedData(Dart_CObject* object, |
2179 Dart_CObject::TypedDataType typed_data_type, | 2179 Dart_TypedData_Type typed_data_type, |
2180 int len) { | 2180 int len) { |
2181 EXPECT_EQ(Dart_CObject::kTypedData, object->type); | 2181 EXPECT_EQ(Dart_CObject_kTypedData, object->type); |
2182 EXPECT_EQ(typed_data_type, object->value.as_typed_data.type); | 2182 EXPECT_EQ(typed_data_type, object->value.as_typed_data.type); |
2183 EXPECT_EQ(len, object->value.as_typed_data.length); | 2183 EXPECT_EQ(len, object->value.as_typed_data.length); |
2184 } | 2184 } |
2185 | 2185 |
2186 UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) { | 2186 UNIT_TEST_CASE(DartGeneratedListMessagesWithTypedData) { |
2187 static const char* kScriptChars = | 2187 static const char* kScriptChars = |
2188 "import 'dart:typed_data';\n" | 2188 "import 'dart:typed_data';\n" |
2189 "getTypedDataList() {\n" | 2189 "getTypedDataList() {\n" |
2190 " var list = new List(10);\n" | 2190 " var list = new List(10);\n" |
2191 " var index = 0;\n" | 2191 " var index = 0;\n" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2263 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); | 2263 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); |
2264 EXPECT_VALID(lib); | 2264 EXPECT_VALID(lib); |
2265 | 2265 |
2266 { | 2266 { |
2267 DARTSCOPE(isolate); | 2267 DARTSCOPE(isolate); |
2268 { | 2268 { |
2269 // Generate a list of Uint8Lists from Dart code. | 2269 // Generate a list of Uint8Lists from Dart code. |
2270 ApiNativeScope scope; | 2270 ApiNativeScope scope; |
2271 Dart_CObject* root = GetDeserializedDartMessage(lib, "getTypedDataList"); | 2271 Dart_CObject* root = GetDeserializedDartMessage(lib, "getTypedDataList"); |
2272 EXPECT_NOTNULL(root); | 2272 EXPECT_NOTNULL(root); |
2273 EXPECT_EQ(Dart_CObject::kArray, root->type); | 2273 EXPECT_EQ(Dart_CObject_kArray, root->type); |
2274 struct { | 2274 struct { |
2275 Dart_CObject::TypedDataType type; | 2275 Dart_TypedData_Type type; |
2276 int size; | 2276 int size; |
2277 } expected[] = { | 2277 } expected[] = { |
2278 { Dart_CObject::kInt8Array, 256}, | 2278 { Dart_TypedData_kInt8, 256}, |
2279 { Dart_CObject::kUint8Array, 256}, | 2279 { Dart_TypedData_kUint8, 256}, |
2280 { Dart_CObject::kInt16Array, 512}, | 2280 { Dart_TypedData_kInt16, 512}, |
2281 { Dart_CObject::kUint16Array, 512}, | 2281 { Dart_TypedData_kUint16, 512}, |
2282 { Dart_CObject::kInt32Array, 1024}, | 2282 { Dart_TypedData_kInt32, 1024}, |
2283 { Dart_CObject::kUint32Array, 1024}, | 2283 { Dart_TypedData_kUint32, 1024}, |
2284 { Dart_CObject::kInt64Array, 2048}, | 2284 { Dart_TypedData_kInt64, 2048}, |
2285 { Dart_CObject::kUint64Array, 2048}, | 2285 { Dart_TypedData_kUint64, 2048}, |
2286 { Dart_CObject::kFloat32Array, 1024}, | 2286 { Dart_TypedData_kFloat32, 1024}, |
2287 { Dart_CObject::kFloat64Array, 2048}, | 2287 { Dart_TypedData_kFloat64, 2048}, |
2288 { Dart_CObject::kNumberOfTypedDataTypes, -1 } | 2288 { Dart_TypedData_kInvalid, -1 } |
2289 }; | 2289 }; |
2290 | 2290 |
2291 int i = 0; | 2291 int i = 0; |
2292 while (expected[i].type != Dart_CObject::kNumberOfTypedDataTypes) { | 2292 while (expected[i].type != Dart_TypedData_kInvalid) { |
2293 CheckTypedData(root->value.as_array.values[i], | 2293 CheckTypedData(root->value.as_array.values[i], |
2294 expected[i].type, | 2294 expected[i].type, |
2295 expected[i].size); | 2295 expected[i].size); |
2296 i++; | 2296 i++; |
2297 } | 2297 } |
2298 EXPECT_EQ(i, root->value.as_array.length); | 2298 EXPECT_EQ(i, root->value.as_array.length); |
2299 } | 2299 } |
2300 { | 2300 { |
2301 // Generate a list of Uint8List views from Dart code. | 2301 // Generate a list of Uint8List views from Dart code. |
2302 | 2302 |
2303 ApiNativeScope scope; | 2303 ApiNativeScope scope; |
2304 Dart_CObject* root = | 2304 Dart_CObject* root = |
2305 GetDeserializedDartMessage(lib, "getTypedDataViewList"); | 2305 GetDeserializedDartMessage(lib, "getTypedDataViewList"); |
2306 EXPECT_NOTNULL(root); | 2306 EXPECT_NOTNULL(root); |
2307 EXPECT_EQ(Dart_CObject::kArray, root->type); | 2307 EXPECT_EQ(Dart_CObject_kArray, root->type); |
2308 struct { | 2308 struct { |
2309 Dart_CObject::TypedDataType type; | 2309 Dart_TypedData_Type type; |
2310 int size; | 2310 int size; |
2311 } expected[] = { | 2311 } expected[] = { |
2312 { Dart_CObject::kInt8Array, 256}, | 2312 { Dart_TypedData_kInt8, 256}, |
2313 { Dart_CObject::kUint8Array, 256}, | 2313 { Dart_TypedData_kUint8, 256}, |
2314 { Dart_CObject::kInt16Array, 512}, | 2314 { Dart_TypedData_kInt16, 512}, |
2315 { Dart_CObject::kUint16Array, 512}, | 2315 { Dart_TypedData_kUint16, 512}, |
2316 { Dart_CObject::kInt32Array, 1024}, | 2316 { Dart_TypedData_kInt32, 1024}, |
2317 { Dart_CObject::kUint32Array, 1024}, | 2317 { Dart_TypedData_kUint32, 1024}, |
2318 { Dart_CObject::kInt64Array, 2048}, | 2318 { Dart_TypedData_kInt64, 2048}, |
2319 { Dart_CObject::kUint64Array, 2048}, | 2319 { Dart_TypedData_kUint64, 2048}, |
2320 { Dart_CObject::kFloat32Array, 1024}, | 2320 { Dart_TypedData_kFloat32, 1024}, |
2321 { Dart_CObject::kFloat64Array, 2048}, | 2321 { Dart_TypedData_kFloat64, 2048}, |
2322 | 2322 |
2323 { Dart_CObject::kInt8Array, 512}, | 2323 { Dart_TypedData_kInt8, 512}, |
2324 { Dart_CObject::kUint8Array, 512}, | 2324 { Dart_TypedData_kUint8, 512}, |
2325 { Dart_CObject::kInt8Array, 1024}, | 2325 { Dart_TypedData_kInt8, 1024}, |
2326 { Dart_CObject::kUint8Array, 1024}, | 2326 { Dart_TypedData_kUint8, 1024}, |
2327 { Dart_CObject::kInt8Array, 2048}, | 2327 { Dart_TypedData_kInt8, 2048}, |
2328 { Dart_CObject::kUint8Array, 2048}, | 2328 { Dart_TypedData_kUint8, 2048}, |
2329 { Dart_CObject::kInt8Array, 1024}, | 2329 { Dart_TypedData_kInt8, 1024}, |
2330 { Dart_CObject::kUint8Array, 1024}, | 2330 { Dart_TypedData_kUint8, 1024}, |
2331 { Dart_CObject::kInt8Array, 2048}, | 2331 { Dart_TypedData_kInt8, 2048}, |
2332 { Dart_CObject::kUint8Array, 2048}, | 2332 { Dart_TypedData_kUint8, 2048}, |
2333 | 2333 |
2334 { Dart_CObject::kInt16Array, 256}, | 2334 { Dart_TypedData_kInt16, 256}, |
2335 { Dart_CObject::kUint16Array, 256}, | 2335 { Dart_TypedData_kUint16, 256}, |
2336 { Dart_CObject::kInt16Array, 1024}, | 2336 { Dart_TypedData_kInt16, 1024}, |
2337 { Dart_CObject::kUint16Array, 1024}, | 2337 { Dart_TypedData_kUint16, 1024}, |
2338 { Dart_CObject::kInt16Array, 2048}, | 2338 { Dart_TypedData_kInt16, 2048}, |
2339 { Dart_CObject::kUint16Array, 2048}, | 2339 { Dart_TypedData_kUint16, 2048}, |
2340 { Dart_CObject::kInt16Array, 1024}, | 2340 { Dart_TypedData_kInt16, 1024}, |
2341 { Dart_CObject::kUint16Array, 1024}, | 2341 { Dart_TypedData_kUint16, 1024}, |
2342 { Dart_CObject::kInt16Array, 2048}, | 2342 { Dart_TypedData_kInt16, 2048}, |
2343 { Dart_CObject::kUint16Array, 2048}, | 2343 { Dart_TypedData_kUint16, 2048}, |
2344 | 2344 |
2345 { Dart_CObject::kNumberOfTypedDataTypes, -1 } | 2345 { Dart_TypedData_kInvalid, -1 } |
2346 }; | 2346 }; |
2347 | 2347 |
2348 int i = 0; | 2348 int i = 0; |
2349 while (expected[i].type != Dart_CObject::kNumberOfTypedDataTypes) { | 2349 while (expected[i].type != Dart_TypedData_kInvalid) { |
2350 CheckTypedData(root->value.as_array.values[i], | 2350 CheckTypedData(root->value.as_array.values[i], |
2351 expected[i].type, | 2351 expected[i].type, |
2352 expected[i].size); | 2352 expected[i].size); |
2353 i++; | 2353 i++; |
2354 } | 2354 } |
2355 EXPECT_EQ(i, root->value.as_array.length); | 2355 EXPECT_EQ(i, root->value.as_array.length); |
2356 } | 2356 } |
2357 { | 2357 { |
2358 // Generate a list of Uint8Lists from Dart code. | 2358 // Generate a list of Uint8Lists from Dart code. |
2359 ApiNativeScope scope; | 2359 ApiNativeScope scope; |
2360 Dart_CObject* root = | 2360 Dart_CObject* root = |
2361 GetDeserializedDartMessage(lib, "getMultipleTypedDataViewList"); | 2361 GetDeserializedDartMessage(lib, "getMultipleTypedDataViewList"); |
2362 EXPECT_NOTNULL(root); | 2362 EXPECT_NOTNULL(root); |
2363 EXPECT_EQ(Dart_CObject::kArray, root->type); | 2363 EXPECT_EQ(Dart_CObject_kArray, root->type); |
2364 struct { | 2364 struct { |
2365 Dart_CObject::TypedDataType type; | 2365 Dart_TypedData_Type type; |
2366 int size; | 2366 int size; |
2367 } expected[] = { | 2367 } expected[] = { |
2368 { Dart_CObject::kInt8Array, 256}, | 2368 { Dart_TypedData_kInt8, 256}, |
2369 { Dart_CObject::kUint8Array, 256}, | 2369 { Dart_TypedData_kUint8, 256}, |
2370 { Dart_CObject::kInt16Array, 256}, | 2370 { Dart_TypedData_kInt16, 256}, |
2371 { Dart_CObject::kUint16Array, 256}, | 2371 { Dart_TypedData_kUint16, 256}, |
2372 { Dart_CObject::kInt32Array, 256}, | 2372 { Dart_TypedData_kInt32, 256}, |
2373 { Dart_CObject::kUint32Array, 256}, | 2373 { Dart_TypedData_kUint32, 256}, |
2374 { Dart_CObject::kInt64Array, 256}, | 2374 { Dart_TypedData_kInt64, 256}, |
2375 { Dart_CObject::kUint64Array, 256}, | 2375 { Dart_TypedData_kUint64, 256}, |
2376 { Dart_CObject::kFloat32Array, 256}, | 2376 { Dart_TypedData_kFloat32, 256}, |
2377 { Dart_CObject::kFloat64Array, 256}, | 2377 { Dart_TypedData_kFloat64, 256}, |
2378 { Dart_CObject::kNumberOfTypedDataTypes, -1 } | 2378 { Dart_TypedData_kInvalid, -1 } |
2379 }; | 2379 }; |
2380 | 2380 |
2381 int i = 0; | 2381 int i = 0; |
2382 while (expected[i].type != Dart_CObject::kNumberOfTypedDataTypes) { | 2382 while (expected[i].type != Dart_TypedData_kInvalid) { |
2383 CheckTypedData(root->value.as_array.values[i], | 2383 CheckTypedData(root->value.as_array.values[i], |
2384 expected[i].type, | 2384 expected[i].type, |
2385 expected[i].size); | 2385 expected[i].size); |
2386 | 2386 |
2387 // All views point to the same data. | 2387 // All views point to the same data. |
2388 EXPECT_EQ(root->value.as_array.values[0]->value.as_typed_data.values, | 2388 EXPECT_EQ(root->value.as_array.values[0]->value.as_typed_data.values, |
2389 root->value.as_array.values[i]->value.as_typed_data.values); | 2389 root->value.as_array.values[i]->value.as_typed_data.values); |
2390 i++; | 2390 i++; |
2391 } | 2391 } |
2392 EXPECT_EQ(i, root->value.as_array.length); | 2392 EXPECT_EQ(i, root->value.as_array.length); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2428 Dart_Handle result = Dart_GetField(send_port, NewString("_id")); | 2428 Dart_Handle result = Dart_GetField(send_port, NewString("_id")); |
2429 ASSERT(!Dart_IsError(result)); | 2429 ASSERT(!Dart_IsError(result)); |
2430 ASSERT(Dart_IsInteger(result)); | 2430 ASSERT(Dart_IsInteger(result)); |
2431 int64_t send_port_id; | 2431 int64_t send_port_id; |
2432 Dart_Handle result2 = Dart_IntegerToInt64(result, &send_port_id); | 2432 Dart_Handle result2 = Dart_IntegerToInt64(result, &send_port_id); |
2433 ASSERT(!Dart_IsError(result2)); | 2433 ASSERT(!Dart_IsError(result2)); |
2434 | 2434 |
2435 // Setup single object message. | 2435 // Setup single object message. |
2436 Dart_CObject object; | 2436 Dart_CObject object; |
2437 | 2437 |
2438 object.type = Dart_CObject::kNull; | 2438 object.type = Dart_CObject_kNull; |
2439 EXPECT(Dart_PostCObject(send_port_id, &object)); | 2439 EXPECT(Dart_PostCObject(send_port_id, &object)); |
2440 | 2440 |
2441 object.type = Dart_CObject::kBool; | 2441 object.type = Dart_CObject_kBool; |
2442 object.value.as_bool = true; | 2442 object.value.as_bool = true; |
2443 EXPECT(Dart_PostCObject(send_port_id, &object)); | 2443 EXPECT(Dart_PostCObject(send_port_id, &object)); |
2444 | 2444 |
2445 object.type = Dart_CObject::kBool; | 2445 object.type = Dart_CObject_kBool; |
2446 object.value.as_bool = false; | 2446 object.value.as_bool = false; |
2447 EXPECT(Dart_PostCObject(send_port_id, &object)); | 2447 EXPECT(Dart_PostCObject(send_port_id, &object)); |
2448 | 2448 |
2449 object.type = Dart_CObject::kInt32; | 2449 object.type = Dart_CObject_kInt32; |
2450 object.value.as_int32 = 123; | 2450 object.value.as_int32 = 123; |
2451 EXPECT(Dart_PostCObject(send_port_id, &object)); | 2451 EXPECT(Dart_PostCObject(send_port_id, &object)); |
2452 | 2452 |
2453 object.type = Dart_CObject::kString; | 2453 object.type = Dart_CObject_kString; |
2454 object.value.as_string = const_cast<char*>("456"); | 2454 object.value.as_string = const_cast<char*>("456"); |
2455 EXPECT(Dart_PostCObject(send_port_id, &object)); | 2455 EXPECT(Dart_PostCObject(send_port_id, &object)); |
2456 | 2456 |
2457 object.type = Dart_CObject::kString; | 2457 object.type = Dart_CObject_kString; |
2458 object.value.as_string = const_cast<char*>("æøå"); | 2458 object.value.as_string = const_cast<char*>("æøå"); |
2459 EXPECT(Dart_PostCObject(send_port_id, &object)); | 2459 EXPECT(Dart_PostCObject(send_port_id, &object)); |
2460 | 2460 |
2461 object.type = Dart_CObject::kDouble; | 2461 object.type = Dart_CObject_kDouble; |
2462 object.value.as_double = 3.14; | 2462 object.value.as_double = 3.14; |
2463 EXPECT(Dart_PostCObject(send_port_id, &object)); | 2463 EXPECT(Dart_PostCObject(send_port_id, &object)); |
2464 | 2464 |
2465 object.type = Dart_CObject::kArray; | 2465 object.type = Dart_CObject_kArray; |
2466 object.value.as_array.length = 0; | 2466 object.value.as_array.length = 0; |
2467 EXPECT(Dart_PostCObject(send_port_id, &object)); | 2467 EXPECT(Dart_PostCObject(send_port_id, &object)); |
2468 | 2468 |
2469 static const int kArrayLength = 10; | 2469 static const int kArrayLength = 10; |
2470 Dart_CObject* array = | 2470 Dart_CObject* array = |
2471 reinterpret_cast<Dart_CObject*>( | 2471 reinterpret_cast<Dart_CObject*>( |
2472 Dart_ScopeAllocate( | 2472 Dart_ScopeAllocate( |
2473 sizeof(Dart_CObject) + sizeof(Dart_CObject*) * kArrayLength)); //
NOLINT | 2473 sizeof(Dart_CObject) + sizeof(Dart_CObject*) * kArrayLength)); //
NOLINT |
2474 array->type = Dart_CObject::kArray; | 2474 array->type = Dart_CObject_kArray; |
2475 array->value.as_array.length = kArrayLength; | 2475 array->value.as_array.length = kArrayLength; |
2476 array->value.as_array.values = | 2476 array->value.as_array.values = |
2477 reinterpret_cast<Dart_CObject**>(array + 1); | 2477 reinterpret_cast<Dart_CObject**>(array + 1); |
2478 for (int i = 0; i < kArrayLength; i++) { | 2478 for (int i = 0; i < kArrayLength; i++) { |
2479 Dart_CObject* element = | 2479 Dart_CObject* element = |
2480 reinterpret_cast<Dart_CObject*>( | 2480 reinterpret_cast<Dart_CObject*>( |
2481 Dart_ScopeAllocate(sizeof(Dart_CObject))); | 2481 Dart_ScopeAllocate(sizeof(Dart_CObject))); |
2482 element->type = Dart_CObject::kInt32; | 2482 element->type = Dart_CObject_kInt32; |
2483 element->value.as_int32 = i; | 2483 element->value.as_int32 = i; |
2484 array->value.as_array.values[i] = element; | 2484 array->value.as_array.values[i] = element; |
2485 } | 2485 } |
2486 EXPECT(Dart_PostCObject(send_port_id, array)); | 2486 EXPECT(Dart_PostCObject(send_port_id, array)); |
2487 | 2487 |
2488 result = Dart_RunLoop(); | 2488 result = Dart_RunLoop(); |
2489 EXPECT(Dart_IsError(result)); | 2489 EXPECT(Dart_IsError(result)); |
2490 EXPECT(Dart_ErrorHasException(result)); | 2490 EXPECT(Dart_ErrorHasException(result)); |
2491 EXPECT_SUBSTRING("Exception: nulltruefalse123456æøå3.14[]100123456789\n", | 2491 EXPECT_SUBSTRING("Exception: nulltruefalse123456æøå3.14[]100123456789\n", |
2492 Dart_GetError(result)); | 2492 Dart_GetError(result)); |
2493 | 2493 |
2494 Dart_ExitScope(); | 2494 Dart_ExitScope(); |
2495 } | 2495 } |
2496 | 2496 |
2497 } // namespace dart | 2497 } // namespace dart |
OLD | NEW |