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

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

Issue 9104041: Added API Dart_PostCMessage for posting a Dart_CMessage structure (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: 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
« runtime/vm/dart_api_impl.cc ('K') | « 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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 44
45 static void FreeDeserializedDartMessage(Dart_CMessage* cmessage) { 45 static void FreeDeserializedDartMessage(Dart_CMessage* cmessage) {
46 for (int i = 0; i < cmessage->allocated_length; i++) { 46 for (int i = 0; i < cmessage->allocated_length; i++) {
47 free(cmessage->allocated[i]); 47 free(cmessage->allocated[i]);
48 } 48 }
49 free(cmessage->original_message - Snapshot::kHeaderSize); 49 free(cmessage->original_message - Snapshot::kHeaderSize);
50 free(cmessage); 50 free(cmessage);
51 } 51 }
52 52
53 53
54 static void CompareDartCObjects(Dart_CObject* first, Dart_CObject* second) {
55 EXPECT_NE(first, second);
56 EXPECT_EQ(first->type, second->type);
57 switch (first->type) {
58 case Dart_CObject::kNull:
59 // Nothing more to compare.
60 break;
61 case Dart_CObject::kBool:
62 EXPECT_EQ(first->value.as_bool, second->value.as_bool);
63 break;
64 case Dart_CObject::kInt32:
65 EXPECT_EQ(first->value.as_int32, second->value.as_int32);
66 break;
67 case Dart_CObject::kDouble:
68 EXPECT_EQ(first->value.as_double, second->value.as_double);
69 break;
70 case Dart_CObject::kString:
71 EXPECT_STREQ(first->value.as_string, second->value.as_string);
72 break;
73 case Dart_CObject::kArray:
74 EXPECT_EQ(first->value.as_array.length, second->value.as_array.length);
75 for (int i = 0; i < first->value.as_array.length; i++) {
76 CompareDartCObjects(first->value.as_array.values[i],
77 second->value.as_array.values[i]);
78 }
79 break;
80 default:
81 EXPECT(false);
82 }
83 }
84
85
86 static void CheckEncodeMessage(Dart_CMessage* cmessage) {
87 // Encode and decode the message.
88 uint8_t* again = Dart_EncodeMessage(cmessage, allocator);
89 // TODO(sgjesse): Get the length of the encoded message instead of
90 // 1000. The length is not currently used for decoding, so a large
91 // value works for testing.
92 Dart_CMessage* new_cmessage =
93 Dart_DecodeMessage(again + Snapshot::kHeaderSize, 1000, &allocator);
94
95 // Check that the two messages are the same.
96 CompareDartCObjects(cmessage->object, new_cmessage->object);
97 FreeDeserializedDartMessage(new_cmessage);
98 }
99
54 TEST_CASE(SerializeNull) { 100 TEST_CASE(SerializeNull) {
55 // Write snapshot with object content. 101 // Write snapshot with object content.
56 uint8_t* buffer; 102 uint8_t* buffer;
57 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 103 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
58 const Object& null_object = Object::Handle(); 104 const Object& null_object = Object::Handle();
59 writer.WriteObject(null_object.raw()); 105 writer.WriteObject(null_object.raw());
60 writer.FinalizeBuffer(); 106 writer.FinalizeBuffer();
61 107
62 // Create a snapshot object using the buffer. 108 // Create a snapshot object using the buffer.
63 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 109 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
64 110
65 // Read object back from the snapshot. 111 // Read object back from the snapshot.
66 SnapshotReader reader(snapshot, Isolate::Current()); 112 SnapshotReader reader(snapshot, Isolate::Current());
67 const Object& serialized_object = Object::Handle(reader.ReadObject()); 113 const Object& serialized_object = Object::Handle(reader.ReadObject());
68 EXPECT(Equals(null_object, serialized_object)); 114 EXPECT(Equals(null_object, serialized_object));
69 115
70 // Read object back from the snapshot into a C structure. 116 // Read object back from the snapshot into a C structure.
71 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, 117 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
72 writer.BytesWritten(), 118 writer.BytesWritten(),
73 &allocator); 119 &allocator);
74 Dart_CObject* cobject = cmessage->object; 120 Dart_CObject* cobject = cmessage->object;
75 EXPECT_NOTNULL(cobject); 121 EXPECT_NOTNULL(cobject);
76 EXPECT_EQ(Dart_CObject::kNull, cobject->type); 122 EXPECT_EQ(Dart_CObject::kNull, cobject->type);
123 CheckEncodeMessage(cmessage);
77 FreeDeserializedDartMessage(cmessage); 124 FreeDeserializedDartMessage(cmessage);
78 } 125 }
79 126
80 127
81 TEST_CASE(SerializeSmi1) { 128 TEST_CASE(SerializeSmi1) {
82 // Write snapshot with object content. 129 // Write snapshot with object content.
83 uint8_t* buffer; 130 uint8_t* buffer;
84 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 131 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
85 const Smi& smi = Smi::Handle(Smi::New(124)); 132 const Smi& smi = Smi::Handle(Smi::New(124));
86 writer.WriteObject(smi.raw()); 133 writer.WriteObject(smi.raw());
87 writer.FinalizeBuffer(); 134 writer.FinalizeBuffer();
88 135
89 // Create a snapshot object using the buffer. 136 // Create a snapshot object using the buffer.
90 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 137 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
91 138
92 // Read object back from the snapshot. 139 // Read object back from the snapshot.
93 SnapshotReader reader(snapshot, Isolate::Current()); 140 SnapshotReader reader(snapshot, Isolate::Current());
94 const Object& serialized_object = Object::Handle(reader.ReadObject()); 141 const Object& serialized_object = Object::Handle(reader.ReadObject());
95 EXPECT(Equals(smi, serialized_object)); 142 EXPECT(Equals(smi, serialized_object));
96 143
97 // Read object back from the snapshot into a C structure. 144 // Read object back from the snapshot into a C structure.
98 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, 145 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
99 writer.BytesWritten(), 146 writer.BytesWritten(),
100 &allocator); 147 &allocator);
101 Dart_CObject* cobject = cmessage->object; 148 Dart_CObject* cobject = cmessage->object;
102 EXPECT_NOTNULL(cobject); 149 EXPECT_NOTNULL(cobject);
103 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); 150 EXPECT_EQ(Dart_CObject::kInt32, cobject->type);
104 EXPECT_EQ(smi.Value(), cobject->value.as_int32); 151 EXPECT_EQ(smi.Value(), cobject->value.as_int32);
152 CheckEncodeMessage(cmessage);
105 FreeDeserializedDartMessage(cmessage); 153 FreeDeserializedDartMessage(cmessage);
106 } 154 }
107 155
108 156
109 TEST_CASE(SerializeSmi2) { 157 TEST_CASE(SerializeSmi2) {
110 // Write snapshot with object content. 158 // Write snapshot with object content.
111 uint8_t* buffer; 159 uint8_t* buffer;
112 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 160 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
113 const Smi& smi = Smi::Handle(Smi::New(-1)); 161 const Smi& smi = Smi::Handle(Smi::New(-1));
114 writer.WriteObject(smi.raw()); 162 writer.WriteObject(smi.raw());
115 writer.FinalizeBuffer(); 163 writer.FinalizeBuffer();
116 164
117 // Create a snapshot object using the buffer. 165 // Create a snapshot object using the buffer.
118 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 166 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
119 167
120 // Read object back from the snapshot. 168 // Read object back from the snapshot.
121 SnapshotReader reader(snapshot, Isolate::Current()); 169 SnapshotReader reader(snapshot, Isolate::Current());
122 const Object& serialized_object = Object::Handle(reader.ReadObject()); 170 const Object& serialized_object = Object::Handle(reader.ReadObject());
123 EXPECT(Equals(smi, serialized_object)); 171 EXPECT(Equals(smi, serialized_object));
124 172
125 // Read object back from the snapshot into a C structure. 173 // Read object back from the snapshot into a C structure.
126 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, 174 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
127 writer.BytesWritten(), 175 writer.BytesWritten(),
128 &allocator); 176 &allocator);
129 Dart_CObject* cobject = cmessage->object; 177 Dart_CObject* cobject = cmessage->object;
130 EXPECT_NOTNULL(cobject); 178 EXPECT_NOTNULL(cobject);
131 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); 179 EXPECT_EQ(Dart_CObject::kInt32, cobject->type);
132 EXPECT_EQ(smi.Value(), cobject->value.as_int32); 180 EXPECT_EQ(smi.Value(), cobject->value.as_int32);
181 CheckEncodeMessage(cmessage);
133 FreeDeserializedDartMessage(cmessage); 182 FreeDeserializedDartMessage(cmessage);
134 } 183 }
135 184
136 185
137 TEST_CASE(SerializeDouble) { 186 TEST_CASE(SerializeDouble) {
138 // Write snapshot with object content. 187 // Write snapshot with object content.
139 uint8_t* buffer; 188 uint8_t* buffer;
140 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 189 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
141 const Double& dbl = Double::Handle(Double::New(101.29)); 190 const Double& dbl = Double::Handle(Double::New(101.29));
142 writer.WriteObject(dbl.raw()); 191 writer.WriteObject(dbl.raw());
143 writer.FinalizeBuffer(); 192 writer.FinalizeBuffer();
144 193
145 // Create a snapshot object using the buffer. 194 // Create a snapshot object using the buffer.
146 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 195 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
147 196
148 // Read object back from the snapshot. 197 // Read object back from the snapshot.
149 SnapshotReader reader(snapshot, Isolate::Current()); 198 SnapshotReader reader(snapshot, Isolate::Current());
150 const Object& serialized_object = Object::Handle(reader.ReadObject()); 199 const Object& serialized_object = Object::Handle(reader.ReadObject());
151 EXPECT(Equals(dbl, serialized_object)); 200 EXPECT(Equals(dbl, serialized_object));
152 201
153 // Read object back from the snapshot into a C structure. 202 // Read object back from the snapshot into a C structure.
154 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, 203 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
155 writer.BytesWritten(), 204 writer.BytesWritten(),
156 &allocator); 205 &allocator);
157 Dart_CObject* cobject = cmessage->object; 206 Dart_CObject* cobject = cmessage->object;
158 EXPECT_NOTNULL(cobject); 207 EXPECT_NOTNULL(cobject);
159 EXPECT_EQ(Dart_CObject::kDouble, cobject->type); 208 EXPECT_EQ(Dart_CObject::kDouble, cobject->type);
160 EXPECT_EQ(dbl.value(), cobject->value.as_double); 209 EXPECT_EQ(dbl.value(), cobject->value.as_double);
210 CheckEncodeMessage(cmessage);
161 FreeDeserializedDartMessage(cmessage); 211 FreeDeserializedDartMessage(cmessage);
162 } 212 }
163 213
164 214
165 TEST_CASE(SerializeBool) { 215 TEST_CASE(SerializeBool) {
166 // Write snapshot with object content. 216 // Write snapshot with object content.
167 uint8_t* buffer; 217 uint8_t* buffer;
168 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 218 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
169 const Bool& bool1 = Bool::Handle(Bool::True()); 219 const Bool& bool1 = Bool::Handle(Bool::True());
170 const Bool& bool2 = Bool::Handle(Bool::False()); 220 const Bool& bool2 = Bool::Handle(Bool::False());
(...skipping 24 matching lines...) Expand all
195 USE(snapshot); 245 USE(snapshot);
196 246
197 // Read object back from the snapshot into a C structure. 247 // Read object back from the snapshot into a C structure.
198 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, 248 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
199 writer.BytesWritten(), 249 writer.BytesWritten(),
200 &allocator); 250 &allocator);
201 Dart_CObject* cobject = cmessage->object; 251 Dart_CObject* cobject = cmessage->object;
202 EXPECT_NOTNULL(cobject); 252 EXPECT_NOTNULL(cobject);
203 EXPECT_EQ(Dart_CObject::kBool, cobject->type); 253 EXPECT_EQ(Dart_CObject::kBool, cobject->type);
204 EXPECT_EQ(true, cobject->value.as_bool); 254 EXPECT_EQ(true, cobject->value.as_bool);
255 CheckEncodeMessage(cmessage);
205 FreeDeserializedDartMessage(cmessage); 256 FreeDeserializedDartMessage(cmessage);
206 } 257 }
207 258
208 259
209 TEST_CASE(SerializeFalse) { 260 TEST_CASE(SerializeFalse) {
210 // Write snapshot with false object. 261 // Write snapshot with false object.
211 uint8_t* buffer; 262 uint8_t* buffer;
212 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 263 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
213 const Bool& bl = Bool::Handle(Bool::False()); 264 const Bool& bl = Bool::Handle(Bool::False());
214 writer.WriteObject(bl.raw()); 265 writer.WriteObject(bl.raw());
215 writer.FinalizeBuffer(); 266 writer.FinalizeBuffer();
216 267
217 // Create a snapshot object using the buffer. 268 // Create a snapshot object using the buffer.
218 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer); 269 const Snapshot* snapshot = Snapshot::SetupFromBuffer(buffer);
219 USE(snapshot); 270 USE(snapshot);
220 271
221 // Read object back from the snapshot into a C structure. 272 // Read object back from the snapshot into a C structure.
222 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, 273 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
223 writer.BytesWritten(), 274 writer.BytesWritten(),
224 &allocator); 275 &allocator);
225 Dart_CObject* cobject = cmessage->object; 276 Dart_CObject* cobject = cmessage->object;
226 EXPECT_NOTNULL(cobject); 277 EXPECT_NOTNULL(cobject);
227 EXPECT_EQ(Dart_CObject::kBool, cobject->type); 278 EXPECT_EQ(Dart_CObject::kBool, cobject->type);
228 EXPECT_EQ(false, cobject->value.as_bool); 279 EXPECT_EQ(false, cobject->value.as_bool);
280 CheckEncodeMessage(cmessage);
229 FreeDeserializedDartMessage(cmessage); 281 FreeDeserializedDartMessage(cmessage);
230 } 282 }
231 283
232 284
233 TEST_CASE(SerializeBigint) { 285 TEST_CASE(SerializeBigint) {
234 // Write snapshot with object content. 286 // Write snapshot with object content.
235 uint8_t* buffer; 287 uint8_t* buffer;
236 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 288 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
237 const Bigint& bigint = Bigint::Handle(Bigint::New(0xfffffffffLL)); 289 const Bigint& bigint = Bigint::Handle(Bigint::New(0xfffffffffLL));
238 writer.WriteObject(bigint.raw()); 290 writer.WriteObject(bigint.raw());
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 serialized_str ^= reader.ReadObject(); 381 serialized_str ^= reader.ReadObject();
330 EXPECT(str.Equals(serialized_str)); 382 EXPECT(str.Equals(serialized_str));
331 383
332 // Read object back from the snapshot into a C structure. 384 // Read object back from the snapshot into a C structure.
333 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, 385 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
334 writer.BytesWritten(), 386 writer.BytesWritten(),
335 &allocator); 387 &allocator);
336 Dart_CObject* cobject = cmessage->object; 388 Dart_CObject* cobject = cmessage->object;
337 EXPECT_EQ(Dart_CObject::kString, cobject->type); 389 EXPECT_EQ(Dart_CObject::kString, cobject->type);
338 EXPECT_STREQ(cstr, cobject->value.as_string); 390 EXPECT_STREQ(cstr, cobject->value.as_string);
391 CheckEncodeMessage(cmessage);
339 FreeDeserializedDartMessage(cmessage); 392 FreeDeserializedDartMessage(cmessage);
340 } 393 }
341 394
342 395
343 TEST_CASE(SerializeArray) { 396 TEST_CASE(SerializeArray) {
344 // Write snapshot with object content. 397 // Write snapshot with object content.
345 uint8_t* buffer; 398 uint8_t* buffer;
346 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 399 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
347 const int kArrayLength = 10; 400 const int kArrayLength = 10;
348 Array& array = Array::Handle(Array::New(kArrayLength)); 401 Array& array = Array::Handle(Array::New(kArrayLength));
(...skipping 19 matching lines...) Expand all
368 writer.BytesWritten(), 421 writer.BytesWritten(),
369 &allocator); 422 &allocator);
370 Dart_CObject* cobject = cmessage->object; 423 Dart_CObject* cobject = cmessage->object;
371 EXPECT_EQ(Dart_CObject::kArray, cobject->type); 424 EXPECT_EQ(Dart_CObject::kArray, cobject->type);
372 EXPECT_EQ(kArrayLength, cobject->value.as_array.length); 425 EXPECT_EQ(kArrayLength, cobject->value.as_array.length);
373 for (int i = 0; i < kArrayLength; i++) { 426 for (int i = 0; i < kArrayLength; i++) {
374 Dart_CObject* element = cobject->value.as_array.values[i]; 427 Dart_CObject* element = cobject->value.as_array.values[i];
375 EXPECT_EQ(Dart_CObject::kInt32, element->type); 428 EXPECT_EQ(Dart_CObject::kInt32, element->type);
376 EXPECT_EQ(i, element->value.as_int32); 429 EXPECT_EQ(i, element->value.as_int32);
377 } 430 }
431 CheckEncodeMessage(cmessage);
378 FreeDeserializedDartMessage(cmessage); 432 FreeDeserializedDartMessage(cmessage);
379 } 433 }
380 434
381 435
382 TEST_CASE(SerializeEmptyArray) { 436 TEST_CASE(SerializeEmptyArray) {
383 // Write snapshot with object content. 437 // Write snapshot with object content.
384 uint8_t* buffer; 438 uint8_t* buffer;
385 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 439 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
386 const int kArrayLength = 0; 440 const int kArrayLength = 0;
387 Array& array = Array::Handle(Array::New(kArrayLength)); 441 Array& array = Array::Handle(Array::New(kArrayLength));
(...skipping 10 matching lines...) Expand all
398 EXPECT(array.Equals(serialized_array)); 452 EXPECT(array.Equals(serialized_array));
399 453
400 // Read object back from the snapshot into a C structure. 454 // Read object back from the snapshot into a C structure.
401 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, 455 Dart_CMessage* cmessage = Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
402 writer.BytesWritten(), 456 writer.BytesWritten(),
403 &allocator); 457 &allocator);
404 Dart_CObject* cobject = cmessage->object; 458 Dart_CObject* cobject = cmessage->object;
405 EXPECT_EQ(Dart_CObject::kArray, cobject->type); 459 EXPECT_EQ(Dart_CObject::kArray, cobject->type);
406 EXPECT_EQ(kArrayLength, cobject->value.as_array.length); 460 EXPECT_EQ(kArrayLength, cobject->value.as_array.length);
407 EXPECT(cobject->value.as_array.values == NULL); 461 EXPECT(cobject->value.as_array.values == NULL);
462 CheckEncodeMessage(cmessage);
408 FreeDeserializedDartMessage(cmessage); 463 FreeDeserializedDartMessage(cmessage);
409 } 464 }
410 465
411 466
412 TEST_CASE(SerializeScript) { 467 TEST_CASE(SerializeScript) {
413 const char* kScriptChars = 468 const char* kScriptChars =
414 "class A {\n" 469 "class A {\n"
415 " static bar() { return 42; }\n" 470 " static bar() { return 42; }\n"
416 " static fly() { return 5; }\n" 471 " static fly() { return 5; }\n"
417 "}\n"; 472 "}\n";
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 writer.BytesWritten(), 755 writer.BytesWritten(),
701 &allocator); 756 &allocator);
702 Dart_CObject* cobject = cmessage->object; 757 Dart_CObject* cobject = cmessage->object;
703 EXPECT_EQ(Dart_CObject::kArray, cobject->type); 758 EXPECT_EQ(Dart_CObject::kArray, cobject->type);
704 EXPECT_EQ(kArrayLength, cobject->value.as_array.length); 759 EXPECT_EQ(kArrayLength, cobject->value.as_array.length);
705 for (int i = 0; i < kArrayLength; i++) { 760 for (int i = 0; i < kArrayLength; i++) {
706 Dart_CObject* element = cobject->value.as_array.values[i]; 761 Dart_CObject* element = cobject->value.as_array.values[i];
707 EXPECT_EQ(Dart_CObject::kInt32, element->type); 762 EXPECT_EQ(Dart_CObject::kInt32, element->type);
708 EXPECT_EQ(i + 1, element->value.as_int32); 763 EXPECT_EQ(i + 1, element->value.as_int32);
709 } 764 }
765 CheckEncodeMessage(cmessage);
710 FreeDeserializedDartMessage(cmessage); 766 FreeDeserializedDartMessage(cmessage);
711 } 767 }
712 768
713 769
714 // Helper function to call a top level Dart function, serialize the 770 // Helper function to call a top level Dart function, serialize the
715 // result and deserialize the result into a Dart_CObject structure. 771 // result and deserialize the result into a Dart_CObject structure.
716 static Dart_CMessage* GetDeserializedDartMessage(Dart_Handle lib, 772 static Dart_CMessage* GetDeserializedDartMessage(Dart_Handle lib,
717 const char* dart_function) { 773 const char* dart_function) {
718 Dart_Handle result; 774 Dart_Handle result;
719 result = Dart_InvokeStatic(lib, 775 result = Dart_InvokeStatic(lib,
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
787 843
788 // Read object back from the snapshot into a C structure. 844 // Read object back from the snapshot into a C structure.
789 Dart_CMessage* cmessage = 845 Dart_CMessage* cmessage =
790 Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, 846 Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
791 writer.BytesWritten(), 847 writer.BytesWritten(),
792 &allocator); 848 &allocator);
793 Dart_CObject* cobject = cmessage->object; 849 Dart_CObject* cobject = cmessage->object;
794 EXPECT_NOTNULL(cobject); 850 EXPECT_NOTNULL(cobject);
795 EXPECT_EQ(Dart_CObject::kInt32, cobject->type); 851 EXPECT_EQ(Dart_CObject::kInt32, cobject->type);
796 EXPECT_EQ(42, cobject->value.as_int32); 852 EXPECT_EQ(42, cobject->value.as_int32);
853 CheckEncodeMessage(cmessage);
797 FreeDeserializedDartMessage(cmessage); 854 FreeDeserializedDartMessage(cmessage);
798 } 855 }
799 { 856 {
800 uint8_t* buffer; 857 uint8_t* buffer;
801 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); 858 SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator);
802 String& str = String::Handle(); 859 String& str = String::Handle();
803 str ^= Api::UnwrapHandle(string_result); 860 str ^= Api::UnwrapHandle(string_result);
804 writer.WriteObject(str.raw()); 861 writer.WriteObject(str.raw());
805 writer.FinalizeBuffer(); 862 writer.FinalizeBuffer();
806 863
807 // Read object back from the snapshot into a C structure. 864 // Read object back from the snapshot into a C structure.
808 Dart_CMessage* cmessage = 865 Dart_CMessage* cmessage =
809 Dart_DecodeMessage(buffer + Snapshot::kHeaderSize, 866 Dart_DecodeMessage(buffer + Snapshot::kHeaderSize,
810 writer.BytesWritten(), 867 writer.BytesWritten(),
811 &allocator); 868 &allocator);
812 Dart_CObject* cobject = cmessage->object; 869 Dart_CObject* cobject = cmessage->object;
813 EXPECT_NOTNULL(cobject); 870 EXPECT_NOTNULL(cobject);
814 EXPECT_EQ(Dart_CObject::kString, cobject->type); 871 EXPECT_EQ(Dart_CObject::kString, cobject->type);
815 EXPECT_STREQ("Hello, world!", cobject->value.as_string); 872 EXPECT_STREQ("Hello, world!", cobject->value.as_string);
873 CheckEncodeMessage(cmessage);
816 FreeDeserializedDartMessage(cmessage); 874 FreeDeserializedDartMessage(cmessage);
817 } 875 }
818 } 876 }
819 Dart_ExitScope(); 877 Dart_ExitScope();
820 Dart_ShutdownIsolate(); 878 Dart_ShutdownIsolate();
821 } 879 }
822 880
823 881
824 UNIT_TEST_CASE(DartGeneratedListMessages) { 882 UNIT_TEST_CASE(DartGeneratedListMessages) {
825 const int kArrayLength = 10; 883 const int kArrayLength = 10;
(...skipping 24 matching lines...) Expand all
850 TestCase::CreateTestIsolate(); 908 TestCase::CreateTestIsolate();
851 Isolate* isolate = Isolate::Current(); 909 Isolate* isolate = Isolate::Current();
852 EXPECT(isolate != NULL); 910 EXPECT(isolate != NULL);
853 Dart_EnterScope(); 911 Dart_EnterScope();
854 912
855 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL); 913 Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
856 EXPECT_VALID(lib); 914 EXPECT_VALID(lib);
857 915
858 { 916 {
859 DARTSCOPE_NOCHECKS(isolate); 917 DARTSCOPE_NOCHECKS(isolate);
860
861 { 918 {
862 // Generate a list of nulls from Dart code. 919 // Generate a list of nulls from Dart code.
863 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getList"); 920 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getList");
864 Dart_CObject* value = cmessage->object; 921 Dart_CObject* value = cmessage->object;
865 EXPECT_NOTNULL(value); 922 EXPECT_NOTNULL(value);
866 EXPECT_EQ(Dart_CObject::kArray, value->type); 923 EXPECT_EQ(Dart_CObject::kArray, value->type);
867 EXPECT_EQ(kArrayLength, value->value.as_array.length); 924 EXPECT_EQ(kArrayLength, value->value.as_array.length);
868 for (int i = 0; i < kArrayLength; i++) { 925 for (int i = 0; i < kArrayLength; i++) {
869 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type); 926 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type);
870 } 927 }
928 CheckEncodeMessage(cmessage);
871 FreeDeserializedDartMessage(cmessage); 929 FreeDeserializedDartMessage(cmessage);
872 } 930 }
873 { 931 {
874 // Generate a list of ints from Dart code. 932 // Generate a list of ints from Dart code.
875 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getIntList"); 933 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getIntList");
876 Dart_CObject* value = cmessage->object; 934 Dart_CObject* value = cmessage->object;
877 EXPECT_NOTNULL(value); 935 EXPECT_NOTNULL(value);
878 EXPECT_EQ(Dart_CObject::kArray, value->type); 936 EXPECT_EQ(Dart_CObject::kArray, value->type);
879 EXPECT_EQ(kArrayLength, value->value.as_array.length); 937 EXPECT_EQ(kArrayLength, value->value.as_array.length);
880 for (int i = 0; i < kArrayLength; i++) { 938 for (int i = 0; i < kArrayLength; i++) {
881 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[i]->type); 939 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[i]->type);
882 EXPECT_EQ(i, value->value.as_array.values[i]->value.as_int32); 940 EXPECT_EQ(i, value->value.as_array.values[i]->value.as_int32);
883 } 941 }
942 CheckEncodeMessage(cmessage);
884 FreeDeserializedDartMessage(cmessage); 943 FreeDeserializedDartMessage(cmessage);
885 } 944 }
886 { 945 {
887 // Generate a list of strings from Dart code. 946 // Generate a list of strings from Dart code.
888 Dart_CMessage* cmessage = 947 Dart_CMessage* cmessage =
889 GetDeserializedDartMessage(lib, "getStringList"); 948 GetDeserializedDartMessage(lib, "getStringList");
890 Dart_CObject* value = cmessage->object; 949 Dart_CObject* value = cmessage->object;
891 EXPECT_NOTNULL(value); 950 EXPECT_NOTNULL(value);
892 EXPECT_EQ(Dart_CObject::kArray, value->type); 951 EXPECT_EQ(Dart_CObject::kArray, value->type);
893 EXPECT_EQ(kArrayLength, value->value.as_array.length); 952 EXPECT_EQ(kArrayLength, value->value.as_array.length);
894 for (int i = 0; i < kArrayLength; i++) { 953 for (int i = 0; i < kArrayLength; i++) {
895 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[i]->type); 954 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[i]->type);
896 char buffer[3]; 955 char buffer[3];
897 snprintf(buffer, sizeof(buffer), "%d", i); 956 snprintf(buffer, sizeof(buffer), "%d", i);
898 EXPECT_STREQ(buffer, value->value.as_array.values[i]->value.as_string); 957 EXPECT_STREQ(buffer, value->value.as_array.values[i]->value.as_string);
899 } 958 }
959 CheckEncodeMessage(cmessage);
900 FreeDeserializedDartMessage(cmessage); 960 FreeDeserializedDartMessage(cmessage);
901 } 961 }
902 { 962 {
903 // Generate a list of objects of different types from Dart code. 963 // Generate a list of objects of different types from Dart code.
904 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getMixedList"); 964 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getMixedList");
905 Dart_CObject* value = cmessage->object; 965 Dart_CObject* value = cmessage->object;
906 EXPECT_NOTNULL(value); 966 EXPECT_NOTNULL(value);
907 EXPECT_EQ(Dart_CObject::kArray, value->type); 967 EXPECT_EQ(Dart_CObject::kArray, value->type);
908 EXPECT_EQ(kArrayLength, value->value.as_array.length); 968 EXPECT_EQ(kArrayLength, value->value.as_array.length);
909 969
910 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[0]->type); 970 EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[0]->type);
911 EXPECT_EQ(0, value->value.as_array.values[0]->value.as_int32); 971 EXPECT_EQ(0, value->value.as_array.values[0]->value.as_int32);
912 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[1]->type); 972 EXPECT_EQ(Dart_CObject::kString, value->value.as_array.values[1]->type);
913 EXPECT_STREQ("1", value->value.as_array.values[1]->value.as_string); 973 EXPECT_STREQ("1", value->value.as_array.values[1]->value.as_string);
914 EXPECT_EQ(Dart_CObject::kDouble, value->value.as_array.values[2]->type); 974 EXPECT_EQ(Dart_CObject::kDouble, value->value.as_array.values[2]->type);
915 EXPECT_EQ(2.2, value->value.as_array.values[2]->value.as_double); 975 EXPECT_EQ(2.2, value->value.as_array.values[2]->value.as_double);
916 EXPECT_EQ(Dart_CObject::kBool, value->value.as_array.values[3]->type); 976 EXPECT_EQ(Dart_CObject::kBool, value->value.as_array.values[3]->type);
917 EXPECT_EQ(true, value->value.as_array.values[3]->value.as_bool); 977 EXPECT_EQ(true, value->value.as_array.values[3]->value.as_bool);
918 978
919 for (int i = 0; i < kArrayLength; i++) { 979 for (int i = 0; i < kArrayLength; i++) {
920 if (i > 3) { 980 if (i > 3) {
921 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type); 981 EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type);
922 } 982 }
923 } 983 }
984 CheckEncodeMessage(cmessage);
924 FreeDeserializedDartMessage(cmessage); 985 FreeDeserializedDartMessage(cmessage);
925 } 986 }
926 } 987 }
927 Dart_ExitScope(); 988 Dart_ExitScope();
928 Dart_ShutdownIsolate(); 989 Dart_ShutdownIsolate();
929 } 990 }
930 991
931 992
932 UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) { 993 UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
933 const int kArrayLength = 10; 994 const int kArrayLength = 10;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
978 Dart_CObject* object = cmessage->object; 1039 Dart_CObject* object = cmessage->object;
979 EXPECT_NOTNULL(object); 1040 EXPECT_NOTNULL(object);
980 EXPECT_EQ(Dart_CObject::kArray, object->type); 1041 EXPECT_EQ(Dart_CObject::kArray, object->type);
981 EXPECT_EQ(kArrayLength, object->value.as_array.length); 1042 EXPECT_EQ(kArrayLength, object->value.as_array.length);
982 for (int i = 0; i < kArrayLength; i++) { 1043 for (int i = 0; i < kArrayLength; i++) {
983 Dart_CObject* element = object->value.as_array.values[i]; 1044 Dart_CObject* element = object->value.as_array.values[i];
984 EXPECT_EQ(object->value.as_array.values[0], element); 1045 EXPECT_EQ(object->value.as_array.values[0], element);
985 EXPECT_EQ(Dart_CObject::kString, element->type); 1046 EXPECT_EQ(Dart_CObject::kString, element->type);
986 EXPECT_STREQ("Hello, world!", element->value.as_string); 1047 EXPECT_STREQ("Hello, world!", element->value.as_string);
987 } 1048 }
1049 CheckEncodeMessage(cmessage);
988 FreeDeserializedDartMessage(cmessage); 1050 FreeDeserializedDartMessage(cmessage);
989 } 1051 }
990 { 1052 {
991 // Generate a list of doubles from Dart code. 1053 // Generate a list of doubles from Dart code.
992 Dart_CMessage* cmessage = 1054 Dart_CMessage* cmessage =
993 GetDeserializedDartMessage(lib, "getDoubleList"); 1055 GetDeserializedDartMessage(lib, "getDoubleList");
994 Dart_CObject* object = cmessage->object; 1056 Dart_CObject* object = cmessage->object;
995 EXPECT_NOTNULL(object); 1057 EXPECT_NOTNULL(object);
996 EXPECT_EQ(Dart_CObject::kArray, object->type); 1058 EXPECT_EQ(Dart_CObject::kArray, object->type);
997 EXPECT_EQ(kArrayLength, object->value.as_array.length); 1059 EXPECT_EQ(kArrayLength, object->value.as_array.length);
998 for (int i = 0; i < kArrayLength; i++) { 1060 for (int i = 0; i < kArrayLength; i++) {
999 Dart_CObject* element = object->value.as_array.values[i]; 1061 Dart_CObject* element = object->value.as_array.values[i];
1000 EXPECT_EQ(object->value.as_array.values[0], element); 1062 EXPECT_EQ(object->value.as_array.values[0], element);
1001 EXPECT_EQ(Dart_CObject::kDouble, element->type); 1063 EXPECT_EQ(Dart_CObject::kDouble, element->type);
1002 EXPECT_EQ(3.14, element->value.as_double); 1064 EXPECT_EQ(3.14, element->value.as_double);
1003 } 1065 }
1066 CheckEncodeMessage(cmessage);
1004 FreeDeserializedDartMessage(cmessage); 1067 FreeDeserializedDartMessage(cmessage);
1005 } 1068 }
1006 { 1069 {
1007 // Generate a list of objects of different types from Dart code. 1070 // Generate a list of objects of different types from Dart code.
1008 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getMixedList"); 1071 Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getMixedList");
1009 Dart_CObject* object = cmessage->object; 1072 Dart_CObject* object = cmessage->object;
1010 EXPECT_NOTNULL(object); 1073 EXPECT_NOTNULL(object);
1011 EXPECT_EQ(Dart_CObject::kArray, object->type); 1074 EXPECT_EQ(Dart_CObject::kArray, object->type);
1012 EXPECT_EQ(kArrayLength, object->value.as_array.length); 1075 EXPECT_EQ(kArrayLength, object->value.as_array.length);
1013 for (int i = 0; i < kArrayLength; i++) { 1076 for (int i = 0; i < kArrayLength; i++) {
1014 Dart_CObject* element = object->value.as_array.values[i]; 1077 Dart_CObject* element = object->value.as_array.values[i];
1015 if ((i % 2) == 0) { 1078 if ((i % 2) == 0) {
1016 EXPECT_EQ(object->value.as_array.values[0], element); 1079 EXPECT_EQ(object->value.as_array.values[0], element);
1017 EXPECT_EQ(Dart_CObject::kString, element->type); 1080 EXPECT_EQ(Dart_CObject::kString, element->type);
1018 EXPECT_STREQ("A", element->value.as_string); 1081 EXPECT_STREQ("A", element->value.as_string);
1019 } else { 1082 } else {
1020 EXPECT_EQ(object->value.as_array.values[1], element); 1083 EXPECT_EQ(object->value.as_array.values[1], element);
1021 EXPECT_EQ(Dart_CObject::kDouble, element->type); 1084 EXPECT_EQ(Dart_CObject::kDouble, element->type);
1022 EXPECT_STREQ(2.72, element->value.as_double); 1085 EXPECT_STREQ(2.72, element->value.as_double);
1023 } 1086 }
1024 } 1087 }
1088 CheckEncodeMessage(cmessage);
1025 FreeDeserializedDartMessage(cmessage); 1089 FreeDeserializedDartMessage(cmessage);
1026 } 1090 }
1027 { 1091 {
1028 // Generate a list of objects of different types from Dart code. 1092 // Generate a list of objects of different types from Dart code.
1029 Dart_CMessage* cmessage = 1093 Dart_CMessage* cmessage =
1030 GetDeserializedDartMessage(lib, "getSelfRefList"); 1094 GetDeserializedDartMessage(lib, "getSelfRefList");
1031 Dart_CObject* object = cmessage->object; 1095 Dart_CObject* object = cmessage->object;
1032 EXPECT_NOTNULL(object); 1096 EXPECT_NOTNULL(object);
1033 EXPECT_EQ(Dart_CObject::kArray, object->type); 1097 EXPECT_EQ(Dart_CObject::kArray, object->type);
1034 EXPECT_EQ(kArrayLength, object->value.as_array.length); 1098 EXPECT_EQ(kArrayLength, object->value.as_array.length);
1035 for (int i = 0; i < kArrayLength; i++) { 1099 for (int i = 0; i < kArrayLength; i++) {
1036 Dart_CObject* element = object->value.as_array.values[i]; 1100 Dart_CObject* element = object->value.as_array.values[i];
1037 EXPECT_EQ(Dart_CObject::kArray, element->type); 1101 EXPECT_EQ(Dart_CObject::kArray, element->type);
1038 EXPECT_EQ(object, element); 1102 EXPECT_EQ(object, element);
1039 } 1103 }
1104 CheckEncodeMessage(cmessage);
1040 FreeDeserializedDartMessage(cmessage); 1105 FreeDeserializedDartMessage(cmessage);
1041 } 1106 }
1042 } 1107 }
1043 Dart_ExitScope(); 1108 Dart_ExitScope();
1044 Dart_ShutdownIsolate(); 1109 Dart_ShutdownIsolate();
1045 } 1110 }
1046 1111
1047 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). 1112 #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64).
1048 1113
1049 } // namespace dart 1114 } // namespace dart
OLDNEW
« runtime/vm/dart_api_impl.cc ('K') | « runtime/vm/snapshot.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698