Chromium Code Reviews| Index: runtime/vm/snapshot_test.cc |
| diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc |
| index 0698e99db2ecc7eed9efd4f6208a65b7b5bf6973..7a971678449159b26b0991e259fa2ed2a790491b 100644 |
| --- a/runtime/vm/snapshot_test.cc |
| +++ b/runtime/vm/snapshot_test.cc |
| @@ -55,6 +55,12 @@ TEST_CASE(SerializeNull) { |
| SnapshotReader reader(snapshot, Isolate::Current()); |
| const Object& serialized_object = Object::Handle(reader.ReadObject()); |
| EXPECT(Equals(null_object, serialized_object)); |
| + |
| + // Read object back from the snapshot into a C structure. |
| + MessageReader mreader(buffer + Snapshot::kHeaderSize, writer.BytesWritten()); |
| + Dart_Value* value = mreader.ReadObject(); |
| + EXPECT_EQ(Dart_Value::kNull, value->type); |
| + free(value); |
| } |
| @@ -73,6 +79,13 @@ TEST_CASE(SerializeSmi1) { |
| SnapshotReader reader(snapshot, Isolate::Current()); |
| const Object& serialized_object = Object::Handle(reader.ReadObject()); |
| EXPECT(Equals(smi, serialized_object)); |
| + |
| + // Read object back from the snapshot into a C structure. |
| + MessageReader mreader(buffer + Snapshot::kHeaderSize, writer.BytesWritten()); |
| + Dart_Value* value = mreader.ReadObject(); |
| + EXPECT_EQ(Dart_Value::kInt32, value->type); |
| + EXPECT_EQ(smi.Value(), value->data.int32); |
| + free(value); |
| } |
| @@ -91,6 +104,13 @@ TEST_CASE(SerializeSmi2) { |
| SnapshotReader reader(snapshot, Isolate::Current()); |
| const Object& serialized_object = Object::Handle(reader.ReadObject()); |
| EXPECT(Equals(smi, serialized_object)); |
| + |
| + // Read object back from the snapshot into a C structure. |
| + MessageReader mreader(buffer + Snapshot::kHeaderSize, writer.BytesWritten()); |
| + Dart_Value* value = mreader.ReadObject(); |
| + EXPECT_EQ(Dart_Value::kInt32, value->type); |
| + EXPECT_EQ(smi.Value(), value->data.int32); |
| + free(value); |
| } |
| @@ -109,6 +129,13 @@ TEST_CASE(SerializeDouble) { |
| SnapshotReader reader(snapshot, Isolate::Current()); |
| const Object& serialized_object = Object::Handle(reader.ReadObject()); |
| EXPECT(Equals(dbl, serialized_object)); |
| + |
| + // Read object back from the snapshot into a C structure. |
| + MessageReader mreader(buffer + Snapshot::kHeaderSize, writer.BytesWritten()); |
| + Dart_Value* value = mreader.ReadObject(); |
| + EXPECT_EQ(Dart_Value::kDouble, value->type); |
| + EXPECT_EQ(dbl.value(), value->data.dbl); |
| + free(value); |
| } |
| @@ -129,6 +156,17 @@ TEST_CASE(SerializeBool) { |
| SnapshotReader reader(snapshot, Isolate::Current()); |
| EXPECT(Bool::True() == reader.ReadObject()); |
| EXPECT(Bool::False() == reader.ReadObject()); |
| + |
| + // Read object back from the snapshot into a C structure. |
| + MessageReader mreader(buffer + Snapshot::kHeaderSize, writer.BytesWritten()); |
| + Dart_Value* value1 = mreader.ReadObject(); |
| + EXPECT_EQ(Dart_Value::kBool, value1->type); |
| + EXPECT_EQ(true, value1->data.bl); |
| + Dart_Value* value2 = mreader.ReadObject(); |
| + EXPECT_EQ(Dart_Value::kBool, value2->type); |
| + EXPECT_EQ(false, value2->data.bl); |
| + free(value1); |
| + free(value2); |
| } |
| @@ -149,6 +187,12 @@ TEST_CASE(SerializeBigint) { |
| obj ^= reader.ReadObject(); |
| OS::Print("%lld", BigintOperations::ToInt64(obj)); |
| EXPECT_EQ(BigintOperations::ToInt64(bigint), BigintOperations::ToInt64(obj)); |
| + |
| + // Read object back from the snapshot into a C structure. |
| + MessageReader mreader(buffer + Snapshot::kHeaderSize, writer.BytesWritten()); |
| + Dart_Value* value = mreader.ReadObject(); |
| + // Bigint not supported. |
| + EXPECT(value == NULL); |
| } |
| @@ -208,7 +252,8 @@ TEST_CASE(SerializeString) { |
| // Write snapshot with object content. |
| uint8_t* buffer; |
| SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| - String& str = String::Handle(String::New("This string shall be serialized")); |
| + static const char* cstr = "This string shall be serialized"; |
| + String& str = String::Handle(String::New(cstr)); |
| writer.WriteObject(str.raw()); |
| writer.FinalizeBuffer(); |
| @@ -220,6 +265,13 @@ TEST_CASE(SerializeString) { |
| String& serialized_str = String::Handle(); |
| serialized_str ^= reader.ReadObject(); |
| EXPECT(str.Equals(serialized_str)); |
| + |
| + // Read object back from the snapshot into a C structure. |
| + MessageReader mreader(buffer + Snapshot::kHeaderSize, writer.BytesWritten()); |
| + Dart_Value* value = mreader.ReadObject(); |
| + EXPECT_EQ(Dart_Value::kString, value->type); |
| + EXPECT_EQ(0, strcmp(value->data.str, cstr)); |
|
siva
2012/01/27 01:56:52
I think we have an EXPECT_STREQ
Søren Gjesse
2012/01/27 14:40:03
Done.
|
| + free(value); |
| } |
| @@ -245,6 +297,19 @@ TEST_CASE(SerializeArray) { |
| Array& serialized_array = Array::Handle(); |
| serialized_array ^= reader.ReadObject(); |
| EXPECT(array.Equals(serialized_array)); |
| + |
| + // Read object back from the snapshot into a C structure. |
| + MessageReader mreader(buffer + Snapshot::kHeaderSize, writer.BytesWritten()); |
| + Dart_Value* value = mreader.ReadObject(); |
| + EXPECT_EQ(Dart_Value::kArray, value->type); |
| + EXPECT_EQ(kArrayLength, value->data.array.len); |
| + for (int i = 0; i < kArrayLength; i++) { |
| + Dart_Value* element = value->data.array.values[i]; |
| + EXPECT_EQ(Dart_Value::kInt32, element->type); |
| + EXPECT_EQ(i, element->data.int32); |
| + free(element); |
| + } |
| + free(value); |
| } |
| @@ -524,6 +589,30 @@ UNIT_TEST_CASE(ScriptSnapshot) { |
| free(script_snapshot); |
| } |
| + |
| +TEST_CASE(IntArrayMessage) { |
| + uint8_t* buffer = NULL; |
| + MessageWriter writer(&buffer, &allocator); |
| + |
| + static const int kArrayLength = 2; |
| + intptr_t data[kArrayLength] = {1, 2}; |
| + int len = kArrayLength; |
| + writer.WriteMessage(len, data); |
| + |
| + // Read object back from the snapshot into a C structure. |
| + MessageReader mreader(buffer + Snapshot::kHeaderSize, writer.BytesWritten()); |
| + Dart_Value* value = mreader.ReadObject(); |
| + EXPECT_EQ(Dart_Value::kArray, value->type); |
| + EXPECT_EQ(kArrayLength, value->data.array.len); |
| + for (int i = 0; i < kArrayLength; i++) { |
| + Dart_Value* element = value->data.array.values[i]; |
| + EXPECT_EQ(Dart_Value::kInt32, element->type); |
| + EXPECT_EQ(i + 1, element->data.int32); |
| + free(element); |
| + } |
| + free(value); |
| +} |
| + |
| #endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64). |
| } // namespace dart |