Chromium Code Reviews| Index: runtime/vm/snapshot_test.cc |
| diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc |
| index ce7f3f224381181852419369a28fe38c58483946..d0202ef00d5237126e8fe0670362a0de2c2df6e7 100644 |
| --- a/runtime/vm/snapshot_test.cc |
| +++ b/runtime/vm/snapshot_test.cc |
| @@ -37,15 +37,32 @@ static bool Equals(const Object& expected, const Object& actual) { |
| } |
| -static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) { |
| +static uint8_t* malloc_allocator( |
| + uint8_t* ptr, intptr_t old_size, intptr_t new_size) { |
| return reinterpret_cast<uint8_t*>(realloc(ptr, new_size)); |
| } |
| +static uint8_t* zone_allocator( |
| + uint8_t* ptr, intptr_t old_size, intptr_t new_size) { |
| + Zone* zone = Isolate::Current()->current_zone(); |
| + return reinterpret_cast<uint8_t*>( |
| + zone->Reallocate(reinterpret_cast<uword>(ptr), old_size, new_size)); |
| +} |
| + |
| + |
| +static Dart_CMessage* DecodeMessage(uint8_t* message, |
| + intptr_t length, |
| + ReAlloc allocator) { |
| + CMessageReader message_reader(message, length, allocator); |
| + return message_reader.ReadMessage(); |
| +} |
| + |
| + |
| TEST_CASE(SerializeNull) { |
| // Write snapshot with object content. |
| uint8_t* buffer; |
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| const Object& null_object = Object::Handle(); |
| writer.WriteObject(null_object.raw()); |
| writer.FinalizeBuffer(); |
| @@ -59,20 +76,20 @@ TEST_CASE(SerializeNull) { |
| EXPECT(Equals(null_object, serialized_object)); |
| // Read object back from the snapshot into a C structure. |
| - CMessageReader mreader(buffer + Snapshot::kHeaderSize, |
| - writer.BytesWritten(), |
| - &allocator); |
| - Dart_CObject* cobject = mreader.ReadObject(); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| + writer.BytesWritten(), |
| + &zone_allocator); |
| + Dart_CObject* cobject = cmessage->root; |
| EXPECT_NOTNULL(cobject); |
| EXPECT_EQ(Dart_CObject::kNull, cobject->type); |
|
siva
2012/02/02 03:46:45
I think there was a leak originally in this test c
Søren Gjesse
2012/02/02 10:49:33
Changed to use zone allocator in all tests involvi
|
| - free(cobject); |
| } |
| TEST_CASE(SerializeSmi1) { |
| // Write snapshot with object content. |
| uint8_t* buffer; |
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| const Smi& smi = Smi::Handle(Smi::New(124)); |
| writer.WriteObject(smi.raw()); |
| writer.FinalizeBuffer(); |
| @@ -86,21 +103,21 @@ TEST_CASE(SerializeSmi1) { |
| EXPECT(Equals(smi, serialized_object)); |
| // Read object back from the snapshot into a C structure. |
| - CMessageReader mreader(buffer + Snapshot::kHeaderSize, |
| - writer.BytesWritten(), |
| - &allocator); |
| - Dart_CObject* cobject = mreader.ReadObject(); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| + writer.BytesWritten(), |
| + &zone_allocator); |
| + Dart_CObject* cobject = cmessage->root; |
| EXPECT_NOTNULL(cobject); |
| EXPECT_EQ(Dart_CObject::kInt32, cobject->type); |
| EXPECT_EQ(smi.Value(), cobject->value.as_int32); |
| - free(cobject); |
| } |
| TEST_CASE(SerializeSmi2) { |
| // Write snapshot with object content. |
| uint8_t* buffer; |
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| const Smi& smi = Smi::Handle(Smi::New(-1)); |
| writer.WriteObject(smi.raw()); |
| writer.FinalizeBuffer(); |
| @@ -114,21 +131,21 @@ TEST_CASE(SerializeSmi2) { |
| EXPECT(Equals(smi, serialized_object)); |
| // Read object back from the snapshot into a C structure. |
| - CMessageReader mreader(buffer + Snapshot::kHeaderSize, |
| - writer.BytesWritten(), |
| - &allocator); |
| - Dart_CObject* cobject = mreader.ReadObject(); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| + writer.BytesWritten(), |
| + &zone_allocator); |
| + Dart_CObject* cobject = cmessage->root; |
| EXPECT_NOTNULL(cobject); |
| EXPECT_EQ(Dart_CObject::kInt32, cobject->type); |
| EXPECT_EQ(smi.Value(), cobject->value.as_int32); |
| - free(cobject); |
| } |
| TEST_CASE(SerializeDouble) { |
| // Write snapshot with object content. |
| uint8_t* buffer; |
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| const Double& dbl = Double::Handle(Double::New(101.29)); |
| writer.WriteObject(dbl.raw()); |
| writer.FinalizeBuffer(); |
| @@ -142,21 +159,21 @@ TEST_CASE(SerializeDouble) { |
| EXPECT(Equals(dbl, serialized_object)); |
| // Read object back from the snapshot into a C structure. |
| - CMessageReader mreader(buffer + Snapshot::kHeaderSize, |
| - writer.BytesWritten(), |
| - &allocator); |
| - Dart_CObject* cobject = mreader.ReadObject(); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| + writer.BytesWritten(), |
| + &zone_allocator); |
| + Dart_CObject* cobject = cmessage->root; |
| EXPECT_NOTNULL(cobject); |
| EXPECT_EQ(Dart_CObject::kDouble, cobject->type); |
| EXPECT_EQ(dbl.value(), cobject->value.as_double); |
| - free(cobject); |
| } |
| TEST_CASE(SerializeBool) { |
| // Write snapshot with object content. |
| uint8_t* buffer; |
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| const Bool& bool1 = Bool::Handle(Bool::True()); |
| const Bool& bool2 = Bool::Handle(Bool::False()); |
| writer.WriteObject(bool1.raw()); |
| @@ -170,28 +187,59 @@ TEST_CASE(SerializeBool) { |
| SnapshotReader reader(snapshot, Isolate::Current()); |
| EXPECT(Bool::True() == reader.ReadObject()); |
| EXPECT(Bool::False() == reader.ReadObject()); |
| +} |
| + |
| + |
| +TEST_CASE(SerializeTrue) { |
| + // Write snapshot with true object. |
| + uint8_t* buffer; |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| + const Bool& bl = Bool::Handle(Bool::True()); |
| + writer.WriteObject(bl.raw()); |
| + writer.FinalizeBuffer(); |
| + |
| + // Create a snapshot object using the buffer. |
| + Snapshot::SetupFromBuffer(buffer); |
| + |
| + // Read object back from the snapshot into a C structure. |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| + writer.BytesWritten(), |
| + &zone_allocator); |
| + Dart_CObject* cobject = cmessage->root; |
| + EXPECT_NOTNULL(cobject); |
| + EXPECT_EQ(Dart_CObject::kBool, cobject->type); |
| + EXPECT_EQ(true, cobject->value.as_bool); |
| +} |
| + |
| + |
| +TEST_CASE(SerializeFalse) { |
| + // Write snapshot with false object. |
| + uint8_t* buffer; |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| + const Bool& bl = Bool::Handle(Bool::False()); |
| + writer.WriteObject(bl.raw()); |
| + writer.FinalizeBuffer(); |
| + |
| + // Create a snapshot object using the buffer. |
| + Snapshot::SetupFromBuffer(buffer); |
| // Read object back from the snapshot into a C structure. |
| - CMessageReader mreader(buffer + Snapshot::kHeaderSize, |
| - writer.BytesWritten(), |
| - &allocator); |
| - Dart_CObject* cobject1 = mreader.ReadObject(); |
| - EXPECT_NOTNULL(cobject1); |
| - EXPECT_EQ(Dart_CObject::kBool, cobject1->type); |
| - EXPECT_EQ(true, cobject1->value.as_bool); |
| - Dart_CObject* cobject2 = mreader.ReadObject(); |
| - EXPECT_NOTNULL(cobject2); |
| - EXPECT_EQ(Dart_CObject::kBool, cobject2->type); |
| - EXPECT_EQ(false, cobject2->value.as_bool); |
| - free(cobject1); |
| - free(cobject2); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| + writer.BytesWritten(), |
| + &zone_allocator); |
| + Dart_CObject* cobject = cmessage->root; |
| + EXPECT_NOTNULL(cobject); |
| + EXPECT_EQ(Dart_CObject::kBool, cobject->type); |
| + EXPECT_EQ(false, cobject->value.as_bool); |
| } |
| TEST_CASE(SerializeBigint) { |
| // Write snapshot with object content. |
| uint8_t* buffer; |
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| const Bigint& bigint = Bigint::Handle(Bigint::New(0xfffffffffLL)); |
| writer.WriteObject(bigint.raw()); |
| writer.FinalizeBuffer(); |
| @@ -207,10 +255,11 @@ TEST_CASE(SerializeBigint) { |
| EXPECT_EQ(BigintOperations::ToInt64(bigint), BigintOperations::ToInt64(obj)); |
| // Read object back from the snapshot into a C structure. |
| - CMessageReader mreader(buffer + Snapshot::kHeaderSize, |
| - writer.BytesWritten(), |
| - &allocator); |
| - Dart_CObject* cobject = mreader.ReadObject(); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| + writer.BytesWritten(), |
| + &zone_allocator); |
| + Dart_CObject* cobject = cmessage->root; |
| // Bigint not supported. |
| EXPECT(cobject == NULL); |
| } |
| @@ -219,7 +268,7 @@ TEST_CASE(SerializeBigint) { |
| TEST_CASE(SerializeSingletons) { |
| // Write snapshot with object content. |
| uint8_t* buffer; |
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| writer.WriteObject(Object::class_class()); |
| writer.WriteObject(Object::null_class()); |
| writer.WriteObject(Object::type_class()); |
| @@ -271,7 +320,7 @@ TEST_CASE(SerializeSingletons) { |
| TEST_CASE(SerializeString) { |
| // Write snapshot with object content. |
| uint8_t* buffer; |
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| static const char* cstr = "This string shall be serialized"; |
| String& str = String::Handle(String::New(cstr)); |
| writer.WriteObject(str.raw()); |
| @@ -287,20 +336,20 @@ TEST_CASE(SerializeString) { |
| EXPECT(str.Equals(serialized_str)); |
| // Read object back from the snapshot into a C structure. |
| - CMessageReader mreader(buffer + Snapshot::kHeaderSize, |
| - writer.BytesWritten(), |
| - &allocator); |
| - Dart_CObject* cobject = mreader.ReadObject(); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| + writer.BytesWritten(), |
| + &zone_allocator); |
| + Dart_CObject* cobject = cmessage->root; |
| EXPECT_EQ(Dart_CObject::kString, cobject->type); |
| EXPECT_STREQ(cstr, cobject->value.as_string); |
| - free(cobject); |
| } |
| TEST_CASE(SerializeArray) { |
| // Write snapshot with object content. |
| uint8_t* buffer; |
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| const int kArrayLength = 10; |
| Array& array = Array::Handle(Array::New(kArrayLength)); |
| Smi& smi = Smi::Handle(); |
| @@ -321,26 +370,25 @@ TEST_CASE(SerializeArray) { |
| EXPECT(array.Equals(serialized_array)); |
| // Read object back from the snapshot into a C structure. |
| - CMessageReader mreader(buffer + Snapshot::kHeaderSize, |
| - writer.BytesWritten(), |
| - &allocator); |
| - Dart_CObject* cobject = mreader.ReadObject(); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| + writer.BytesWritten(), |
| + &zone_allocator); |
| + Dart_CObject* cobject = cmessage->root; |
| EXPECT_EQ(Dart_CObject::kArray, cobject->type); |
| EXPECT_EQ(kArrayLength, cobject->value.as_array.length); |
| for (int i = 0; i < kArrayLength; i++) { |
| Dart_CObject* element = cobject->value.as_array.values[i]; |
| EXPECT_EQ(Dart_CObject::kInt32, element->type); |
| EXPECT_EQ(i, element->value.as_int32); |
| - free(element); |
| } |
| - free(cobject); |
| } |
| TEST_CASE(SerializeEmptyArray) { |
| // Write snapshot with object content. |
| uint8_t* buffer; |
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| const int kArrayLength = 0; |
| Array& array = Array::Handle(Array::New(kArrayLength)); |
| writer.WriteObject(array.raw()); |
| @@ -356,14 +404,14 @@ TEST_CASE(SerializeEmptyArray) { |
| EXPECT(array.Equals(serialized_array)); |
| // Read object back from the snapshot into a C structure. |
| - CMessageReader mreader(buffer + Snapshot::kHeaderSize, |
| - writer.BytesWritten(), |
| - &allocator); |
| - Dart_CObject* cobject = mreader.ReadObject(); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| + writer.BytesWritten(), |
| + &zone_allocator); |
| + Dart_CObject* cobject = cmessage->root; |
| EXPECT_EQ(Dart_CObject::kArray, cobject->type); |
| EXPECT_EQ(kArrayLength, cobject->value.as_array.length); |
| EXPECT(cobject->value.as_array.values == NULL); |
| - free(cobject); |
| } |
| @@ -384,7 +432,7 @@ TEST_CASE(SerializeScript) { |
| // Write snapshot with object content. |
| uint8_t* buffer; |
| - SnapshotWriter writer(Snapshot::kScript, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kScript, &buffer, &malloc_allocator); |
| writer.WriteObject(script.raw()); |
| writer.FinalizeBuffer(); |
| @@ -453,7 +501,7 @@ UNIT_TEST_CASE(FullSnapshot) { |
| Isolate* isolate = Isolate::Current(); |
| Zone zone(isolate); |
| HandleScope scope(isolate); |
| - SnapshotWriter writer(Snapshot::kFull, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kFull, &buffer, &malloc_allocator); |
| writer.WriteFullSnapshot(); |
| } |
| @@ -509,7 +557,7 @@ UNIT_TEST_CASE(FullSnapshot1) { |
| OS::PrintErr("Without Snapshot: %dus\n", timer1.TotalElapsedTime()); |
| // Write snapshot with object content. |
| - SnapshotWriter writer(Snapshot::kFull, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kFull, &buffer, &malloc_allocator); |
| writer.WriteFullSnapshot(); |
| // Invoke a function which returns an object. |
| @@ -646,7 +694,7 @@ UNIT_TEST_CASE(ScriptSnapshot) { |
| TEST_CASE(IntArrayMessage) { |
| uint8_t* buffer = NULL; |
| - MessageWriter writer(&buffer, &allocator); |
| + MessageWriter writer(&buffer, &malloc_allocator); |
| static const int kArrayLength = 2; |
| intptr_t data[kArrayLength] = {1, 2}; |
| @@ -654,26 +702,25 @@ TEST_CASE(IntArrayMessage) { |
| writer.WriteMessage(len, data); |
| // Read object back from the snapshot into a C structure. |
| - CMessageReader mreader(buffer + Snapshot::kHeaderSize, |
| - writer.BytesWritten(), |
| - &allocator); |
| - Dart_CObject* value = mreader.ReadObject(); |
| - EXPECT_EQ(Dart_CObject::kArray, value->type); |
| - EXPECT_EQ(kArrayLength, value->value.as_array.length); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| + writer.BytesWritten(), |
| + &zone_allocator); |
| + Dart_CObject* cobject = cmessage->root; |
| + EXPECT_EQ(Dart_CObject::kArray, cobject->type); |
| + EXPECT_EQ(kArrayLength, cobject->value.as_array.length); |
| for (int i = 0; i < kArrayLength; i++) { |
| - Dart_CObject* element = value->value.as_array.values[i]; |
| + Dart_CObject* element = cobject->value.as_array.values[i]; |
| EXPECT_EQ(Dart_CObject::kInt32, element->type); |
| EXPECT_EQ(i + 1, element->value.as_int32); |
| - free(element); |
| } |
| - free(value); |
| } |
| // Helper function to call a top level Dart function, serialize the |
| // result and deserialize the result into a Dart_CObject structure. |
| -static Dart_CObject* GetDeserializedDartObject(Dart_Handle lib, |
| - const char* dart_function) { |
| +static Dart_CMessage* GetDeserializedDartMessage(Dart_Handle lib, |
| + const char* dart_function) { |
| Dart_Handle result; |
| result = Dart_InvokeStatic(lib, |
| Dart_NewString(""), |
| @@ -684,18 +731,16 @@ static Dart_CObject* GetDeserializedDartObject(Dart_Handle lib, |
| // Serialize the list into a message. |
| uint8_t* buffer; |
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| const Object& list = Object::Handle(Api::UnwrapHandle(result)); |
| writer.WriteObject(list.raw()); |
| writer.FinalizeBuffer(); |
| // Read object back from the snapshot into a C structure. |
| - CMessageReader reader(buffer + Snapshot::kHeaderSize, |
| - writer.BytesWritten(), |
| - &allocator); |
| - Dart_CObject* value = reader.ReadObject(); |
| - free(buffer); |
| - return value; |
| + Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| + writer.BytesWritten(), |
| + &zone_allocator); |
| + return cmessage; |
| } |
| @@ -740,41 +785,39 @@ UNIT_TEST_CASE(DartGeneratedMessages) { |
| { |
| uint8_t* buffer; |
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| Smi& smi = Smi::Handle(); |
| smi ^= Api::UnwrapHandle(smi_result); |
| writer.WriteObject(smi.raw()); |
| writer.FinalizeBuffer(); |
| // Read object back from the snapshot into a C structure. |
| - CMessageReader mreader(buffer + Snapshot::kHeaderSize, |
| - writer.BytesWritten(), |
| - &allocator); |
| - Dart_CObject* value = mreader.ReadObject(); |
| - EXPECT_NOTNULL(value); |
| - EXPECT_EQ(Dart_CObject::kInt32, value->type); |
| - EXPECT_EQ(42, value->value.as_int32); |
| - free(value); |
| - free(buffer); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| + writer.BytesWritten(), |
| + &zone_allocator); |
| + Dart_CObject* cobject = cmessage->root; |
| + EXPECT_NOTNULL(cobject); |
| + EXPECT_EQ(Dart_CObject::kInt32, cobject->type); |
| + EXPECT_EQ(42, cobject->value.as_int32); |
| } |
| { |
| uint8_t* buffer; |
| - SnapshotWriter writer(Snapshot::kMessage, &buffer, &allocator); |
| + SnapshotWriter writer(Snapshot::kMessage, &buffer, &malloc_allocator); |
| String& str = String::Handle(); |
| str ^= Api::UnwrapHandle(string_result); |
| writer.WriteObject(str.raw()); |
| writer.FinalizeBuffer(); |
| // Read object back from the snapshot into a C structure. |
| - CMessageReader mreader(buffer + Snapshot::kHeaderSize, |
| - writer.BytesWritten(), |
| - &allocator); |
| - Dart_CObject* value = mreader.ReadObject(); |
| - EXPECT_NOTNULL(value); |
| - EXPECT_EQ(Dart_CObject::kString, value->type); |
| - EXPECT_STREQ("Hello, world!", value->value.as_string); |
| - free(value); |
| - free(buffer); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = DecodeMessage(buffer + Snapshot::kHeaderSize, |
| + writer.BytesWritten(), |
| + &zone_allocator); |
| + Dart_CObject* cobject = cmessage->root; |
| + EXPECT_NOTNULL(cobject); |
| + EXPECT_EQ(Dart_CObject::kString, cobject->type); |
| + EXPECT_STREQ("Hello, world!", cobject->value.as_string); |
| } |
| } |
| Dart_ExitScope(); |
| @@ -821,32 +864,35 @@ UNIT_TEST_CASE(DartGeneratedListMessages) { |
| { |
| // Generate a list of nulls from Dart code. |
| - Dart_CObject* value = GetDeserializedDartObject(lib, "getList"); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getList"); |
| + Dart_CObject* value = cmessage->root; |
| EXPECT_NOTNULL(value); |
| EXPECT_EQ(Dart_CObject::kArray, value->type); |
| EXPECT_EQ(kArrayLength, value->value.as_array.length); |
| for (int i = 0; i < kArrayLength; i++) { |
| EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type); |
| - free(value->value.as_array.values[i]); |
| } |
| - free(value); |
| } |
| { |
| // Generate a list of ints from Dart code. |
| - Dart_CObject* value = GetDeserializedDartObject(lib, "getIntList"); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getIntList"); |
| + Dart_CObject* value = cmessage->root; |
| EXPECT_NOTNULL(value); |
| EXPECT_EQ(Dart_CObject::kArray, value->type); |
| EXPECT_EQ(kArrayLength, value->value.as_array.length); |
| for (int i = 0; i < kArrayLength; i++) { |
| EXPECT_EQ(Dart_CObject::kInt32, value->value.as_array.values[i]->type); |
| EXPECT_EQ(i, value->value.as_array.values[i]->value.as_int32); |
| - free(value->value.as_array.values[i]); |
| } |
| - free(value); |
| } |
| { |
| // Generate a list of strings from Dart code. |
| - Dart_CObject* value = GetDeserializedDartObject(lib, "getStringList"); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = |
| + GetDeserializedDartMessage(lib, "getStringList"); |
| + Dart_CObject* value = cmessage->root; |
| EXPECT_NOTNULL(value); |
| EXPECT_EQ(Dart_CObject::kArray, value->type); |
| EXPECT_EQ(kArrayLength, value->value.as_array.length); |
| @@ -855,13 +901,13 @@ UNIT_TEST_CASE(DartGeneratedListMessages) { |
| char buffer[3]; |
| snprintf(buffer, sizeof(buffer), "%d", i); |
| EXPECT_STREQ(buffer, value->value.as_array.values[i]->value.as_string); |
| - free(value->value.as_array.values[i]); |
| } |
| - free(value); |
| } |
| { |
| // Generate a list of objects of different types from Dart code. |
| - Dart_CObject* value = GetDeserializedDartObject(lib, "getMixedList"); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getMixedList"); |
| + Dart_CObject* value = cmessage->root; |
| EXPECT_NOTNULL(value); |
| EXPECT_EQ(Dart_CObject::kArray, value->type); |
| EXPECT_EQ(kArrayLength, value->value.as_array.length); |
| @@ -879,9 +925,7 @@ UNIT_TEST_CASE(DartGeneratedListMessages) { |
| if (i > 3) { |
| EXPECT_EQ(Dart_CObject::kNull, value->value.as_array.values[i]->type); |
| } |
| - free(value->value.as_array.values[i]); |
| } |
| - free(value); |
| } |
| } |
| Dart_ExitScope(); |
| @@ -933,7 +977,10 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) { |
| { |
| // Generate a list of strings from Dart code. |
| - Dart_CObject* object = GetDeserializedDartObject(lib, "getStringList"); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = |
| + GetDeserializedDartMessage(lib, "getStringList"); |
| + Dart_CObject* object = cmessage->root; |
| EXPECT_NOTNULL(object); |
| EXPECT_EQ(Dart_CObject::kArray, object->type); |
| EXPECT_EQ(kArrayLength, object->value.as_array.length); |
| @@ -943,12 +990,13 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) { |
| EXPECT_EQ(Dart_CObject::kString, element->type); |
| EXPECT_STREQ("Hello, world!", element->value.as_string); |
| } |
| - free(object->value.as_array.values[0]); |
| - free(object); |
| } |
| { |
| // Generate a list of doubles from Dart code. |
| - Dart_CObject* object = GetDeserializedDartObject(lib, "getDoubleList"); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = |
| + GetDeserializedDartMessage(lib, "getDoubleList"); |
| + Dart_CObject* object = cmessage->root; |
| EXPECT_NOTNULL(object); |
| EXPECT_EQ(Dart_CObject::kArray, object->type); |
| EXPECT_EQ(kArrayLength, object->value.as_array.length); |
| @@ -958,12 +1006,12 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) { |
| EXPECT_EQ(Dart_CObject::kDouble, element->type); |
| EXPECT_EQ(3.14, element->value.as_double); |
| } |
| - free(object->value.as_array.values[0]); |
| - free(object); |
| } |
| { |
| // Generate a list of objects of different types from Dart code. |
| - Dart_CObject* object = GetDeserializedDartObject(lib, "getMixedList"); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = GetDeserializedDartMessage(lib, "getMixedList"); |
| + Dart_CObject* object = cmessage->root; |
| EXPECT_NOTNULL(object); |
| EXPECT_EQ(Dart_CObject::kArray, object->type); |
| EXPECT_EQ(kArrayLength, object->value.as_array.length); |
| @@ -979,13 +1027,13 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) { |
| EXPECT_STREQ(2.72, element->value.as_double); |
| } |
| } |
| - free(object->value.as_array.values[0]); |
| - free(object->value.as_array.values[1]); |
| - free(object); |
| } |
| { |
| // Generate a list of objects of different types from Dart code. |
| - Dart_CObject* object = GetDeserializedDartObject(lib, "getSelfRefList"); |
| + Zone zone(Isolate::Current()); |
| + Dart_CMessage* cmessage = |
| + GetDeserializedDartMessage(lib, "getSelfRefList"); |
| + Dart_CObject* object = cmessage->root; |
| EXPECT_NOTNULL(object); |
| EXPECT_EQ(Dart_CObject::kArray, object->type); |
| EXPECT_EQ(kArrayLength, object->value.as_array.length); |
| @@ -994,7 +1042,6 @@ UNIT_TEST_CASE(DartGeneratedListMessagesWithBackref) { |
| EXPECT_EQ(Dart_CObject::kArray, element->type); |
| EXPECT_EQ(object, element); |
| } |
| - free(object); |
| } |
| } |
| Dart_ExitScope(); |