| Index: test/cctest/test-api.cc
|
| diff --git a/test/cctest/test-api.cc b/test/cctest/test-api.cc
|
| index 23756db24e5957762f6b1fe8faa4063730385938..94b397f246a37418ce6d76effa908a6eb49e004b 100644
|
| --- a/test/cctest/test-api.cc
|
| +++ b/test/cctest/test-api.cc
|
| @@ -3299,6 +3299,73 @@ THREADED_TEST(ResettingGlobalHandleToEmpty) {
|
| }
|
|
|
|
|
| +template<class T>
|
| +static v8::UniquePersistent<T> PassUnique(v8::UniquePersistent<T> unique) {
|
| + return unique.Pass();
|
| +}
|
| +
|
| +
|
| +template<class T>
|
| +static v8::UniquePersistent<T> ReturnUnique(v8::Isolate* isolate,
|
| + const v8::Persistent<T> & global) {
|
| + v8::UniquePersistent<String> unique(isolate, global);
|
| + return unique.Pass();
|
| +}
|
| +
|
| +
|
| +THREADED_TEST(UniquePersistent) {
|
| + v8::Isolate* isolate = CcTest::isolate();
|
| + v8::Persistent<String> global;
|
| + {
|
| + v8::HandleScope scope(isolate);
|
| + global.Reset(isolate, v8_str("str"));
|
| + }
|
| + v8::internal::GlobalHandles* global_handles =
|
| + reinterpret_cast<v8::internal::Isolate*>(isolate)->global_handles();
|
| + int initial_handle_count = global_handles->global_handles_count();
|
| + {
|
| + v8::UniquePersistent<String> unique(isolate, global);
|
| + CHECK_EQ(initial_handle_count + 1, global_handles->global_handles_count());
|
| + // Test assignment via Pass
|
| + {
|
| + v8::UniquePersistent<String> copy = unique.Pass();
|
| + CHECK(unique.IsEmpty());
|
| + CHECK(copy == global);
|
| + CHECK_EQ(initial_handle_count + 1,
|
| + global_handles->global_handles_count());
|
| + unique = copy.Pass();
|
| + }
|
| + // Test ctor via Pass
|
| + {
|
| + v8::UniquePersistent<String> copy(unique.Pass());
|
| + CHECK(unique.IsEmpty());
|
| + CHECK(copy == global);
|
| + CHECK_EQ(initial_handle_count + 1,
|
| + global_handles->global_handles_count());
|
| + unique = copy.Pass();
|
| + }
|
| + // Test pass through function call
|
| + {
|
| + v8::UniquePersistent<String> copy = PassUnique(unique.Pass());
|
| + CHECK(unique.IsEmpty());
|
| + CHECK(copy == global);
|
| + CHECK_EQ(initial_handle_count + 1,
|
| + global_handles->global_handles_count());
|
| + unique = copy.Pass();
|
| + }
|
| + CHECK_EQ(initial_handle_count + 1, global_handles->global_handles_count());
|
| + }
|
| + // Test pass from function call
|
| + {
|
| + v8::UniquePersistent<String> unique = ReturnUnique(isolate, global);
|
| + CHECK(unique == global);
|
| + CHECK_EQ(initial_handle_count + 1, global_handles->global_handles_count());
|
| + }
|
| + CHECK_EQ(initial_handle_count, global_handles->global_handles_count());
|
| + global.Reset();
|
| +}
|
| +
|
| +
|
| THREADED_TEST(GlobalHandleUpcast) {
|
| v8::Isolate* isolate = CcTest::isolate();
|
| v8::HandleScope scope(isolate);
|
|
|