| Index: dart/runtime/vm/dart_api_impl_test.cc
|
| ===================================================================
|
| --- dart/runtime/vm/dart_api_impl_test.cc (revision 31530)
|
| +++ dart/runtime/vm/dart_api_impl_test.cc (working copy)
|
| @@ -1897,6 +1897,38 @@
|
| }
|
|
|
|
|
| +// Test that we can assign to a persistent handle.
|
| +UNIT_TEST_CASE(AssignToPersistentHandle) {
|
| + const char* kTestString1 = "Test String1";
|
| + const char* kTestString2 = "Test String2";
|
| + TestIsolateScope __test_isolate__;
|
| +
|
| + Isolate* isolate = Isolate::Current();
|
| + EXPECT(isolate != NULL);
|
| + ApiState* state = isolate->api_state();
|
| + EXPECT(state != NULL);
|
| + DARTSCOPE(isolate);
|
| + String& str = String::Handle();
|
| +
|
| + // Start with a known persistent handle.
|
| + Dart_Handle ref1 = Api::NewHandle(isolate, String::New(kTestString1));
|
| + Dart_PersistentHandle obj = Dart_NewPersistentHandle(ref1);
|
| + EXPECT(state->IsValidPersistentHandle(obj));
|
| + str ^= Api::UnwrapAsPersistentHandle(obj)->raw();
|
| + EXPECT(str.Equals(kTestString1));
|
| +
|
| + // Now create another local handle and assign it to the persistent handle.
|
| + Dart_Handle ref2 = Api::NewHandle(isolate, String::New(kTestString2));
|
| + Dart_SetPersistentHandle(obj, ref2);
|
| + str ^= Api::UnwrapAsPersistentHandle(obj)->raw();
|
| + EXPECT(str.Equals(kTestString2));
|
| +
|
| + // Now assign Null to the persistent handle and check.
|
| + Dart_SetPersistentHandle(obj, Dart_Null());
|
| + EXPECT(Dart_IsNull(obj));
|
| +}
|
| +
|
| +
|
| // Helper class to ensure new gen GC is triggered without any side effects.
|
| // The normal call to CollectGarbage(Heap::kNew) could potentially trigger
|
| // an old gen collection if there is a promotion failure and this could
|
|
|