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 "platform/globals.h" | 5 #include "platform/globals.h" |
6 | 6 |
7 #include "include/dart_tools_api.h" | 7 #include "include/dart_tools_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/class_finalizer.h" | 9 #include "vm/class_finalizer.h" |
10 #include "vm/dart_api_impl.h" | 10 #include "vm/dart_api_impl.h" |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 | 145 |
146 static void ExpectEncodeFail(Dart_CObject* root) { | 146 static void ExpectEncodeFail(Dart_CObject* root) { |
147 uint8_t* buffer = NULL; | 147 uint8_t* buffer = NULL; |
148 ApiMessageWriter writer(&buffer, &malloc_allocator); | 148 ApiMessageWriter writer(&buffer, &malloc_allocator); |
149 const bool result = writer.WriteCMessage(root); | 149 const bool result = writer.WriteCMessage(root); |
150 EXPECT_EQ(false, result); | 150 EXPECT_EQ(false, result); |
151 } | 151 } |
152 | 152 |
153 | 153 |
154 TEST_CASE(SerializeNull) { | 154 TEST_CASE(SerializeNull) { |
155 StackZone zone(Isolate::Current()); | 155 StackZone zone(Thread::Current()); |
156 | 156 |
157 // Write snapshot with object content. | 157 // Write snapshot with object content. |
158 const Object& null_object = Object::Handle(); | 158 const Object& null_object = Object::Handle(); |
159 uint8_t* buffer; | 159 uint8_t* buffer; |
160 MessageWriter writer(&buffer, &zone_allocator, true); | 160 MessageWriter writer(&buffer, &zone_allocator, true); |
161 writer.WriteMessage(null_object); | 161 writer.WriteMessage(null_object); |
162 intptr_t buffer_len = writer.BytesWritten(); | 162 intptr_t buffer_len = writer.BytesWritten(); |
163 | 163 |
164 // Read object back from the snapshot. | 164 // Read object back from the snapshot. |
165 MessageSnapshotReader reader(buffer, | 165 MessageSnapshotReader reader(buffer, |
166 buffer_len, | 166 buffer_len, |
167 Isolate::Current(), | 167 Isolate::Current(), |
168 zone.GetZone()); | 168 zone.GetZone()); |
169 const Object& serialized_object = Object::Handle(reader.ReadObject()); | 169 const Object& serialized_object = Object::Handle(reader.ReadObject()); |
170 EXPECT(Equals(null_object, serialized_object)); | 170 EXPECT(Equals(null_object, serialized_object)); |
171 | 171 |
172 // Read object back from the snapshot into a C structure. | 172 // Read object back from the snapshot into a C structure. |
173 ApiNativeScope scope; | 173 ApiNativeScope scope; |
174 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 174 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
175 Dart_CObject* root = api_reader.ReadMessage(); | 175 Dart_CObject* root = api_reader.ReadMessage(); |
176 EXPECT_NOTNULL(root); | 176 EXPECT_NOTNULL(root); |
177 EXPECT_EQ(Dart_CObject_kNull, root->type); | 177 EXPECT_EQ(Dart_CObject_kNull, root->type); |
178 CheckEncodeDecodeMessage(root); | 178 CheckEncodeDecodeMessage(root); |
179 } | 179 } |
180 | 180 |
181 | 181 |
182 TEST_CASE(SerializeSmi1) { | 182 TEST_CASE(SerializeSmi1) { |
183 StackZone zone(Isolate::Current()); | 183 StackZone zone(Thread::Current()); |
184 | 184 |
185 // Write snapshot with object content. | 185 // Write snapshot with object content. |
186 const Smi& smi = Smi::Handle(Smi::New(124)); | 186 const Smi& smi = Smi::Handle(Smi::New(124)); |
187 uint8_t* buffer; | 187 uint8_t* buffer; |
188 MessageWriter writer(&buffer, &zone_allocator, true); | 188 MessageWriter writer(&buffer, &zone_allocator, true); |
189 writer.WriteMessage(smi); | 189 writer.WriteMessage(smi); |
190 intptr_t buffer_len = writer.BytesWritten(); | 190 intptr_t buffer_len = writer.BytesWritten(); |
191 | 191 |
192 // Read object back from the snapshot. | 192 // Read object back from the snapshot. |
193 MessageSnapshotReader reader(buffer, | 193 MessageSnapshotReader reader(buffer, |
194 buffer_len, | 194 buffer_len, |
195 Isolate::Current(), | 195 Isolate::Current(), |
196 zone.GetZone()); | 196 zone.GetZone()); |
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 TEST_CASE(SerializeSmi2) { | 211 TEST_CASE(SerializeSmi2) { |
212 StackZone zone(Isolate::Current()); | 212 StackZone zone(Thread::Current()); |
213 | 213 |
214 // Write snapshot with object content. | 214 // Write snapshot with object content. |
215 const Smi& smi = Smi::Handle(Smi::New(-1)); | 215 const Smi& smi = Smi::Handle(Smi::New(-1)); |
216 uint8_t* buffer; | 216 uint8_t* buffer; |
217 MessageWriter writer(&buffer, &zone_allocator, true); | 217 MessageWriter writer(&buffer, &zone_allocator, true); |
218 writer.WriteMessage(smi); | 218 writer.WriteMessage(smi); |
219 intptr_t buffer_len = writer.BytesWritten(); | 219 intptr_t buffer_len = writer.BytesWritten(); |
220 | 220 |
221 // Read object back from the snapshot. | 221 // Read object back from the snapshot. |
222 MessageSnapshotReader reader(buffer, | 222 MessageSnapshotReader reader(buffer, |
(...skipping 16 matching lines...) Expand all Loading... |
239 | 239 |
240 Dart_CObject* SerializeAndDeserializeMint(const Mint& mint) { | 240 Dart_CObject* SerializeAndDeserializeMint(const Mint& mint) { |
241 // Write snapshot with object content. | 241 // Write snapshot with object content. |
242 uint8_t* buffer; | 242 uint8_t* buffer; |
243 MessageWriter writer(&buffer, &zone_allocator, true); | 243 MessageWriter writer(&buffer, &zone_allocator, true); |
244 writer.WriteMessage(mint); | 244 writer.WriteMessage(mint); |
245 intptr_t buffer_len = writer.BytesWritten(); | 245 intptr_t buffer_len = writer.BytesWritten(); |
246 | 246 |
247 { | 247 { |
248 // Switch to a regular zone, where VM handle allocation is allowed. | 248 // Switch to a regular zone, where VM handle allocation is allowed. |
249 StackZone zone(Isolate::Current()); | 249 StackZone zone(Thread::Current()); |
250 // Read object back from the snapshot. | 250 // Read object back from the snapshot. |
251 MessageSnapshotReader reader(buffer, | 251 MessageSnapshotReader reader(buffer, |
252 buffer_len, | 252 buffer_len, |
253 Isolate::Current(), | 253 Isolate::Current(), |
254 Thread::Current()->zone()); | 254 Thread::Current()->zone()); |
255 const Object& serialized_object = Object::Handle(reader.ReadObject()); | 255 const Object& serialized_object = Object::Handle(reader.ReadObject()); |
256 EXPECT(serialized_object.IsMint()); | 256 EXPECT(serialized_object.IsMint()); |
257 } | 257 } |
258 | 258 |
259 // Read object back from the snapshot into a C structure. | 259 // Read object back from the snapshot into a C structure. |
260 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 260 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
261 Dart_CObject* root = api_reader.ReadMessage(); | 261 Dart_CObject* root = api_reader.ReadMessage(); |
262 EXPECT_NOTNULL(root); | 262 EXPECT_NOTNULL(root); |
263 CheckEncodeDecodeMessage(root); | 263 CheckEncodeDecodeMessage(root); |
264 return root; | 264 return root; |
265 } | 265 } |
266 | 266 |
267 | 267 |
268 void CheckMint(int64_t value) { | 268 void CheckMint(int64_t value) { |
269 StackZone zone(Isolate::Current()); | 269 StackZone zone(Thread::Current()); |
270 | 270 |
271 Mint& mint = Mint::Handle(); | 271 Mint& mint = Mint::Handle(); |
272 mint ^= Integer::New(value); | 272 mint ^= Integer::New(value); |
273 ApiNativeScope scope; | 273 ApiNativeScope scope; |
274 Dart_CObject* mint_cobject = SerializeAndDeserializeMint(mint); | 274 Dart_CObject* mint_cobject = SerializeAndDeserializeMint(mint); |
275 // On 64-bit platforms mints always require 64-bits as the smi range | 275 // On 64-bit platforms mints always require 64-bits as the smi range |
276 // here covers most of the 64-bit range. On 32-bit platforms the smi | 276 // here covers most of the 64-bit range. On 32-bit platforms the smi |
277 // range covers most of the 32-bit range and values outside that | 277 // range covers most of the 32-bit range and values outside that |
278 // range are also represented as mints. | 278 // range are also represented as mints. |
279 #if defined(ARCH_IS_64_BIT) | 279 #if defined(ARCH_IS_64_BIT) |
(...skipping 25 matching lines...) Expand all Loading... |
305 // Max positive mint - 1. | 305 // Max positive mint - 1. |
306 CheckMint(kMaxInt64 - 1); | 306 CheckMint(kMaxInt64 - 1); |
307 // Min negative mint. | 307 // Min negative mint. |
308 CheckMint(kMinInt64); | 308 CheckMint(kMinInt64); |
309 // Min negative mint + 1. | 309 // Min negative mint + 1. |
310 CheckMint(kMinInt64 + 1); | 310 CheckMint(kMinInt64 + 1); |
311 } | 311 } |
312 | 312 |
313 | 313 |
314 TEST_CASE(SerializeDouble) { | 314 TEST_CASE(SerializeDouble) { |
315 StackZone zone(Isolate::Current()); | 315 StackZone zone(Thread::Current()); |
316 | 316 |
317 // Write snapshot with object content. | 317 // Write snapshot with object content. |
318 const Double& dbl = Double::Handle(Double::New(101.29)); | 318 const Double& dbl = Double::Handle(Double::New(101.29)); |
319 uint8_t* buffer; | 319 uint8_t* buffer; |
320 MessageWriter writer(&buffer, &zone_allocator, true); | 320 MessageWriter writer(&buffer, &zone_allocator, true); |
321 writer.WriteMessage(dbl); | 321 writer.WriteMessage(dbl); |
322 intptr_t buffer_len = writer.BytesWritten(); | 322 intptr_t buffer_len = writer.BytesWritten(); |
323 | 323 |
324 // Read object back from the snapshot. | 324 // Read object back from the snapshot. |
325 MessageSnapshotReader reader(buffer, | 325 MessageSnapshotReader reader(buffer, |
326 buffer_len, | 326 buffer_len, |
327 Isolate::Current(), | 327 Isolate::Current(), |
328 zone.GetZone()); | 328 zone.GetZone()); |
329 const Object& serialized_object = Object::Handle(reader.ReadObject()); | 329 const Object& serialized_object = Object::Handle(reader.ReadObject()); |
330 EXPECT(Equals(dbl, serialized_object)); | 330 EXPECT(Equals(dbl, serialized_object)); |
331 | 331 |
332 // Read object back from the snapshot into a C structure. | 332 // Read object back from the snapshot into a C structure. |
333 ApiNativeScope scope; | 333 ApiNativeScope scope; |
334 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 334 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
335 Dart_CObject* root = api_reader.ReadMessage(); | 335 Dart_CObject* root = api_reader.ReadMessage(); |
336 EXPECT_NOTNULL(root); | 336 EXPECT_NOTNULL(root); |
337 EXPECT_EQ(Dart_CObject_kDouble, root->type); | 337 EXPECT_EQ(Dart_CObject_kDouble, root->type); |
338 EXPECT_EQ(dbl.value(), root->value.as_double); | 338 EXPECT_EQ(dbl.value(), root->value.as_double); |
339 CheckEncodeDecodeMessage(root); | 339 CheckEncodeDecodeMessage(root); |
340 } | 340 } |
341 | 341 |
342 | 342 |
343 TEST_CASE(SerializeTrue) { | 343 TEST_CASE(SerializeTrue) { |
344 StackZone zone(Isolate::Current()); | 344 StackZone zone(Thread::Current()); |
345 | 345 |
346 // Write snapshot with true object. | 346 // Write snapshot with true object. |
347 const Bool& bl = Bool::True(); | 347 const Bool& bl = Bool::True(); |
348 uint8_t* buffer; | 348 uint8_t* buffer; |
349 MessageWriter writer(&buffer, &zone_allocator, true); | 349 MessageWriter writer(&buffer, &zone_allocator, true); |
350 writer.WriteMessage(bl); | 350 writer.WriteMessage(bl); |
351 intptr_t buffer_len = writer.BytesWritten(); | 351 intptr_t buffer_len = writer.BytesWritten(); |
352 | 352 |
353 // Read object back from the snapshot. | 353 // Read object back from the snapshot. |
354 MessageSnapshotReader reader(buffer, | 354 MessageSnapshotReader reader(buffer, |
(...skipping 10 matching lines...) Expand all Loading... |
365 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 365 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
366 Dart_CObject* root = api_reader.ReadMessage(); | 366 Dart_CObject* root = api_reader.ReadMessage(); |
367 EXPECT_NOTNULL(root); | 367 EXPECT_NOTNULL(root); |
368 EXPECT_EQ(Dart_CObject_kBool, root->type); | 368 EXPECT_EQ(Dart_CObject_kBool, root->type); |
369 EXPECT_EQ(true, root->value.as_bool); | 369 EXPECT_EQ(true, root->value.as_bool); |
370 CheckEncodeDecodeMessage(root); | 370 CheckEncodeDecodeMessage(root); |
371 } | 371 } |
372 | 372 |
373 | 373 |
374 TEST_CASE(SerializeFalse) { | 374 TEST_CASE(SerializeFalse) { |
375 StackZone zone(Isolate::Current()); | 375 StackZone zone(Thread::Current()); |
376 | 376 |
377 // Write snapshot with false object. | 377 // Write snapshot with false object. |
378 const Bool& bl = Bool::False(); | 378 const Bool& bl = Bool::False(); |
379 uint8_t* buffer; | 379 uint8_t* buffer; |
380 MessageWriter writer(&buffer, &zone_allocator, true); | 380 MessageWriter writer(&buffer, &zone_allocator, true); |
381 writer.WriteMessage(bl); | 381 writer.WriteMessage(bl); |
382 intptr_t buffer_len = writer.BytesWritten(); | 382 intptr_t buffer_len = writer.BytesWritten(); |
383 | 383 |
384 // Read object back from the snapshot. | 384 // Read object back from the snapshot. |
385 MessageSnapshotReader reader(buffer, | 385 MessageSnapshotReader reader(buffer, |
(...skipping 13 matching lines...) Expand all Loading... |
399 CheckEncodeDecodeMessage(root); | 399 CheckEncodeDecodeMessage(root); |
400 } | 400 } |
401 | 401 |
402 | 402 |
403 static uword allocator(intptr_t size) { | 403 static uword allocator(intptr_t size) { |
404 return reinterpret_cast<uword>(malloc(size)); | 404 return reinterpret_cast<uword>(malloc(size)); |
405 } | 405 } |
406 | 406 |
407 | 407 |
408 TEST_CASE(SerializeCapability) { | 408 TEST_CASE(SerializeCapability) { |
409 StackZone zone(Isolate::Current()); | 409 StackZone zone(Thread::Current()); |
410 | 410 |
411 // Write snapshot with object content. | 411 // Write snapshot with object content. |
412 const Capability& capability = Capability::Handle(Capability::New(12345)); | 412 const Capability& capability = Capability::Handle(Capability::New(12345)); |
413 uint8_t* buffer; | 413 uint8_t* buffer; |
414 MessageWriter writer(&buffer, &zone_allocator, true); | 414 MessageWriter writer(&buffer, &zone_allocator, true); |
415 writer.WriteMessage(capability); | 415 writer.WriteMessage(capability); |
416 intptr_t buffer_len = writer.BytesWritten(); | 416 intptr_t buffer_len = writer.BytesWritten(); |
417 | 417 |
418 // Read object back from the snapshot. | 418 // Read object back from the snapshot. |
419 MessageSnapshotReader reader(buffer, | 419 MessageSnapshotReader reader(buffer, |
(...skipping 11 matching lines...) Expand all Loading... |
431 Dart_CObject* root = api_reader.ReadMessage(); | 431 Dart_CObject* root = api_reader.ReadMessage(); |
432 EXPECT_NOTNULL(root); | 432 EXPECT_NOTNULL(root); |
433 EXPECT_EQ(Dart_CObject_kCapability, root->type); | 433 EXPECT_EQ(Dart_CObject_kCapability, root->type); |
434 int64_t id = root->value.as_capability.id; | 434 int64_t id = root->value.as_capability.id; |
435 EXPECT_EQ(12345, id); | 435 EXPECT_EQ(12345, id); |
436 CheckEncodeDecodeMessage(root); | 436 CheckEncodeDecodeMessage(root); |
437 } | 437 } |
438 | 438 |
439 | 439 |
440 TEST_CASE(SerializeBigint) { | 440 TEST_CASE(SerializeBigint) { |
441 StackZone zone(Isolate::Current()); | 441 StackZone zone(Thread::Current()); |
442 | 442 |
443 // Write snapshot with object content. | 443 // Write snapshot with object content. |
444 const char* cstr = "0x270FFFFFFFFFFFFFD8F0"; | 444 const char* cstr = "0x270FFFFFFFFFFFFFD8F0"; |
445 const String& str = String::Handle(String::New(cstr)); | 445 const String& str = String::Handle(String::New(cstr)); |
446 Bigint& bigint = Bigint::Handle(); | 446 Bigint& bigint = Bigint::Handle(); |
447 bigint ^= Integer::NewCanonical(str); | 447 bigint ^= Integer::NewCanonical(str); |
448 uint8_t* buffer; | 448 uint8_t* buffer; |
449 MessageWriter writer(&buffer, &zone_allocator, true); | 449 MessageWriter writer(&buffer, &zone_allocator, true); |
450 writer.WriteMessage(bigint); | 450 writer.WriteMessage(bigint); |
451 intptr_t buffer_len = writer.BytesWritten(); | 451 intptr_t buffer_len = writer.BytesWritten(); |
(...skipping 23 matching lines...) Expand all Loading... |
475 | 475 |
476 Dart_CObject* SerializeAndDeserializeBigint(const Bigint& bigint) { | 476 Dart_CObject* SerializeAndDeserializeBigint(const Bigint& bigint) { |
477 // Write snapshot with object content. | 477 // Write snapshot with object content. |
478 uint8_t* buffer; | 478 uint8_t* buffer; |
479 MessageWriter writer(&buffer, &zone_allocator, true); | 479 MessageWriter writer(&buffer, &zone_allocator, true); |
480 writer.WriteMessage(bigint); | 480 writer.WriteMessage(bigint); |
481 intptr_t buffer_len = writer.BytesWritten(); | 481 intptr_t buffer_len = writer.BytesWritten(); |
482 | 482 |
483 { | 483 { |
484 // Switch to a regular zone, where VM handle allocation is allowed. | 484 // Switch to a regular zone, where VM handle allocation is allowed. |
485 StackZone zone(Isolate::Current()); | 485 StackZone zone(Thread::Current()); |
486 // Read object back from the snapshot. | 486 // Read object back from the snapshot. |
487 MessageSnapshotReader reader(buffer, | 487 MessageSnapshotReader reader(buffer, |
488 buffer_len, | 488 buffer_len, |
489 Isolate::Current(), | 489 Isolate::Current(), |
490 Thread::Current()->zone()); | 490 Thread::Current()->zone()); |
491 Bigint& serialized_bigint = Bigint::Handle(); | 491 Bigint& serialized_bigint = Bigint::Handle(); |
492 serialized_bigint ^= reader.ReadObject(); | 492 serialized_bigint ^= reader.ReadObject(); |
493 const char* str1 = bigint.ToHexCString(allocator); | 493 const char* str1 = bigint.ToHexCString(allocator); |
494 const char* str2 = serialized_bigint.ToHexCString(allocator); | 494 const char* str2 = serialized_bigint.ToHexCString(allocator); |
495 EXPECT_STREQ(str1, str2); | 495 EXPECT_STREQ(str1, str2); |
496 free(const_cast<char*>(str1)); | 496 free(const_cast<char*>(str1)); |
497 free(const_cast<char*>(str2)); | 497 free(const_cast<char*>(str2)); |
498 } | 498 } |
499 | 499 |
500 // Read object back from the snapshot into a C structure. | 500 // Read object back from the snapshot into a C structure. |
501 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 501 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
502 Dart_CObject* root = api_reader.ReadMessage(); | 502 Dart_CObject* root = api_reader.ReadMessage(); |
503 // Bigint not supported. | 503 // Bigint not supported. |
504 EXPECT_NOTNULL(root); | 504 EXPECT_NOTNULL(root); |
505 CheckEncodeDecodeMessage(root); | 505 CheckEncodeDecodeMessage(root); |
506 return root; | 506 return root; |
507 } | 507 } |
508 | 508 |
509 | 509 |
510 void CheckBigint(const char* bigint_value) { | 510 void CheckBigint(const char* bigint_value) { |
511 StackZone zone(Isolate::Current()); | 511 StackZone zone(Thread::Current()); |
512 Bigint& bigint = Bigint::Handle(); | 512 Bigint& bigint = Bigint::Handle(); |
513 bigint ^= Bigint::NewFromCString(bigint_value); | 513 bigint ^= Bigint::NewFromCString(bigint_value); |
514 ApiNativeScope scope; | 514 ApiNativeScope scope; |
515 Dart_CObject* bigint_cobject = SerializeAndDeserializeBigint(bigint); | 515 Dart_CObject* bigint_cobject = SerializeAndDeserializeBigint(bigint); |
516 EXPECT_EQ(Dart_CObject_kBigint, bigint_cobject->type); | 516 EXPECT_EQ(Dart_CObject_kBigint, bigint_cobject->type); |
517 char* hex_value = TestCase::BigintToHexValue(bigint_cobject); | 517 char* hex_value = TestCase::BigintToHexValue(bigint_cobject); |
518 EXPECT_STREQ(bigint_value, hex_value); | 518 EXPECT_STREQ(bigint_value, hex_value); |
519 free(hex_value); | 519 free(hex_value); |
520 } | 520 } |
521 | 521 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
566 EXPECT(Object::pc_descriptors_class() == reader.ReadObject()); | 566 EXPECT(Object::pc_descriptors_class() == reader.ReadObject()); |
567 EXPECT(Object::exception_handlers_class() == reader.ReadObject()); | 567 EXPECT(Object::exception_handlers_class() == reader.ReadObject()); |
568 EXPECT(Object::context_class() == reader.ReadObject()); | 568 EXPECT(Object::context_class() == reader.ReadObject()); |
569 EXPECT(Object::context_scope_class() == reader.ReadObject()); | 569 EXPECT(Object::context_scope_class() == reader.ReadObject()); |
570 | 570 |
571 free(buffer); | 571 free(buffer); |
572 } | 572 } |
573 | 573 |
574 | 574 |
575 static void TestString(const char* cstr) { | 575 static void TestString(const char* cstr) { |
576 StackZone zone(Isolate::Current()); | 576 StackZone zone(Thread::Current()); |
577 EXPECT(Utf8::IsValid(reinterpret_cast<const uint8_t*>(cstr), strlen(cstr))); | 577 EXPECT(Utf8::IsValid(reinterpret_cast<const uint8_t*>(cstr), strlen(cstr))); |
578 // Write snapshot with object content. | 578 // Write snapshot with object content. |
579 String& str = String::Handle(String::New(cstr)); | 579 String& str = String::Handle(String::New(cstr)); |
580 uint8_t* buffer; | 580 uint8_t* buffer; |
581 MessageWriter writer(&buffer, &zone_allocator, true); | 581 MessageWriter writer(&buffer, &zone_allocator, true); |
582 writer.WriteMessage(str); | 582 writer.WriteMessage(str); |
583 intptr_t buffer_len = writer.BytesWritten(); | 583 intptr_t buffer_len = writer.BytesWritten(); |
584 | 584 |
585 // Read object back from the snapshot. | 585 // Read object back from the snapshot. |
586 MessageSnapshotReader reader(buffer, | 586 MessageSnapshotReader reader(buffer, |
(...skipping 23 matching lines...) Expand all Loading... |
610 "\xDF\xBF" // U+07FF | 610 "\xDF\xBF" // U+07FF |
611 "\xE0\xA0\x80" // U+0800 | 611 "\xE0\xA0\x80" // U+0800 |
612 "\xEF\xBF\xBF"; // U+FFFF | 612 "\xEF\xBF\xBF"; // U+FFFF |
613 | 613 |
614 TestString(data); | 614 TestString(data); |
615 // TODO(sgjesse): Add tests with non-BMP characters. | 615 // TODO(sgjesse): Add tests with non-BMP characters. |
616 } | 616 } |
617 | 617 |
618 | 618 |
619 TEST_CASE(SerializeArray) { | 619 TEST_CASE(SerializeArray) { |
620 StackZone zone(Isolate::Current()); | 620 StackZone zone(Thread::Current()); |
621 | 621 |
622 // Write snapshot with object content. | 622 // Write snapshot with object content. |
623 const int kArrayLength = 10; | 623 const int kArrayLength = 10; |
624 Array& array = Array::Handle(Array::New(kArrayLength)); | 624 Array& array = Array::Handle(Array::New(kArrayLength)); |
625 Smi& smi = Smi::Handle(); | 625 Smi& smi = Smi::Handle(); |
626 for (int i = 0; i < kArrayLength; i++) { | 626 for (int i = 0; i < kArrayLength; i++) { |
627 smi ^= Smi::New(i); | 627 smi ^= Smi::New(i); |
628 array.SetAt(i, smi); | 628 array.SetAt(i, smi); |
629 } | 629 } |
630 uint8_t* buffer; | 630 uint8_t* buffer; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
702 TEST_CASE(FailSerializeLargeExternalTypedData) { | 702 TEST_CASE(FailSerializeLargeExternalTypedData) { |
703 Dart_CObject root; | 703 Dart_CObject root; |
704 root.type = Dart_CObject_kExternalTypedData; | 704 root.type = Dart_CObject_kExternalTypedData; |
705 root.value.as_typed_data.length = | 705 root.value.as_typed_data.length = |
706 ExternalTypedData::MaxElements(kExternalTypedDataUint8ArrayCid) + 1; | 706 ExternalTypedData::MaxElements(kExternalTypedDataUint8ArrayCid) + 1; |
707 ExpectEncodeFail(&root); | 707 ExpectEncodeFail(&root); |
708 } | 708 } |
709 | 709 |
710 | 710 |
711 TEST_CASE(SerializeEmptyArray) { | 711 TEST_CASE(SerializeEmptyArray) { |
712 StackZone zone(Isolate::Current()); | 712 StackZone zone(Thread::Current()); |
713 | 713 |
714 // Write snapshot with object content. | 714 // Write snapshot with object content. |
715 const int kArrayLength = 0; | 715 const int kArrayLength = 0; |
716 Array& array = Array::Handle(Array::New(kArrayLength)); | 716 Array& array = Array::Handle(Array::New(kArrayLength)); |
717 uint8_t* buffer; | 717 uint8_t* buffer; |
718 MessageWriter writer(&buffer, &zone_allocator, true); | 718 MessageWriter writer(&buffer, &zone_allocator, true); |
719 writer.WriteMessage(array); | 719 writer.WriteMessage(array); |
720 intptr_t buffer_len = writer.BytesWritten(); | 720 intptr_t buffer_len = writer.BytesWritten(); |
721 | 721 |
722 // Read object back from the snapshot. | 722 // Read object back from the snapshot. |
(...skipping 10 matching lines...) Expand all Loading... |
733 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 733 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
734 Dart_CObject* root = api_reader.ReadMessage(); | 734 Dart_CObject* root = api_reader.ReadMessage(); |
735 EXPECT_EQ(Dart_CObject_kArray, root->type); | 735 EXPECT_EQ(Dart_CObject_kArray, root->type); |
736 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 736 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
737 EXPECT(root->value.as_array.values == NULL); | 737 EXPECT(root->value.as_array.values == NULL); |
738 CheckEncodeDecodeMessage(root); | 738 CheckEncodeDecodeMessage(root); |
739 } | 739 } |
740 | 740 |
741 | 741 |
742 TEST_CASE(SerializeByteArray) { | 742 TEST_CASE(SerializeByteArray) { |
743 StackZone zone(Isolate::Current()); | 743 StackZone zone(Thread::Current()); |
744 | 744 |
745 // Write snapshot with object content. | 745 // Write snapshot with object content. |
746 const int kTypedDataLength = 256; | 746 const int kTypedDataLength = 256; |
747 TypedData& typed_data = TypedData::Handle( | 747 TypedData& typed_data = TypedData::Handle( |
748 TypedData::New(kTypedDataUint8ArrayCid, kTypedDataLength)); | 748 TypedData::New(kTypedDataUint8ArrayCid, kTypedDataLength)); |
749 for (int i = 0; i < kTypedDataLength; i++) { | 749 for (int i = 0; i < kTypedDataLength; i++) { |
750 typed_data.SetUint8(i, i); | 750 typed_data.SetUint8(i, i); |
751 } | 751 } |
752 uint8_t* buffer; | 752 uint8_t* buffer; |
753 MessageWriter writer(&buffer, &zone_allocator, true); | 753 MessageWriter writer(&buffer, &zone_allocator, true); |
(...skipping 17 matching lines...) Expand all Loading... |
771 EXPECT_EQ(kTypedDataLength, root->value.as_typed_data.length); | 771 EXPECT_EQ(kTypedDataLength, root->value.as_typed_data.length); |
772 for (int i = 0; i < kTypedDataLength; i++) { | 772 for (int i = 0; i < kTypedDataLength; i++) { |
773 EXPECT(root->value.as_typed_data.values[i] == i); | 773 EXPECT(root->value.as_typed_data.values[i] == i); |
774 } | 774 } |
775 CheckEncodeDecodeMessage(root); | 775 CheckEncodeDecodeMessage(root); |
776 } | 776 } |
777 | 777 |
778 | 778 |
779 #define TEST_TYPED_ARRAY(darttype, ctype) \ | 779 #define TEST_TYPED_ARRAY(darttype, ctype) \ |
780 { \ | 780 { \ |
781 StackZone zone(Isolate::Current()); \ | 781 StackZone zone(Thread::Current()); \ |
782 const int kArrayLength = 127; \ | 782 const int kArrayLength = 127; \ |
783 TypedData& array = TypedData::Handle( \ | 783 TypedData& array = TypedData::Handle( \ |
784 TypedData::New(kTypedData##darttype##ArrayCid, kArrayLength)); \ | 784 TypedData::New(kTypedData##darttype##ArrayCid, kArrayLength)); \ |
785 intptr_t scale = array.ElementSizeInBytes(); \ | 785 intptr_t scale = array.ElementSizeInBytes(); \ |
786 for (int i = 0; i < kArrayLength; i++) { \ | 786 for (int i = 0; i < kArrayLength; i++) { \ |
787 array.Set##darttype((i * scale), i); \ | 787 array.Set##darttype((i * scale), i); \ |
788 } \ | 788 } \ |
789 uint8_t* buffer; \ | 789 uint8_t* buffer; \ |
790 MessageWriter writer(&buffer, &zone_allocator, true); \ | 790 MessageWriter writer(&buffer, &zone_allocator, true); \ |
791 writer.WriteMessage(array); \ | 791 writer.WriteMessage(array); \ |
792 intptr_t buffer_len = writer.BytesWritten(); \ | 792 intptr_t buffer_len = writer.BytesWritten(); \ |
793 MessageSnapshotReader reader(buffer, buffer_len, \ | 793 MessageSnapshotReader reader(buffer, buffer_len, \ |
794 Isolate::Current(), \ | 794 Isolate::Current(), \ |
795 zone.GetZone()); \ | 795 zone.GetZone()); \ |
796 TypedData& serialized_array = TypedData::Handle(); \ | 796 TypedData& serialized_array = TypedData::Handle(); \ |
797 serialized_array ^= reader.ReadObject(); \ | 797 serialized_array ^= reader.ReadObject(); \ |
798 for (int i = 0; i < kArrayLength; i++) { \ | 798 for (int i = 0; i < kArrayLength; i++) { \ |
799 EXPECT_EQ(static_cast<ctype>(i), \ | 799 EXPECT_EQ(static_cast<ctype>(i), \ |
800 serialized_array.Get##darttype(i*scale)); \ | 800 serialized_array.Get##darttype(i*scale)); \ |
801 } \ | 801 } \ |
802 } | 802 } |
803 | 803 |
804 | 804 |
805 #define TEST_EXTERNAL_TYPED_ARRAY(darttype, ctype) \ | 805 #define TEST_EXTERNAL_TYPED_ARRAY(darttype, ctype) \ |
806 { \ | 806 { \ |
807 StackZone zone(Isolate::Current()); \ | 807 StackZone zone(Thread::Current()); \ |
808 ctype data[] = { 0, 11, 22, 33, 44, 55, 66, 77 }; \ | 808 ctype data[] = { 0, 11, 22, 33, 44, 55, 66, 77 }; \ |
809 intptr_t length = ARRAY_SIZE(data); \ | 809 intptr_t length = ARRAY_SIZE(data); \ |
810 ExternalTypedData& array = ExternalTypedData::Handle( \ | 810 ExternalTypedData& array = ExternalTypedData::Handle( \ |
811 ExternalTypedData::New(kExternalTypedData##darttype##ArrayCid, \ | 811 ExternalTypedData::New(kExternalTypedData##darttype##ArrayCid, \ |
812 reinterpret_cast<uint8_t*>(data), length)); \ | 812 reinterpret_cast<uint8_t*>(data), length)); \ |
813 intptr_t scale = array.ElementSizeInBytes(); \ | 813 intptr_t scale = array.ElementSizeInBytes(); \ |
814 uint8_t* buffer; \ | 814 uint8_t* buffer; \ |
815 MessageWriter writer(&buffer, &zone_allocator, true); \ | 815 MessageWriter writer(&buffer, &zone_allocator, true); \ |
816 writer.WriteMessage(array); \ | 816 writer.WriteMessage(array); \ |
817 intptr_t buffer_len = writer.BytesWritten(); \ | 817 intptr_t buffer_len = writer.BytesWritten(); \ |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
849 TEST_EXTERNAL_TYPED_ARRAY(Int32, int32_t); | 849 TEST_EXTERNAL_TYPED_ARRAY(Int32, int32_t); |
850 TEST_EXTERNAL_TYPED_ARRAY(Uint32, uint32_t); | 850 TEST_EXTERNAL_TYPED_ARRAY(Uint32, uint32_t); |
851 TEST_EXTERNAL_TYPED_ARRAY(Int64, int64_t); | 851 TEST_EXTERNAL_TYPED_ARRAY(Int64, int64_t); |
852 TEST_EXTERNAL_TYPED_ARRAY(Uint64, uint64_t); | 852 TEST_EXTERNAL_TYPED_ARRAY(Uint64, uint64_t); |
853 TEST_EXTERNAL_TYPED_ARRAY(Float32, float); | 853 TEST_EXTERNAL_TYPED_ARRAY(Float32, float); |
854 TEST_EXTERNAL_TYPED_ARRAY(Float64, double); | 854 TEST_EXTERNAL_TYPED_ARRAY(Float64, double); |
855 } | 855 } |
856 | 856 |
857 | 857 |
858 TEST_CASE(SerializeEmptyByteArray) { | 858 TEST_CASE(SerializeEmptyByteArray) { |
859 StackZone zone(Isolate::Current()); | 859 StackZone zone(Thread::Current()); |
860 | 860 |
861 // Write snapshot with object content. | 861 // Write snapshot with object content. |
862 const int kTypedDataLength = 0; | 862 const int kTypedDataLength = 0; |
863 TypedData& typed_data = TypedData::Handle( | 863 TypedData& typed_data = TypedData::Handle( |
864 TypedData::New(kTypedDataUint8ArrayCid, kTypedDataLength)); | 864 TypedData::New(kTypedDataUint8ArrayCid, kTypedDataLength)); |
865 uint8_t* buffer; | 865 uint8_t* buffer; |
866 MessageWriter writer(&buffer, &zone_allocator, true); | 866 MessageWriter writer(&buffer, &zone_allocator, true); |
867 writer.WriteMessage(typed_data); | 867 writer.WriteMessage(typed_data); |
868 intptr_t buffer_len = writer.BytesWritten(); | 868 intptr_t buffer_len = writer.BytesWritten(); |
869 | 869 |
(...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1709 result = Dart_Invoke(lib, NewString("test_b"), 0, NULL); | 1709 result = Dart_Invoke(lib, NewString("test_b"), 0, NULL); |
1710 EXPECT(Dart_IsError(result) == saved_enable_type_checks_mode); | 1710 EXPECT(Dart_IsError(result) == saved_enable_type_checks_mode); |
1711 } | 1711 } |
1712 Dart_ShutdownIsolate(); | 1712 Dart_ShutdownIsolate(); |
1713 free(full_snapshot); | 1713 free(full_snapshot); |
1714 free(script_snapshot); | 1714 free(script_snapshot); |
1715 } | 1715 } |
1716 | 1716 |
1717 | 1717 |
1718 TEST_CASE(IntArrayMessage) { | 1718 TEST_CASE(IntArrayMessage) { |
1719 StackZone zone(Isolate::Current()); | 1719 StackZone zone(Thread::Current()); |
1720 uint8_t* buffer = NULL; | 1720 uint8_t* buffer = NULL; |
1721 ApiMessageWriter writer(&buffer, &zone_allocator); | 1721 ApiMessageWriter writer(&buffer, &zone_allocator); |
1722 | 1722 |
1723 static const int kArrayLength = 2; | 1723 static const int kArrayLength = 2; |
1724 intptr_t data[kArrayLength] = {1, 2}; | 1724 intptr_t data[kArrayLength] = {1, 2}; |
1725 int len = kArrayLength; | 1725 int len = kArrayLength; |
1726 writer.WriteMessage(len, data); | 1726 writer.WriteMessage(len, data); |
1727 | 1727 |
1728 // Read object back from the snapshot into a C structure. | 1728 // Read object back from the snapshot into a C structure. |
1729 ApiNativeScope scope; | 1729 ApiNativeScope scope; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1762 | 1762 |
1763 // Helper function to deserialize the result into a Dart_CObject structure. | 1763 // Helper function to deserialize the result into a Dart_CObject structure. |
1764 static Dart_CObject* GetDeserialized(uint8_t* buffer, intptr_t buffer_len) { | 1764 static Dart_CObject* GetDeserialized(uint8_t* buffer, intptr_t buffer_len) { |
1765 // Read object back from the snapshot into a C structure. | 1765 // Read object back from the snapshot into a C structure. |
1766 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 1766 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
1767 return api_reader.ReadMessage(); | 1767 return api_reader.ReadMessage(); |
1768 } | 1768 } |
1769 | 1769 |
1770 | 1770 |
1771 static void CheckString(Dart_Handle dart_string, const char* expected) { | 1771 static void CheckString(Dart_Handle dart_string, const char* expected) { |
1772 StackZone zone(Isolate::Current()); | 1772 StackZone zone(Thread::Current()); |
1773 String& str = String::Handle(); | 1773 String& str = String::Handle(); |
1774 str ^= Api::UnwrapHandle(dart_string); | 1774 str ^= Api::UnwrapHandle(dart_string); |
1775 uint8_t* buffer; | 1775 uint8_t* buffer; |
1776 MessageWriter writer(&buffer, &zone_allocator, false); | 1776 MessageWriter writer(&buffer, &zone_allocator, false); |
1777 writer.WriteMessage(str); | 1777 writer.WriteMessage(str); |
1778 intptr_t buffer_len = writer.BytesWritten(); | 1778 intptr_t buffer_len = writer.BytesWritten(); |
1779 | 1779 |
1780 // Read object back from the snapshot into a C structure. | 1780 // Read object back from the snapshot into a C structure. |
1781 ApiNativeScope scope; | 1781 ApiNativeScope scope; |
1782 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 1782 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
1783 Dart_CObject* root = api_reader.ReadMessage(); | 1783 Dart_CObject* root = api_reader.ReadMessage(); |
1784 EXPECT_NOTNULL(root); | 1784 EXPECT_NOTNULL(root); |
1785 EXPECT_EQ(Dart_CObject_kString, root->type); | 1785 EXPECT_EQ(Dart_CObject_kString, root->type); |
1786 EXPECT_STREQ(expected, root->value.as_string); | 1786 EXPECT_STREQ(expected, root->value.as_string); |
1787 CheckEncodeDecodeMessage(root); | 1787 CheckEncodeDecodeMessage(root); |
1788 } | 1788 } |
1789 | 1789 |
1790 | 1790 |
1791 static void CheckStringInvalid(Dart_Handle dart_string) { | 1791 static void CheckStringInvalid(Dart_Handle dart_string) { |
1792 StackZone zone(Isolate::Current()); | 1792 StackZone zone(Thread::Current()); |
1793 String& str = String::Handle(); | 1793 String& str = String::Handle(); |
1794 str ^= Api::UnwrapHandle(dart_string); | 1794 str ^= Api::UnwrapHandle(dart_string); |
1795 uint8_t* buffer; | 1795 uint8_t* buffer; |
1796 MessageWriter writer(&buffer, &zone_allocator, false); | 1796 MessageWriter writer(&buffer, &zone_allocator, false); |
1797 writer.WriteMessage(str); | 1797 writer.WriteMessage(str); |
1798 intptr_t buffer_len = writer.BytesWritten(); | 1798 intptr_t buffer_len = writer.BytesWritten(); |
1799 | 1799 |
1800 // Read object back from the snapshot into a C structure. | 1800 // Read object back from the snapshot into a C structure. |
1801 ApiNativeScope scope; | 1801 ApiNativeScope scope; |
1802 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 1802 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1892 Dart_Handle crappy_string_result; | 1892 Dart_Handle crappy_string_result; |
1893 crappy_string_result = | 1893 crappy_string_result = |
1894 Dart_Invoke(lib, NewString("getCrappyString"), 0, NULL); | 1894 Dart_Invoke(lib, NewString("getCrappyString"), 0, NULL); |
1895 EXPECT_VALID(crappy_string_result); | 1895 EXPECT_VALID(crappy_string_result); |
1896 EXPECT(Dart_IsString(crappy_string_result)); | 1896 EXPECT(Dart_IsString(crappy_string_result)); |
1897 | 1897 |
1898 { | 1898 { |
1899 DARTSCOPE(isolate); | 1899 DARTSCOPE(isolate); |
1900 | 1900 |
1901 { | 1901 { |
1902 StackZone zone(Isolate::Current()); | 1902 StackZone zone(Thread::Current()); |
1903 Smi& smi = Smi::Handle(); | 1903 Smi& smi = Smi::Handle(); |
1904 smi ^= Api::UnwrapHandle(smi_result); | 1904 smi ^= Api::UnwrapHandle(smi_result); |
1905 uint8_t* buffer; | 1905 uint8_t* buffer; |
1906 MessageWriter writer(&buffer, &zone_allocator, false); | 1906 MessageWriter writer(&buffer, &zone_allocator, false); |
1907 writer.WriteMessage(smi); | 1907 writer.WriteMessage(smi); |
1908 intptr_t buffer_len = writer.BytesWritten(); | 1908 intptr_t buffer_len = writer.BytesWritten(); |
1909 | 1909 |
1910 // Read object back from the snapshot into a C structure. | 1910 // Read object back from the snapshot into a C structure. |
1911 ApiNativeScope scope; | 1911 ApiNativeScope scope; |
1912 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 1912 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
1913 Dart_CObject* root = api_reader.ReadMessage(); | 1913 Dart_CObject* root = api_reader.ReadMessage(); |
1914 EXPECT_NOTNULL(root); | 1914 EXPECT_NOTNULL(root); |
1915 EXPECT_EQ(Dart_CObject_kInt32, root->type); | 1915 EXPECT_EQ(Dart_CObject_kInt32, root->type); |
1916 EXPECT_EQ(42, root->value.as_int32); | 1916 EXPECT_EQ(42, root->value.as_int32); |
1917 CheckEncodeDecodeMessage(root); | 1917 CheckEncodeDecodeMessage(root); |
1918 } | 1918 } |
1919 { | 1919 { |
1920 StackZone zone(Isolate::Current()); | 1920 StackZone zone(Thread::Current()); |
1921 Bigint& bigint = Bigint::Handle(); | 1921 Bigint& bigint = Bigint::Handle(); |
1922 bigint ^= Api::UnwrapHandle(bigint_result); | 1922 bigint ^= Api::UnwrapHandle(bigint_result); |
1923 uint8_t* buffer; | 1923 uint8_t* buffer; |
1924 MessageWriter writer(&buffer, &zone_allocator, false); | 1924 MessageWriter writer(&buffer, &zone_allocator, false); |
1925 writer.WriteMessage(bigint); | 1925 writer.WriteMessage(bigint); |
1926 intptr_t buffer_len = writer.BytesWritten(); | 1926 intptr_t buffer_len = writer.BytesWritten(); |
1927 | 1927 |
1928 // Read object back from the snapshot into a C structure. | 1928 // Read object back from the snapshot into a C structure. |
1929 ApiNativeScope scope; | 1929 ApiNativeScope scope; |
1930 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); | 1930 ApiMessageReader api_reader(buffer, buffer_len, &zone_allocator); |
(...skipping 1112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3043 EXPECT(Dart_IsError(result)); | 3043 EXPECT(Dart_IsError(result)); |
3044 EXPECT(Dart_ErrorHasException(result)); | 3044 EXPECT(Dart_ErrorHasException(result)); |
3045 EXPECT_SUBSTRING("Exception: nulltruefalse123456æøå3.14[]100123456789\n", | 3045 EXPECT_SUBSTRING("Exception: nulltruefalse123456æøå3.14[]100123456789\n", |
3046 Dart_GetError(result)); | 3046 Dart_GetError(result)); |
3047 | 3047 |
3048 Dart_ExitScope(); | 3048 Dart_ExitScope(); |
3049 } | 3049 } |
3050 | 3050 |
3051 | 3051 |
3052 TEST_CASE(OmittedObjectEncodingLength) { | 3052 TEST_CASE(OmittedObjectEncodingLength) { |
3053 StackZone zone(Isolate::Current()); | 3053 StackZone zone(Thread::Current()); |
3054 uint8_t* buffer; | 3054 uint8_t* buffer; |
3055 MessageWriter writer(&buffer, &zone_allocator, true); | 3055 MessageWriter writer(&buffer, &zone_allocator, true); |
3056 writer.WriteInlinedObjectHeader(kOmittedObjectId); | 3056 writer.WriteInlinedObjectHeader(kOmittedObjectId); |
3057 // For performance, we'd like single-byte headers when ids are omitted. | 3057 // For performance, we'd like single-byte headers when ids are omitted. |
3058 // If this starts failing, consider renumbering the snapshot ids. | 3058 // If this starts failing, consider renumbering the snapshot ids. |
3059 EXPECT_EQ(1, writer.BytesWritten()); | 3059 EXPECT_EQ(1, writer.BytesWritten()); |
3060 } | 3060 } |
3061 | 3061 |
3062 } // namespace dart | 3062 } // namespace dart |
OLD | NEW |