| Index: runtime/vm/snapshot_test.cc
|
| diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
|
| index 68df7d535fa566d73d630c954049aae81927830d..e35aae34280131370a6fdfbd0fb7d96d619fba86 100644
|
| --- a/runtime/vm/snapshot_test.cc
|
| +++ b/runtime/vm/snapshot_test.cc
|
| @@ -51,6 +51,52 @@ static void FreeDeserializedDartMessage(Dart_CMessage* cmessage) {
|
| }
|
|
|
|
|
| +static void CompareDartCObjects(Dart_CObject* first, Dart_CObject* second) {
|
| + EXPECT_NE(first, second);
|
| + EXPECT_EQ(first->type, second->type);
|
| + switch (first->type) {
|
| + case Dart_CObject::kNull:
|
| + // Nothing more to compare.
|
| + break;
|
| + case Dart_CObject::kBool:
|
| + EXPECT_EQ(first->value.as_bool, second->value.as_bool);
|
| + break;
|
| + case Dart_CObject::kInt32:
|
| + EXPECT_EQ(first->value.as_int32, second->value.as_int32);
|
| + break;
|
| + case Dart_CObject::kDouble:
|
| + EXPECT_EQ(first->value.as_double, second->value.as_double);
|
| + break;
|
| + case Dart_CObject::kString:
|
| + EXPECT_STREQ(first->value.as_string, second->value.as_string);
|
| + break;
|
| + case Dart_CObject::kArray:
|
| + EXPECT_EQ(first->value.as_array.length, second->value.as_array.length);
|
| + for (int i = 0; i < first->value.as_array.length; i++) {
|
| + CompareDartCObjects(first->value.as_array.values[i],
|
| + second->value.as_array.values[i]);
|
| + }
|
| + break;
|
| + default:
|
| + EXPECT(false);
|
| + }
|
| +}
|
| +
|
| +
|
| +static void CheckEncodeMessage(Dart_CMessage* cmessage) {
|
| + // Encode and decode the message.
|
| + uint8_t* again = Dart_EncodeMessage(cmessage, allocator);
|
| + // TODO(sgjesse): Get the length of the encoded message instead of
|
| + // 1000. The length is not currently used for decoding, so a large
|
| + // value works for testing.
|
| + Dart_CMessage* new_cmessage =
|
| + Dart_DecodeMessage(again + Snapshot::kHeaderSize, 1000, &allocator);
|
| +
|
| + // Check that the two messages are the same.
|
| + CompareDartCObjects(cmessage->object, new_cmessage->object);
|
| + FreeDeserializedDartMessage(new_cmessage);
|
| +}
|
| +
|
| TEST_CASE(SerializeNull) {
|
| // Write snapshot with object content.
|
| uint8_t* buffer;
|
| @@ -74,6 +120,7 @@ TEST_CASE(SerializeNull) {
|
| Dart_CObject* cobject = cmessage->object;
|
| EXPECT_NOTNULL(cobject);
|
| EXPECT_EQ(Dart_CObject::kNull, cobject->type);
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
|
|
| @@ -102,6 +149,7 @@ TEST_CASE(SerializeSmi1) {
|
| EXPECT_NOTNULL(cobject);
|
| EXPECT_EQ(Dart_CObject::kInt32, cobject->type);
|
| EXPECT_EQ(smi.Value(), cobject->value.as_int32);
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
|
|
| @@ -130,6 +178,7 @@ TEST_CASE(SerializeSmi2) {
|
| EXPECT_NOTNULL(cobject);
|
| EXPECT_EQ(Dart_CObject::kInt32, cobject->type);
|
| EXPECT_EQ(smi.Value(), cobject->value.as_int32);
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
|
|
| @@ -158,6 +207,7 @@ TEST_CASE(SerializeDouble) {
|
| EXPECT_NOTNULL(cobject);
|
| EXPECT_EQ(Dart_CObject::kDouble, cobject->type);
|
| EXPECT_EQ(dbl.value(), cobject->value.as_double);
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
|
|
| @@ -202,6 +252,7 @@ TEST_CASE(SerializeTrue) {
|
| EXPECT_NOTNULL(cobject);
|
| EXPECT_EQ(Dart_CObject::kBool, cobject->type);
|
| EXPECT_EQ(true, cobject->value.as_bool);
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
|
|
| @@ -226,6 +277,7 @@ TEST_CASE(SerializeFalse) {
|
| EXPECT_NOTNULL(cobject);
|
| EXPECT_EQ(Dart_CObject::kBool, cobject->type);
|
| EXPECT_EQ(false, cobject->value.as_bool);
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
|
|
| @@ -336,6 +388,7 @@ TEST_CASE(SerializeString) {
|
| Dart_CObject* cobject = cmessage->object;
|
| EXPECT_EQ(Dart_CObject::kString, cobject->type);
|
| EXPECT_STREQ(cstr, cobject->value.as_string);
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
|
|
| @@ -375,6 +428,7 @@ TEST_CASE(SerializeArray) {
|
| EXPECT_EQ(Dart_CObject::kInt32, element->type);
|
| EXPECT_EQ(i, element->value.as_int32);
|
| }
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
|
|
| @@ -405,6 +459,7 @@ TEST_CASE(SerializeEmptyArray) {
|
| EXPECT_EQ(Dart_CObject::kArray, cobject->type);
|
| EXPECT_EQ(kArrayLength, cobject->value.as_array.length);
|
| EXPECT(cobject->value.as_array.values == NULL);
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
|
|
| @@ -707,6 +762,7 @@ TEST_CASE(IntArrayMessage) {
|
| EXPECT_EQ(Dart_CObject::kInt32, element->type);
|
| EXPECT_EQ(i + 1, element->value.as_int32);
|
| }
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
|
|
| @@ -794,6 +850,7 @@ UNIT_TEST_CASE(DartGeneratedMessages) {
|
| EXPECT_NOTNULL(cobject);
|
| EXPECT_EQ(Dart_CObject::kInt32, cobject->type);
|
| EXPECT_EQ(42, cobject->value.as_int32);
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
| {
|
| @@ -813,6 +870,7 @@ UNIT_TEST_CASE(DartGeneratedMessages) {
|
| EXPECT_NOTNULL(cobject);
|
| EXPECT_EQ(Dart_CObject::kString, cobject->type);
|
| EXPECT_STREQ("Hello, world!", cobject->value.as_string);
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
| }
|
| @@ -857,7 +915,6 @@ UNIT_TEST_CASE(DartGeneratedListMessages) {
|
|
|
| {
|
| DARTSCOPE_NOCHECKS(isolate);
|
| -
|
| {
|
| // Generate a list of nulls from Dart code.
|
| Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getList");
|
| @@ -868,6 +925,7 @@ UNIT_TEST_CASE(DartGeneratedListMessages) {
|
| for (int i = 0; i < kArrayLength; i++) {
|
| EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type);
|
| }
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
| {
|
| @@ -881,6 +939,7 @@ UNIT_TEST_CASE(DartGeneratedListMessages) {
|
| EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[i]->type);
|
| EXPECT_EQ(i, value->value.as_array.values[i]->value.as_int32);
|
| }
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
| {
|
| @@ -897,6 +956,7 @@ UNIT_TEST_CASE(DartGeneratedListMessages) {
|
| snprintf(buffer, sizeof(buffer), "%d", i);
|
| EXPECT_STREQ(buffer, value->value.as_array.values[i]->value.as_string);
|
| }
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
| {
|
| @@ -921,6 +981,7 @@ UNIT_TEST_CASE(DartGeneratedListMessages) {
|
| EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type);
|
| }
|
| }
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
| }
|
| @@ -985,6 +1046,7 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
|
| EXPECT_EQ(Dart_CObject::kString, element->type);
|
| EXPECT_STREQ("Hello, world!", element->value.as_string);
|
| }
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
| {
|
| @@ -1001,6 +1063,7 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
|
| EXPECT_EQ(Dart_CObject::kDouble, element->type);
|
| EXPECT_EQ(3.14, element->value.as_double);
|
| }
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
| {
|
| @@ -1022,6 +1085,7 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
|
| EXPECT_STREQ(2.72, element->value.as_double);
|
| }
|
| }
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
| {
|
| @@ -1037,6 +1101,7 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) {
|
| EXPECT_EQ(Dart_CObject::kArray, element->type);
|
| EXPECT_EQ(object, element);
|
| }
|
| + CheckEncodeMessage(cmessage);
|
| FreeDeserializedDartMessage(cmessage);
|
| }
|
| }
|
|
|