Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Side by Side Diff: runtime/vm/snapshot_test.cc

Issue 9303001: Add support for lists to the C message reader (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Removed unused function Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/vm/snapshot.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/assert.h" 5 #include "platform/assert.h"
6 #include "vm/bigint_operations.h" 6 #include "vm/bigint_operations.h"
7 #include "vm/class_finalizer.h" 7 #include "vm/class_finalizer.h"
8 #include "vm/dart_api_impl.h" 8 #include "vm/dart_api_impl.h"
9 #include "vm/dart_api_state.h" 9 #include "vm/dart_api_state.h"
10 #include "vm/snapshot.h" 10 #include "vm/snapshot.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 // Read object back from the snapshot. 56 // Read object back from the snapshot.
57 SnapshotReader reader(snapshot, Isolate::Current()); 57 SnapshotReader reader(snapshot, Isolate::Current());
58 const Object& serialized_object = Object::Handle(reader.ReadObject()); 58 const Object& serialized_object = Object::Handle(reader.ReadObject());
59 EXPECT(Equals(null_object, serialized_object)); 59 EXPECT(Equals(null_object, serialized_object));
60 60
61 // Read object back from the snapshot into a C structure. 61 // Read object back from the snapshot into a C structure.
62 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 62 CMessageReader mreader(buffer + Snapshot::kHeaderSize,
63 writer.BytesWritten(), 63 writer.BytesWritten(),
64 &allocator); 64 &allocator);
65 Dart_CObject* cobject = mreader.ReadObject(); 65 Dart_CObject* cobject = mreader.ReadObject();
66 EXPECT_NOTNULL(cobject);
66 EXPECT_EQ(Dart_CObject::kNull, cobject->type); 67 EXPECT_EQ(Dart_CObject::kNull, cobject->type);
67 free(cobject); 68 free(cobject);
68 } 69 }
69 70
70 71
71 TEST_CASE(SerializeSmi1) { 72 TEST_CASE(SerializeSmi1) {
72 // Write snapshot with object content. 73 // Write snapshot with object content.
73 uint8_t* buffer; 74 uint8_t* buffer;
74 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 75 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
75 const Smi& smi = Smi::Handle(Smi::New(124)); 76 const Smi& smi = Smi::Handle(Smi::New(124));
76 writer.WriteObject(smi.raw()); 77 writer.WriteObject(smi.raw());
77 writer.FinalizeBuffer(); 78 writer.FinalizeBuffer();
78 79
79 // Create a snapshot object using the buffer. 80 // Create a snapshot object using the buffer.
80 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 81 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
81 82
82 // Read object back from the snapshot. 83 // Read object back from the snapshot.
83 SnapshotReader reader(snapshot, Isolate::Current()); 84 SnapshotReader reader(snapshot, Isolate::Current());
84 const Object& serialized_object = Object::Handle(reader.ReadObject()); 85 const Object& serialized_object = Object::Handle(reader.ReadObject());
85 EXPECT(Equals(smi, serialized_object)); 86 EXPECT(Equals(smi, serialized_object));
86 87
87 // Read object back from the snapshot into a C structure. 88 // Read object back from the snapshot into a C structure.
88 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 89 CMessageReader mreader(buffer + Snapshot::kHeaderSize,
89 writer.BytesWritten(), 90 writer.BytesWritten(),
90 &allocator); 91 &allocator);
91 Dart_CObject* cobject = mreader.ReadObject(); 92 Dart_CObject* cobject = mreader.ReadObject();
93 EXPECT_NOTNULL(cobject);
92 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); 94 EXPECT_EQ(Dart_CObject::kInt32, cobject->type);
93 EXPECT_EQ(smi.Value(), cobject->value.as_int32); 95 EXPECT_EQ(smi.Value(), cobject->value.as_int32);
94 free(cobject); 96 free(cobject);
95 } 97 }
96 98
97 99
98 TEST_CASE(SerializeSmi2) { 100 TEST_CASE(SerializeSmi2) {
99 // Write snapshot with object content. 101 // Write snapshot with object content.
100 uint8_t* buffer; 102 uint8_t* buffer;
101 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 103 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
102 const Smi& smi = Smi::Handle(Smi::New(-1)); 104 const Smi& smi = Smi::Handle(Smi::New(-1));
103 writer.WriteObject(smi.raw()); 105 writer.WriteObject(smi.raw());
104 writer.FinalizeBuffer(); 106 writer.FinalizeBuffer();
105 107
106 // Create a snapshot object using the buffer. 108 // Create a snapshot object using the buffer.
107 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 109 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
108 110
109 // Read object back from the snapshot. 111 // Read object back from the snapshot.
110 SnapshotReader reader(snapshot, Isolate::Current()); 112 SnapshotReader reader(snapshot, Isolate::Current());
111 const Object& serialized_object = Object::Handle(reader.ReadObject()); 113 const Object& serialized_object = Object::Handle(reader.ReadObject());
112 EXPECT(Equals(smi, serialized_object)); 114 EXPECT(Equals(smi, serialized_object));
113 115
114 // Read object back from the snapshot into a C structure. 116 // Read object back from the snapshot into a C structure.
115 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 117 CMessageReader mreader(buffer + Snapshot::kHeaderSize,
116 writer.BytesWritten(), 118 writer.BytesWritten(),
117 &allocator); 119 &allocator);
118 Dart_CObject* cobject = mreader.ReadObject(); 120 Dart_CObject* cobject = mreader.ReadObject();
121 EXPECT_NOTNULL(cobject);
119 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); 122 EXPECT_EQ(Dart_CObject::kInt32, cobject->type);
120 EXPECT_EQ(smi.Value(), cobject->value.as_int32); 123 EXPECT_EQ(smi.Value(), cobject->value.as_int32);
121 free(cobject); 124 free(cobject);
122 } 125 }
123 126
124 127
125 TEST_CASE(SerializeDouble) { 128 TEST_CASE(SerializeDouble) {
126 // Write snapshot with object content. 129 // Write snapshot with object content.
127 uint8_t* buffer; 130 uint8_t* buffer;
128 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 131 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
129 const Double& dbl = Double::Handle(Double::New(101.29)); 132 const Double& dbl = Double::Handle(Double::New(101.29));
130 writer.WriteObject(dbl.raw()); 133 writer.WriteObject(dbl.raw());
131 writer.FinalizeBuffer(); 134 writer.FinalizeBuffer();
132 135
133 // Create a snapshot object using the buffer. 136 // Create a snapshot object using the buffer.
134 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 137 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
135 138
136 // Read object back from the snapshot. 139 // Read object back from the snapshot.
137 SnapshotReader reader(snapshot, Isolate::Current()); 140 SnapshotReader reader(snapshot, Isolate::Current());
138 const Object& serialized_object = Object::Handle(reader.ReadObject()); 141 const Object& serialized_object = Object::Handle(reader.ReadObject());
139 EXPECT(Equals(dbl, serialized_object)); 142 EXPECT(Equals(dbl, serialized_object));
140 143
141 // Read object back from the snapshot into a C structure. 144 // Read object back from the snapshot into a C structure.
142 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 145 CMessageReader mreader(buffer + Snapshot::kHeaderSize,
143 writer.BytesWritten(), 146 writer.BytesWritten(),
144 &allocator); 147 &allocator);
145 Dart_CObject* cobject = mreader.ReadObject(); 148 Dart_CObject* cobject = mreader.ReadObject();
149 EXPECT_NOTNULL(cobject);
146 EXPECT_EQ(Dart_CObject::kDouble, cobject->type); 150 EXPECT_EQ(Dart_CObject::kDouble, cobject->type);
147 EXPECT_EQ(dbl.value(), cobject->value.as_double); 151 EXPECT_EQ(dbl.value(), cobject->value.as_double);
148 free(cobject); 152 free(cobject);
149 } 153 }
150 154
151 155
152 TEST_CASE(SerializeBool) { 156 TEST_CASE(SerializeBool) {
153 // Write snapshot with object content. 157 // Write snapshot with object content.
154 uint8_t* buffer; 158 uint8_t* buffer;
155 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 159 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
156 const Bool& bool1 = Bool::Handle(Bool::True()); 160 const Bool& bool1 = Bool::Handle(Bool::True());
157 const Bool& bool2 = Bool::Handle(Bool::False()); 161 const Bool& bool2 = Bool::Handle(Bool::False());
158 writer.WriteObject(bool1.raw()); 162 writer.WriteObject(bool1.raw());
159 writer.WriteObject(bool2.raw()); 163 writer.WriteObject(bool2.raw());
160 writer.FinalizeBuffer(); 164 writer.FinalizeBuffer();
161 165
162 // Create a snapshot object using the buffer. 166 // Create a snapshot object using the buffer.
163 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 167 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
164 168
165 // Read object back from the snapshot. 169 // Read object back from the snapshot.
166 SnapshotReader reader(snapshot, Isolate::Current()); 170 SnapshotReader reader(snapshot, Isolate::Current());
167 EXPECT(Bool::True() == reader.ReadObject()); 171 EXPECT(Bool::True() == reader.ReadObject());
168 EXPECT(Bool::False() == reader.ReadObject()); 172 EXPECT(Bool::False() == reader.ReadObject());
169 173
170 // Read object back from the snapshot into a C structure. 174 // Read object back from the snapshot into a C structure.
171 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 175 CMessageReader mreader(buffer + Snapshot::kHeaderSize,
172 writer.BytesWritten(), 176 writer.BytesWritten(),
173 &allocator); 177 &allocator);
174 Dart_CObject* cobject1 = mreader.ReadObject(); 178 Dart_CObject* cobject1 = mreader.ReadObject();
179 EXPECT_NOTNULL(cobject1);
175 EXPECT_EQ(Dart_CObject::kBool, cobject1->type); 180 EXPECT_EQ(Dart_CObject::kBool, cobject1->type);
176 EXPECT_EQ(true, cobject1->value.as_bool); 181 EXPECT_EQ(true, cobject1->value.as_bool);
177 Dart_CObject* cobject2 = mreader.ReadObject(); 182 Dart_CObject* cobject2 = mreader.ReadObject();
183 EXPECT_NOTNULL(cobject2);
178 EXPECT_EQ(Dart_CObject::kBool, cobject2->type); 184 EXPECT_EQ(Dart_CObject::kBool, cobject2->type);
179 EXPECT_EQ(false, cobject2->value.as_bool); 185 EXPECT_EQ(false, cobject2->value.as_bool);
180 free(cobject1); 186 free(cobject1);
181 free(cobject2); 187 free(cobject2);
182 } 188 }
183 189
184 190
185 TEST_CASE(SerializeBigint) { 191 TEST_CASE(SerializeBigint) {
186 // Write snapshot with object content. 192 // Write snapshot with object content.
187 uint8_t* buffer; 193 uint8_t* buffer;
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 for (int i = 0; i < kArrayLength; i++) { 663 for (int i = 0; i < kArrayLength; i++) {
658 Dart_CObject* element = value->value.as_array.values[i]; 664 Dart_CObject* element = value->value.as_array.values[i];
659 EXPECT_EQ(Dart_CObject::kInt32, element->type); 665 EXPECT_EQ(Dart_CObject::kInt32, element->type);
660 EXPECT_EQ(i + 1, element->value.as_int32); 666 EXPECT_EQ(i + 1, element->value.as_int32);
661 free(element); 667 free(element);
662 } 668 }
663 free(value); 669 free(value);
664 } 670 }
665 671
666 672
673 // Helper function to call a top level Dart function, serialize the
674 // result and deserialize the result into a Dart_CObject structure.
675 static Dart_CObject* GetDeserializedDartObject(Dart_Handle lib,
676 const char* dart_function) {
677 Dart_Handle result;
678 result = Dart_InvokeStatic(lib,
679 Dart_NewString(""),
680 Dart_NewString(dart_function),
681 0,
682 NULL);
683 EXPECT_VALID(result);
684
685 // Serialize the list into a message.
686 uint8_t* buffer;
687 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
688 const Object& list = Object::Handle(Api::UnwrapHandle(result));
689 writer.WriteObject(list.raw());
690 writer.FinalizeBuffer();
691
692 // Read object back from the snapshot into a C structure.
693 CMessageReader reader(buffer + Snapshot::kHeaderSize,
694 writer.BytesWritten(),
695 &allocator);
696 Dart_CObject* value = reader.ReadObject();
697 free(buffer);
698 return value;
699 }
700
701
667 UNIT_TEST_CASE(DartGeneratedMessages) { 702 UNIT_TEST_CASE(DartGeneratedMessages) {
668 const int kArrayLength = 10;
669 static const char* kCustomIsolateScriptChars = 703 static const char* kCustomIsolateScriptChars =
670 "getSmi() {\n" 704 "getSmi() {\n"
671 " return 42;\n" 705 " return 42;\n"
672 "}\n" 706 "}\n"
673 "getString() {\n" 707 "getString() {\n"
674 " return \"Hello, world!\";\n" 708 " return \"Hello, world!\";\n"
675 "}\n" 709 "}\n"
676 "getList() {\n" 710 "getList() {\n"
677 " return [1,2,3,4,5,6,7,8,9,10];\n" 711 " return new List(kArrayLength);\n"
678 "}\n"; 712 "}\n";
679 713
680 TestCase::CreateTestIsolate(); 714 TestCase::CreateTestIsolate();
681 Isolate* isolate = Isolate::Current(); 715 Isolate* isolate = Isolate::Current();
682 EXPECT(isolate != NULL); 716 EXPECT(isolate != NULL);
683 Dart_EnterScope(); 717 Dart_EnterScope();
684 718
685 Dart_Handle lib = TestCase::LoadTestScript(kCustomIsolateScriptChars, 719 Dart_Handle lib = TestCase::LoadTestScript(kCustomIsolateScriptChars,
686 NULL); 720 NULL);
687 EXPECT_VALID(lib); 721 EXPECT_VALID(lib);
688 Dart_Handle smi_result; 722 Dart_Handle smi_result;
689 smi_result = Dart_InvokeStatic(lib, 723 smi_result = Dart_InvokeStatic(lib,
690 Dart_NewString(""), 724 Dart_NewString(""),
691 Dart_NewString("getSmi"), 725 Dart_NewString("getSmi"),
692 0, 726 0,
693 NULL); 727 NULL);
694 EXPECT_VALID(smi_result); 728 EXPECT_VALID(smi_result);
695 Dart_Handle string_result; 729 Dart_Handle string_result;
696 string_result = Dart_InvokeStatic(lib, 730 string_result = Dart_InvokeStatic(lib,
697 Dart_NewString(""), 731 Dart_NewString(""),
698 Dart_NewString("getString"), 732 Dart_NewString("getString"),
699 0, 733 0,
700 NULL); 734 NULL);
701 EXPECT_VALID(string_result); 735 EXPECT_VALID(string_result);
702 EXPECT(Dart_IsString(string_result)); 736 EXPECT(Dart_IsString(string_result));
703 Dart_Handle list_result; 737
704 list_result = Dart_InvokeStatic(lib,
705 Dart_NewString(""),
706 Dart_NewString("getList"),
707 0,
708 NULL);
709 EXPECT_VALID(list_result);
710 EXPECT(Dart_IsList(list_result));
711 intptr_t result_len = 0;
712 EXPECT_VALID(Dart_ListLength(list_result, &result_len));
713 EXPECT_EQ(kArrayLength, result_len);
714 { 738 {
715 DARTSCOPE_NOCHECKS(isolate); 739 DARTSCOPE_NOCHECKS(isolate);
716 740
717 { 741 {
718 uint8_t* buffer; 742 uint8_t* buffer;
719 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 743 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
720 Smi& smi = Smi::Handle(); 744 Smi& smi = Smi::Handle();
721 smi ^= Api::UnwrapHandle(smi_result); 745 smi ^= Api::UnwrapHandle(smi_result);
722 writer.WriteObject(smi.raw()); 746 writer.WriteObject(smi.raw());
723 writer.FinalizeBuffer(); 747 writer.FinalizeBuffer();
724 748
725 // Read object back from the snapshot into a C structure. 749 // Read object back from the snapshot into a C structure.
726 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 750 CMessageReader mreader(buffer + Snapshot::kHeaderSize,
727 writer.BytesWritten(), 751 writer.BytesWritten(),
728 &allocator); 752 &allocator);
729 Dart_CObject* value = mreader.ReadObject(); 753 Dart_CObject* value = mreader.ReadObject();
754 EXPECT_NOTNULL(value);
730 EXPECT_EQ(Dart_CObject::kInt32, value->type); 755 EXPECT_EQ(Dart_CObject::kInt32, value->type);
731 EXPECT_EQ(42, value->value.as_int32); 756 EXPECT_EQ(42, value->value.as_int32);
732 free(value); 757 free(value);
733 free(buffer); 758 free(buffer);
734 } 759 }
735 { 760 {
736 uint8_t* buffer; 761 uint8_t* buffer;
737 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 762 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
738 String& str = String::Handle(); 763 String& str = String::Handle();
739 str ^= Api::UnwrapHandle(string_result); 764 str ^= Api::UnwrapHandle(string_result);
740 writer.WriteObject(str.raw()); 765 writer.WriteObject(str.raw());
741 writer.FinalizeBuffer(); 766 writer.FinalizeBuffer();
742 767
743 // Read object back from the snapshot into a C structure. 768 // Read object back from the snapshot into a C structure.
744 CMessageReader mreader(buffer + Snapshot::kHeaderSize, 769 CMessageReader mreader(buffer + Snapshot::kHeaderSize,
745 writer.BytesWritten(), 770 writer.BytesWritten(),
746 &allocator); 771 &allocator);
747 Dart_CObject* value = mreader.ReadObject(); 772 Dart_CObject* value = mreader.ReadObject();
773 EXPECT_NOTNULL(value);
748 EXPECT_EQ(Dart_CObject::kString, value->type); 774 EXPECT_EQ(Dart_CObject::kString, value->type);
749 EXPECT_STREQ("Hello, world!", value->value.as_string); 775 EXPECT_STREQ("Hello, world!", value->value.as_string);
750 free(value); 776 free(value);
751 free(buffer); 777 free(buffer);
752 } 778 }
779 }
780 Dart_ExitScope();
781 Dart_ShutdownIsolate();
782 }
783
784
785 UNIT_TEST_CASE(DartGeneratedListMessages) {
786 const int kArrayLength = 10;
787 static const char* kScriptChars =
788 "final int kArrayLength = 10;\n"
789 "getList() {\n"
790 " return new List(kArrayLength);\n"
791 "}\n"
792 "getIntList() {\n"
793 " var list = new List<int>(kArrayLength);\n"
794 " for (var i = 0; i < kArrayLength; i++) list[i] = i;\n"
795 " return list;\n"
796 "}\n"
797 "getStringList() {\n"
798 " var list = new List<String>(kArrayLength);\n"
799 " for (var i = 0; i < kArrayLength; i++) list[i] = i.toString();\n"
800 " return list;\n"
801 "}\n"
802 "getMixedList() {\n"
803 " var list = new List(kArrayLength);\n"
804 " list[0] = 0;\n"
805 " list[1] = '1';\n"
806 " list[2] = 2.2;\n"
807 " list[3] = true;\n"
808 " return list;\n"
809 "}\n";
810
811 TestCase::CreateTestIsolate();
812 Isolate* isolate = Isolate::Current();
813 EXPECT(isolate != NULL);
814 Dart_EnterScope();
815
816 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
817 EXPECT_VALID(lib);
818
819 {
820 DARTSCOPE_NOCHECKS(isolate);
821
753 { 822 {
754 uint8_t* buffer; 823 // Generate a list of nulls from Dart code.
755 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 824 Dart_CObject* value = GetDeserializedDartObject(lib, "getList");
756 const Object& list = Object::Handle(Api::UnwrapHandle(list_result)); 825 EXPECT_NOTNULL(value);
757 writer.WriteObject(list.raw()); 826 EXPECT_EQ(Dart_CObject::kArray, value->type);
758 writer.FinalizeBuffer(); 827 EXPECT_EQ(kArrayLength, value->value.as_array.length);
759 // TODO(sgjesse): Make this work! 828 for (int i = 0; i < kArrayLength; i++) {
760 free(buffer); 829 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type);
830 free(value->value.as_array.values[i]);
831 }
832 free(value);
833 }
834 {
835 // Generate a list of ints from Dart code.
836 Dart_CObject* value = GetDeserializedDartObject(lib, "getIntList");
837 EXPECT_NOTNULL(value);
838 EXPECT_EQ(Dart_CObject::kArray, value->type);
839 EXPECT_EQ(kArrayLength, value->value.as_array.length);
840 for (int i = 0; i < kArrayLength; i++) {
841 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[i]->type);
842 EXPECT_EQ(i, value->value.as_array.values[i]->value.as_int32);
843 free(value->value.as_array.values[i]);
844 }
845 free(value);
846 }
847 {
848 // Generate a list of strings from Dart code.
849 Dart_CObject* value = GetDeserializedDartObject(lib, "getStringList");
850 EXPECT_NOTNULL(value);
851 EXPECT_EQ(Dart_CObject::kArray, value->type);
852 EXPECT_EQ(kArrayLength, value->value.as_array.length);
853 for (int i = 0; i < kArrayLength; i++) {
854 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[i]->type);
855 char buffer[3];
856 snprintf(buffer, sizeof(buffer), "%d", i);
857 EXPECT_STREQ(buffer, value->value.as_array.values[i]->value.as_string);
858 free(value->value.as_array.values[i]);
859 }
860 free(value);
861 }
862 {
863 // Generate a list of objects of different types from Dart code.
864 Dart_CObject* value = GetDeserializedDartObject(lib, "getMixedList");
865 EXPECT_NOTNULL(value);
866 EXPECT_EQ(Dart_CObject::kArray, value->type);
867 EXPECT_EQ(kArrayLength, value->value.as_array.length);
868
869 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[0]->type);
870 EXPECT_EQ(0, value->value.as_array.values[0]->value.as_int32);
871 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[1]->type);
872 EXPECT_STREQ("1", value->value.as_array.values[1]->value.as_string);
873 EXPECT_EQ(Dart_CObject::kDouble, value->value.as_array.values[2]->type);
874 EXPECT_EQ(2.2, value->value.as_array.values[2]->value.as_double);
875 EXPECT_EQ(Dart_CObject::kBool, value->value.as_array.values[3]->type);
876 EXPECT_EQ(true, value->value.as_array.values[3]->value.as_bool);
877
878 for (int i = 0; i < kArrayLength; i++) {
879 if (i > 3) {
880 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type);
881 }
882 free(value->value.as_array.values[i]);
883 }
884 free(value);
761 } 885 }
762 } 886 }
763 Dart_ExitScope(); 887 Dart_ExitScope();
764 Dart_ShutdownIsolate(); 888 Dart_ShutdownIsolate();
765 } 889 }
766 890
767 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). 891 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
768 892
769 } // namespace dart 893 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/snapshot.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698