| 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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 break; | 85 break; |
| 86 case Dart_CObject::kBigint: | 86 case Dart_CObject::kBigint: |
| 87 EXPECT_STREQ(first->value.as_bigint, second->value.as_bigint); | 87 EXPECT_STREQ(first->value.as_bigint, second->value.as_bigint); |
| 88 break; | 88 break; |
| 89 case Dart_CObject::kDouble: | 89 case Dart_CObject::kDouble: |
| 90 EXPECT_EQ(first->value.as_double, second->value.as_double); | 90 EXPECT_EQ(first->value.as_double, second->value.as_double); |
| 91 break; | 91 break; |
| 92 case Dart_CObject::kString: | 92 case Dart_CObject::kString: |
| 93 EXPECT_STREQ(first->value.as_string, second->value.as_string); | 93 EXPECT_STREQ(first->value.as_string, second->value.as_string); |
| 94 break; | 94 break; |
| 95 case Dart_CObject::kByteArray: | 95 case Dart_CObject::kUint8Array: |
| 96 EXPECT_EQ(first->value.as_byte_array.length, | 96 EXPECT_EQ(first->value.as_byte_array.length, |
| 97 second->value.as_byte_array.length); | 97 second->value.as_byte_array.length); |
| 98 for (int i = 0; i < first->value.as_byte_array.length; i++) { | 98 for (int i = 0; i < first->value.as_byte_array.length; i++) { |
| 99 EXPECT_EQ(first->value.as_byte_array.values[i], | 99 EXPECT_EQ(first->value.as_byte_array.values[i], |
| 100 second->value.as_byte_array.values[i]); | 100 second->value.as_byte_array.values[i]); |
| 101 } | 101 } |
| 102 break; | 102 break; |
| 103 case Dart_CObject::kArray: | 103 case Dart_CObject::kArray: |
| 104 // Use invalid type as a visited marker to avoid infinite | 104 // Use invalid type as a visited marker to avoid infinite |
| 105 // recursion on graphs with cycles. | 105 // recursion on graphs with cycles. |
| (...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 648 } | 648 } |
| 649 | 649 |
| 650 | 650 |
| 651 TEST_CASE(SerializeByteArray) { | 651 TEST_CASE(SerializeByteArray) { |
| 652 Zone zone(Isolate::Current()); | 652 Zone zone(Isolate::Current()); |
| 653 | 653 |
| 654 // Write snapshot with object content. | 654 // Write snapshot with object content. |
| 655 uint8_t* buffer; | 655 uint8_t* buffer; |
| 656 SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator); | 656 SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator); |
| 657 const int kByteArrayLength = 256; | 657 const int kByteArrayLength = 256; |
| 658 InternalByteArray& byte_array = | 658 Uint8Array& byte_array = |
| 659 InternalByteArray::Handle(InternalByteArray::New(kByteArrayLength)); | 659 Uint8Array::Handle(Uint8Array::New(kByteArrayLength)); |
| 660 for (int i = 0; i < kByteArrayLength; i++) { | 660 for (int i = 0; i < kByteArrayLength; i++) { |
| 661 byte_array.SetAt<uint8_t>(i, i); | 661 byte_array.SetAt(i, i); |
| 662 } | 662 } |
| 663 writer.WriteObject(byte_array.raw()); | 663 writer.WriteObject(byte_array.raw()); |
| 664 writer.FinalizeBuffer(); | 664 writer.FinalizeBuffer(); |
| 665 | 665 |
| 666 // Create a snapshot object using the buffer. | 666 // Create a snapshot object using the buffer. |
| 667 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); | 667 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); |
| 668 | 668 |
| 669 // Read object back from the snapshot. | 669 // Read object back from the snapshot. |
| 670 SnapshotReader reader(snapshot, Isolate::Current()); | 670 SnapshotReader reader(snapshot, Isolate::Current()); |
| 671 ByteArray& serialized_byte_array = ByteArray::Handle(); | 671 ByteArray& serialized_byte_array = ByteArray::Handle(); |
| 672 serialized_byte_array ^= reader.ReadObject(); | 672 serialized_byte_array ^= reader.ReadObject(); |
| 673 EXPECT(serialized_byte_array.IsByteArray()); | 673 EXPECT(serialized_byte_array.IsByteArray()); |
| 674 | 674 |
| 675 // Read object back from the snapshot into a C structure. | 675 // Read object back from the snapshot into a C structure. |
| 676 ApiNativeScope scope; | 676 ApiNativeScope scope; |
| 677 Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize, | 677 Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| 678 writer.BytesWritten(), | 678 writer.BytesWritten(), |
| 679 &zone_allocator); | 679 &zone_allocator); |
| 680 EXPECT_EQ(Dart_CObject::kByteArray, root->type); | 680 EXPECT_EQ(Dart_CObject::kUint8Array, root->type); |
| 681 EXPECT_EQ(kByteArrayLength, root->value.as_byte_array.length); | 681 EXPECT_EQ(kByteArrayLength, root->value.as_byte_array.length); |
| 682 for (int i = 0; i < kByteArrayLength; i++) { | 682 for (int i = 0; i < kByteArrayLength; i++) { |
| 683 EXPECT(root->value.as_byte_array.values[i] == i); | 683 EXPECT(root->value.as_byte_array.values[i] == i); |
| 684 } | 684 } |
| 685 CheckEncodeDecodeMessage(root); | 685 CheckEncodeDecodeMessage(root); |
| 686 } | 686 } |
| 687 | 687 |
| 688 | 688 |
| 689 TEST_CASE(SerializeEmptyByteArray) { | 689 TEST_CASE(SerializeEmptyByteArray) { |
| 690 Zone zone(Isolate::Current()); | 690 Zone zone(Isolate::Current()); |
| 691 | 691 |
| 692 // Write snapshot with object content. | 692 // Write snapshot with object content. |
| 693 uint8_t* buffer; | 693 uint8_t* buffer; |
| 694 SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator); | 694 SnapshotWriter writer(Snapshot::kMessage, &buffer, &zone_allocator); |
| 695 const int kByteArrayLength = 0; | 695 const int kByteArrayLength = 0; |
| 696 InternalByteArray& byte_array = | 696 Uint8Array& byte_array = |
| 697 InternalByteArray::Handle(InternalByteArray::New(kByteArrayLength)); | 697 Uint8Array::Handle(Uint8Array::New(kByteArrayLength)); |
| 698 writer.WriteObject(byte_array.raw()); | 698 writer.WriteObject(byte_array.raw()); |
| 699 writer.FinalizeBuffer(); | 699 writer.FinalizeBuffer(); |
| 700 | 700 |
| 701 // Create a snapshot object using the buffer. | 701 // Create a snapshot object using the buffer. |
| 702 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); | 702 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); |
| 703 | 703 |
| 704 // Read object back from the snapshot. | 704 // Read object back from the snapshot. |
| 705 SnapshotReader reader(snapshot, Isolate::Current()); | 705 SnapshotReader reader(snapshot, Isolate::Current()); |
| 706 ByteArray& serialized_byte_array = ByteArray::Handle(); | 706 ByteArray& serialized_byte_array = ByteArray::Handle(); |
| 707 serialized_byte_array ^= reader.ReadObject(); | 707 serialized_byte_array ^= reader.ReadObject(); |
| 708 EXPECT(serialized_byte_array.IsByteArray()); | 708 EXPECT(serialized_byte_array.IsByteArray()); |
| 709 | 709 |
| 710 // Read object back from the snapshot into a C structure. | 710 // Read object back from the snapshot into a C structure. |
| 711 ApiNativeScope scope; | 711 ApiNativeScope scope; |
| 712 Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize, | 712 Dart_CObject* root = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| 713 writer.BytesWritten(), | 713 writer.BytesWritten(), |
| 714 &zone_allocator); | 714 &zone_allocator); |
| 715 EXPECT_EQ(Dart_CObject::kByteArray, root->type); | 715 EXPECT_EQ(Dart_CObject::kUint8Array, root->type); |
| 716 EXPECT_EQ(kByteArrayLength, root->value.as_byte_array.length); | 716 EXPECT_EQ(kByteArrayLength, root->value.as_byte_array.length); |
| 717 EXPECT(root->value.as_byte_array.values == NULL); | 717 EXPECT(root->value.as_byte_array.values == NULL); |
| 718 CheckEncodeDecodeMessage(root); | 718 CheckEncodeDecodeMessage(root); |
| 719 } | 719 } |
| 720 | 720 |
| 721 | 721 |
| 722 TEST_CASE(SerializeScript) { | 722 TEST_CASE(SerializeScript) { |
| 723 const char* kScriptChars = | 723 const char* kScriptChars = |
| 724 "class A {\n" | 724 "class A {\n" |
| 725 " static bar() { return 42; }\n" | 725 " static bar() { return 42; }\n" |
| (...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1297 " for (var i = 0; i < kArrayLength; i++) list[i] = bigint;\n" | 1297 " for (var i = 0; i < kArrayLength; i++) list[i] = bigint;\n" |
| 1298 " return list;\n" | 1298 " return list;\n" |
| 1299 "}\n" | 1299 "}\n" |
| 1300 "getDoubleList() {\n" | 1300 "getDoubleList() {\n" |
| 1301 " var d = 3.14;\n" | 1301 " var d = 3.14;\n" |
| 1302 " var list = new List<double>(kArrayLength);\n" | 1302 " var list = new List<double>(kArrayLength);\n" |
| 1303 " for (var i = 0; i < kArrayLength; i++) list[i] = d;\n" | 1303 " for (var i = 0; i < kArrayLength; i++) list[i] = d;\n" |
| 1304 " return list;\n" | 1304 " return list;\n" |
| 1305 "}\n" | 1305 "}\n" |
| 1306 "getByteArrayList() {\n" | 1306 "getByteArrayList() {\n" |
| 1307 " var byte_array = new ByteArray(256);\n" | 1307 " var byte_array = new Uint8List(256);\n" |
| 1308 " var list = new List<ByteArray>(kArrayLength);\n" | 1308 " var list = new List(kArrayLength);\n" |
| 1309 " for (var i = 0; i < kArrayLength; i++) list[i] = byte_array;\n" | 1309 " for (var i = 0; i < kArrayLength; i++) list[i] = byte_array;\n" |
| 1310 " return list;\n" | 1310 " return list;\n" |
| 1311 "}\n" | 1311 "}\n" |
| 1312 "getMixedList() {\n" | 1312 "getMixedList() {\n" |
| 1313 " var list = new List(kArrayLength);\n" | 1313 " var list = new List(kArrayLength);\n" |
| 1314 " for (var i = 0; i < kArrayLength; i++) {\n" | 1314 " for (var i = 0; i < kArrayLength; i++) {\n" |
| 1315 " list[i] = ((i % 2) == 0) ? 'A' : 2.72;\n" | 1315 " list[i] = ((i % 2) == 0) ? 'A' : 2.72;\n" |
| 1316 " }\n" | 1316 " }\n" |
| 1317 " return list;\n" | 1317 " return list;\n" |
| 1318 "}\n" | 1318 "}\n" |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1392 { | 1392 { |
| 1393 // Generate a list of doubles from Dart code. | 1393 // Generate a list of doubles from Dart code. |
| 1394 ApiNativeScope scope; | 1394 ApiNativeScope scope; |
| 1395 Dart_CObject* root = GetDeserializedDartMessage(lib, "getByteArrayList"); | 1395 Dart_CObject* root = GetDeserializedDartMessage(lib, "getByteArrayList"); |
| 1396 EXPECT_NOTNULL(root); | 1396 EXPECT_NOTNULL(root); |
| 1397 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1397 EXPECT_EQ(Dart_CObject::kArray, root->type); |
| 1398 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1398 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
| 1399 for (int i = 0; i < kArrayLength; i++) { | 1399 for (int i = 0; i < kArrayLength; i++) { |
| 1400 Dart_CObject* element = root->value.as_array.values[i]; | 1400 Dart_CObject* element = root->value.as_array.values[i]; |
| 1401 EXPECT_EQ(root->value.as_array.values[0], element); | 1401 EXPECT_EQ(root->value.as_array.values[0], element); |
| 1402 EXPECT_EQ(Dart_CObject::kByteArray, element->type); | 1402 EXPECT_EQ(Dart_CObject::kUint8Array, element->type); |
| 1403 EXPECT_EQ(256, element->value.as_byte_array.length); | 1403 EXPECT_EQ(256, element->value.as_byte_array.length); |
| 1404 } | 1404 } |
| 1405 } | 1405 } |
| 1406 { | 1406 { |
| 1407 // Generate a list of objects of different types from Dart code. | 1407 // Generate a list of objects of different types from Dart code. |
| 1408 ApiNativeScope scope; | 1408 ApiNativeScope scope; |
| 1409 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList"); | 1409 Dart_CObject* root = GetDeserializedDartMessage(lib, "getMixedList"); |
| 1410 EXPECT_NOTNULL(root); | 1410 EXPECT_NOTNULL(root); |
| 1411 EXPECT_EQ(Dart_CObject::kArray, root->type); | 1411 EXPECT_EQ(Dart_CObject::kArray, root->type); |
| 1412 EXPECT_EQ(kArrayLength, root->value.as_array.length); | 1412 EXPECT_EQ(kArrayLength, root->value.as_array.length); |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1532 EXPECT(Dart_ErrorHasException(result)); | 1532 EXPECT(Dart_ErrorHasException(result)); |
| 1533 EXPECT_SUBSTRING("Exception: nulltruefalse1234563.14[]100123456789\n", | 1533 EXPECT_SUBSTRING("Exception: nulltruefalse1234563.14[]100123456789\n", |
| 1534 Dart_GetError(result)); | 1534 Dart_GetError(result)); |
| 1535 | 1535 |
| 1536 Dart_ExitScope(); | 1536 Dart_ExitScope(); |
| 1537 } | 1537 } |
| 1538 | 1538 |
| 1539 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). | 1539 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). |
| 1540 | 1540 |
| 1541 } // namespace dart | 1541 } // namespace dart |
| OLD | NEW |