| File: | out/../test/cctest/test_base_object_ptr.cc |
| Warning: | line 138, column 3 Method called on moved-from object 'ptr' |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 1 | #include "gtest/gtest.h" | |||
| 2 | #include "node.h" | |||
| 3 | #include "base_object-inl.h" | |||
| 4 | #include "node_test_fixture.h" | |||
| 5 | ||||
| 6 | using node::BaseObject; | |||
| 7 | using node::BaseObjectPtr; | |||
| 8 | using node::BaseObjectWeakPtr; | |||
| 9 | using node::Environment; | |||
| 10 | using node::MakeBaseObject; | |||
| 11 | using node::MakeDetachedBaseObject; | |||
| 12 | using v8::HandleScope; | |||
| 13 | using v8::Isolate; | |||
| 14 | using v8::Local; | |||
| 15 | using v8::Object; | |||
| 16 | ||||
| 17 | class BaseObjectPtrTest : public EnvironmentTestFixture {}; | |||
| 18 | ||||
| 19 | class DummyBaseObject : public BaseObject { | |||
| 20 | public: | |||
| 21 | DummyBaseObject(Environment* env, Local<Object> obj) : BaseObject(env, obj) {} | |||
| 22 | ||||
| 23 | static Local<Object> MakeJSObject(Environment* env) { | |||
| 24 | return BaseObject::MakeLazilyInitializedJSTemplate(env) | |||
| 25 | ->GetFunction(env->context()).ToLocalChecked() | |||
| 26 | ->NewInstance(env->context()).ToLocalChecked(); | |||
| 27 | } | |||
| 28 | ||||
| 29 | static BaseObjectPtr<DummyBaseObject> NewDetached(Environment* env) { | |||
| 30 | Local<Object> obj = MakeJSObject(env); | |||
| 31 | return MakeDetachedBaseObject<DummyBaseObject>(env, obj); | |||
| 32 | } | |||
| 33 | ||||
| 34 | static BaseObjectPtr<DummyBaseObject> New(Environment* env) { | |||
| 35 | Local<Object> obj = MakeJSObject(env); | |||
| 36 | return MakeBaseObject<DummyBaseObject>(env, obj); | |||
| 37 | } | |||
| 38 | ||||
| 39 | SET_NO_MEMORY_INFO()inline void MemoryInfo(node::MemoryTracker* tracker) const override {} | |||
| 40 | SET_MEMORY_INFO_NAME(DummyBaseObject)inline std::string MemoryInfoName() const override { return "DummyBaseObject" ; } | |||
| 41 | SET_SELF_SIZE(DummyBaseObject)inline size_t SelfSize() const override { return sizeof(DummyBaseObject ); } | |||
| 42 | }; | |||
| 43 | ||||
| 44 | TEST_F(BaseObjectPtrTest, ScopedDetached)static_assert(sizeof("BaseObjectPtrTest") > 1, "test_suite_name must not be empty" ); static_assert(sizeof("ScopedDetached") > 1, "test_name must not be empty" ); class BaseObjectPtrTest_ScopedDetached_Test : public BaseObjectPtrTest { public: BaseObjectPtrTest_ScopedDetached_Test() = default; ~BaseObjectPtrTest_ScopedDetached_Test() override = default; BaseObjectPtrTest_ScopedDetached_Test(BaseObjectPtrTest_ScopedDetached_Test const&) = delete; BaseObjectPtrTest_ScopedDetached_Test& operator=(BaseObjectPtrTest_ScopedDetached_Test const&) = delete; BaseObjectPtrTest_ScopedDetached_Test(BaseObjectPtrTest_ScopedDetached_Test &&) noexcept = delete; BaseObjectPtrTest_ScopedDetached_Test & operator=(BaseObjectPtrTest_ScopedDetached_Test&& ) noexcept = delete; private: void TestBody() override; static ::testing::TestInfo* const test_info_ __attribute__ ((unused )); }; ::testing::TestInfo* const BaseObjectPtrTest_ScopedDetached_Test ::test_info_ = ::testing::internal::MakeAndRegisterTestInfo( "BaseObjectPtrTest" , "ScopedDetached", nullptr, nullptr, ::testing::internal::CodeLocation ("../test/cctest/test_base_object_ptr.cc", 44), (::testing::internal ::GetTypeId<BaseObjectPtrTest>()), ::testing::internal:: SuiteApiResolver< BaseObjectPtrTest>::GetSetUpCaseOrSuite ("../test/cctest/test_base_object_ptr.cc", 44), ::testing::internal ::SuiteApiResolver< BaseObjectPtrTest>::GetTearDownCaseOrSuite ("../test/cctest/test_base_object_ptr.cc", 44), new ::testing ::internal::TestFactoryImpl<BaseObjectPtrTest_ScopedDetached_Test >); void BaseObjectPtrTest_ScopedDetached_Test::TestBody() { | |||
| 45 | const HandleScope handle_scope(isolate_); | |||
| 46 | const Argv argv; | |||
| 47 | Env env_{handle_scope, argv}; | |||
| 48 | Environment* env = *env_; | |||
| 49 | ||||
| 50 | EXPECT_EQ(env->base_object_created_after_bootstrap(), 0)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("env->base_object_created_after_bootstrap()" , "0", env->base_object_created_after_bootstrap(), 0))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 50 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| 51 | { | |||
| 52 | BaseObjectPtr<DummyBaseObject> ptr = DummyBaseObject::NewDetached(env); | |||
| 53 | EXPECT_EQ(env->base_object_created_after_bootstrap(), 1)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("env->base_object_created_after_bootstrap()" , "1", env->base_object_created_after_bootstrap(), 1))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 53 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| 54 | } | |||
| 55 | EXPECT_EQ(env->base_object_created_after_bootstrap(), 0)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("env->base_object_created_after_bootstrap()" , "0", env->base_object_created_after_bootstrap(), 0))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 55 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| 56 | } | |||
| 57 | ||||
| 58 | TEST_F(BaseObjectPtrTest, ScopedDetachedWithWeak)static_assert(sizeof("BaseObjectPtrTest") > 1, "test_suite_name must not be empty" ); static_assert(sizeof("ScopedDetachedWithWeak") > 1, "test_name must not be empty" ); class BaseObjectPtrTest_ScopedDetachedWithWeak_Test : public BaseObjectPtrTest { public: BaseObjectPtrTest_ScopedDetachedWithWeak_Test () = default; ~BaseObjectPtrTest_ScopedDetachedWithWeak_Test( ) override = default; BaseObjectPtrTest_ScopedDetachedWithWeak_Test (BaseObjectPtrTest_ScopedDetachedWithWeak_Test const&) = delete ; BaseObjectPtrTest_ScopedDetachedWithWeak_Test& operator =(BaseObjectPtrTest_ScopedDetachedWithWeak_Test const&) = delete; BaseObjectPtrTest_ScopedDetachedWithWeak_Test(BaseObjectPtrTest_ScopedDetachedWithWeak_Test &&) noexcept = delete; BaseObjectPtrTest_ScopedDetachedWithWeak_Test & operator=(BaseObjectPtrTest_ScopedDetachedWithWeak_Test &&) noexcept = delete; private: void TestBody() override ; static ::testing::TestInfo* const test_info_ __attribute__ ( (unused)); }; ::testing::TestInfo* const BaseObjectPtrTest_ScopedDetachedWithWeak_Test ::test_info_ = ::testing::internal::MakeAndRegisterTestInfo( "BaseObjectPtrTest" , "ScopedDetachedWithWeak", nullptr, nullptr, ::testing::internal ::CodeLocation("../test/cctest/test_base_object_ptr.cc", 58), (::testing::internal::GetTypeId<BaseObjectPtrTest>()), ::testing::internal::SuiteApiResolver< BaseObjectPtrTest> ::GetSetUpCaseOrSuite("../test/cctest/test_base_object_ptr.cc" , 58), ::testing::internal::SuiteApiResolver< BaseObjectPtrTest >::GetTearDownCaseOrSuite("../test/cctest/test_base_object_ptr.cc" , 58), new ::testing::internal::TestFactoryImpl<BaseObjectPtrTest_ScopedDetachedWithWeak_Test >); void BaseObjectPtrTest_ScopedDetachedWithWeak_Test::TestBody () { | |||
| 59 | const HandleScope handle_scope(isolate_); | |||
| 60 | const Argv argv; | |||
| 61 | Env env_{handle_scope, argv}; | |||
| 62 | Environment* env = *env_; | |||
| 63 | ||||
| 64 | BaseObjectWeakPtr<DummyBaseObject> weak_ptr; | |||
| 65 | ||||
| 66 | EXPECT_EQ(env->base_object_created_after_bootstrap(), 0)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("env->base_object_created_after_bootstrap()" , "0", env->base_object_created_after_bootstrap(), 0))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 66 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| 67 | { | |||
| 68 | BaseObjectPtr<DummyBaseObject> ptr = DummyBaseObject::NewDetached(env); | |||
| 69 | weak_ptr = ptr; | |||
| 70 | EXPECT_EQ(env->base_object_created_after_bootstrap(), 1)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("env->base_object_created_after_bootstrap()" , "1", env->base_object_created_after_bootstrap(), 1))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 70 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| 71 | } | |||
| 72 | EXPECT_EQ(weak_ptr.get(), nullptr)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("weak_ptr.get()" , "nullptr", weak_ptr.get(), nullptr))) ; else ::testing::internal ::AssertHelper(::testing::TestPartResult::kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc" , 72, gtest_ar.failure_message()) = ::testing::Message(); | |||
| 73 | EXPECT_EQ(env->base_object_created_after_bootstrap(), 0)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("env->base_object_created_after_bootstrap()" , "0", env->base_object_created_after_bootstrap(), 0))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 73 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| 74 | } | |||
| 75 | ||||
| 76 | TEST_F(BaseObjectPtrTest, Undetached)static_assert(sizeof("BaseObjectPtrTest") > 1, "test_suite_name must not be empty" ); static_assert(sizeof("Undetached") > 1, "test_name must not be empty" ); class BaseObjectPtrTest_Undetached_Test : public BaseObjectPtrTest { public: BaseObjectPtrTest_Undetached_Test() = default; ~BaseObjectPtrTest_Undetached_Test () override = default; BaseObjectPtrTest_Undetached_Test(BaseObjectPtrTest_Undetached_Test const&) = delete; BaseObjectPtrTest_Undetached_Test& operator=(BaseObjectPtrTest_Undetached_Test const&) = delete ; BaseObjectPtrTest_Undetached_Test(BaseObjectPtrTest_Undetached_Test &&) noexcept = delete; BaseObjectPtrTest_Undetached_Test & operator=(BaseObjectPtrTest_Undetached_Test&&) noexcept = delete; private: void TestBody() override; static ::testing ::TestInfo* const test_info_ __attribute__ ((unused)); }; ::testing ::TestInfo* const BaseObjectPtrTest_Undetached_Test::test_info_ = ::testing::internal::MakeAndRegisterTestInfo( "BaseObjectPtrTest" , "Undetached", nullptr, nullptr, ::testing::internal::CodeLocation ("../test/cctest/test_base_object_ptr.cc", 76), (::testing::internal ::GetTypeId<BaseObjectPtrTest>()), ::testing::internal:: SuiteApiResolver< BaseObjectPtrTest>::GetSetUpCaseOrSuite ("../test/cctest/test_base_object_ptr.cc", 76), ::testing::internal ::SuiteApiResolver< BaseObjectPtrTest>::GetTearDownCaseOrSuite ("../test/cctest/test_base_object_ptr.cc", 76), new ::testing ::internal::TestFactoryImpl<BaseObjectPtrTest_Undetached_Test >); void BaseObjectPtrTest_Undetached_Test::TestBody() { | |||
| 77 | const HandleScope handle_scope(isolate_); | |||
| 78 | const Argv argv; | |||
| 79 | Env env_{handle_scope, argv}; | |||
| 80 | Environment* env = *env_; | |||
| 81 | ||||
| 82 | node::AddEnvironmentCleanupHook( | |||
| 83 | isolate_, | |||
| 84 | [](void* arg) { | |||
| 85 | EXPECT_EQ(static_cast<Environment*>(arg)->base_object_count(), 0)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("static_cast<Environment*>(arg)->base_object_count()" , "0", static_cast<Environment*>(arg)->base_object_count (), 0))) ; else ::testing::internal::AssertHelper(::testing:: TestPartResult::kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc" , 85, gtest_ar.failure_message()) = ::testing::Message(); | |||
| 86 | }, | |||
| 87 | env); | |||
| 88 | ||||
| 89 | BaseObjectPtr<DummyBaseObject> ptr = DummyBaseObject::New(env); | |||
| 90 | EXPECT_EQ(env->base_object_created_after_bootstrap(), 1)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("env->base_object_created_after_bootstrap()" , "1", env->base_object_created_after_bootstrap(), 1))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 90 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| 91 | } | |||
| 92 | ||||
| 93 | TEST_F(BaseObjectPtrTest, GCWeak)static_assert(sizeof("BaseObjectPtrTest") > 1, "test_suite_name must not be empty" ); static_assert(sizeof("GCWeak") > 1, "test_name must not be empty" ); class BaseObjectPtrTest_GCWeak_Test : public BaseObjectPtrTest { public: BaseObjectPtrTest_GCWeak_Test() = default; ~BaseObjectPtrTest_GCWeak_Test () override = default; BaseObjectPtrTest_GCWeak_Test(BaseObjectPtrTest_GCWeak_Test const&) = delete; BaseObjectPtrTest_GCWeak_Test& operator =(BaseObjectPtrTest_GCWeak_Test const&) = delete; BaseObjectPtrTest_GCWeak_Test (BaseObjectPtrTest_GCWeak_Test&&) noexcept = delete; BaseObjectPtrTest_GCWeak_Test & operator=(BaseObjectPtrTest_GCWeak_Test&&) noexcept = delete; private: void TestBody() override; static ::testing ::TestInfo* const test_info_ __attribute__ ((unused)); }; ::testing ::TestInfo* const BaseObjectPtrTest_GCWeak_Test::test_info_ = ::testing::internal::MakeAndRegisterTestInfo( "BaseObjectPtrTest" , "GCWeak", nullptr, nullptr, ::testing::internal::CodeLocation ("../test/cctest/test_base_object_ptr.cc", 93), (::testing::internal ::GetTypeId<BaseObjectPtrTest>()), ::testing::internal:: SuiteApiResolver< BaseObjectPtrTest>::GetSetUpCaseOrSuite ("../test/cctest/test_base_object_ptr.cc", 93), ::testing::internal ::SuiteApiResolver< BaseObjectPtrTest>::GetTearDownCaseOrSuite ("../test/cctest/test_base_object_ptr.cc", 93), new ::testing ::internal::TestFactoryImpl<BaseObjectPtrTest_GCWeak_Test> ); void BaseObjectPtrTest_GCWeak_Test::TestBody() { | |||
| 94 | const HandleScope handle_scope(isolate_); | |||
| 95 | const Argv argv; | |||
| 96 | Env env_{handle_scope, argv}; | |||
| 97 | Environment* env = *env_; | |||
| 98 | ||||
| 99 | BaseObjectWeakPtr<DummyBaseObject> weak_ptr; | |||
| 100 | ||||
| 101 | { | |||
| 102 | const HandleScope handle_scope(isolate_); | |||
| 103 | BaseObjectPtr<DummyBaseObject> ptr = DummyBaseObject::New(env); | |||
| 104 | weak_ptr = ptr; | |||
| 105 | ptr->MakeWeak(); | |||
| 106 | ||||
| 107 | EXPECT_EQ(env->base_object_created_after_bootstrap(), 1)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("env->base_object_created_after_bootstrap()" , "1", env->base_object_created_after_bootstrap(), 1))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 107 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| 108 | EXPECT_EQ(weak_ptr.get(), ptr.get())switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("weak_ptr.get()" , "ptr.get()", weak_ptr.get(), ptr.get()))) ; else ::testing:: internal::AssertHelper(::testing::TestPartResult::kNonFatalFailure , "../test/cctest/test_base_object_ptr.cc", 108, gtest_ar.failure_message ()) = ::testing::Message(); | |||
| 109 | EXPECT_EQ(weak_ptr->persistent().IsWeak(), false)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("weak_ptr->persistent().IsWeak()" , "false", weak_ptr->persistent().IsWeak(), false))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 109 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| 110 | ||||
| 111 | ptr.reset(); | |||
| 112 | } | |||
| 113 | ||||
| 114 | EXPECT_EQ(env->base_object_created_after_bootstrap(), 1)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("env->base_object_created_after_bootstrap()" , "1", env->base_object_created_after_bootstrap(), 1))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 114 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| 115 | EXPECT_NE(weak_ptr.get(), nullptr)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::CmpHelperNE("weak_ptr.get()" , "nullptr", weak_ptr.get(), nullptr))) ; else ::testing::internal ::AssertHelper(::testing::TestPartResult::kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc" , 115, gtest_ar.failure_message()) = ::testing::Message(); | |||
| 116 | EXPECT_EQ(weak_ptr->persistent().IsWeak(), true)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("weak_ptr->persistent().IsWeak()" , "true", weak_ptr->persistent().IsWeak(), true))) ; else :: testing::internal::AssertHelper(::testing::TestPartResult::kNonFatalFailure , "../test/cctest/test_base_object_ptr.cc", 116, gtest_ar.failure_message ()) = ::testing::Message(); | |||
| 117 | ||||
| 118 | v8::V8::SetFlagsFromString("--expose-gc"); | |||
| 119 | isolate_->RequestGarbageCollectionForTesting(Isolate::kFullGarbageCollection); | |||
| 120 | ||||
| 121 | EXPECT_EQ(env->base_object_created_after_bootstrap(), 0)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("env->base_object_created_after_bootstrap()" , "0", env->base_object_created_after_bootstrap(), 0))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 121 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| 122 | EXPECT_EQ(weak_ptr.get(), nullptr)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("weak_ptr.get()" , "nullptr", weak_ptr.get(), nullptr))) ; else ::testing::internal ::AssertHelper(::testing::TestPartResult::kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc" , 122, gtest_ar.failure_message()) = ::testing::Message(); | |||
| 123 | } | |||
| 124 | ||||
| 125 | TEST_F(BaseObjectPtrTest, Moveable)static_assert(sizeof("BaseObjectPtrTest") > 1, "test_suite_name must not be empty" ); static_assert(sizeof("Moveable") > 1, "test_name must not be empty" ); class BaseObjectPtrTest_Moveable_Test : public BaseObjectPtrTest { public: BaseObjectPtrTest_Moveable_Test() = default; ~BaseObjectPtrTest_Moveable_Test () override = default; BaseObjectPtrTest_Moveable_Test(BaseObjectPtrTest_Moveable_Test const&) = delete; BaseObjectPtrTest_Moveable_Test& operator =(BaseObjectPtrTest_Moveable_Test const&) = delete; BaseObjectPtrTest_Moveable_Test (BaseObjectPtrTest_Moveable_Test&&) noexcept = delete ; BaseObjectPtrTest_Moveable_Test& operator=(BaseObjectPtrTest_Moveable_Test &&) noexcept = delete; private: void TestBody() override ; static ::testing::TestInfo* const test_info_ __attribute__ ( (unused)); }; ::testing::TestInfo* const BaseObjectPtrTest_Moveable_Test ::test_info_ = ::testing::internal::MakeAndRegisterTestInfo( "BaseObjectPtrTest" , "Moveable", nullptr, nullptr, ::testing::internal::CodeLocation ("../test/cctest/test_base_object_ptr.cc", 125), (::testing:: internal::GetTypeId<BaseObjectPtrTest>()), ::testing::internal ::SuiteApiResolver< BaseObjectPtrTest>::GetSetUpCaseOrSuite ("../test/cctest/test_base_object_ptr.cc", 125), ::testing::internal ::SuiteApiResolver< BaseObjectPtrTest>::GetTearDownCaseOrSuite ("../test/cctest/test_base_object_ptr.cc", 125), new ::testing ::internal::TestFactoryImpl<BaseObjectPtrTest_Moveable_Test >); void BaseObjectPtrTest_Moveable_Test::TestBody() { | |||
| 126 | const HandleScope handle_scope(isolate_); | |||
| 127 | const Argv argv; | |||
| 128 | Env env_{handle_scope, argv}; | |||
| 129 | Environment* env = *env_; | |||
| 130 | ||||
| 131 | BaseObjectPtr<DummyBaseObject> ptr = DummyBaseObject::NewDetached(env); | |||
| 132 | EXPECT_EQ(env->base_object_created_after_bootstrap(), 1)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("env->base_object_created_after_bootstrap()" , "1", env->base_object_created_after_bootstrap(), 1))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 132 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| ||||
| 133 | BaseObjectWeakPtr<DummyBaseObject> weak_ptr { ptr }; | |||
| 134 | EXPECT_EQ(weak_ptr.get(), ptr.get())switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("weak_ptr.get()" , "ptr.get()", weak_ptr.get(), ptr.get()))) ; else ::testing:: internal::AssertHelper(::testing::TestPartResult::kNonFatalFailure , "../test/cctest/test_base_object_ptr.cc", 134, gtest_ar.failure_message ()) = ::testing::Message(); | |||
| 135 | ||||
| 136 | BaseObjectPtr<DummyBaseObject> ptr2 = std::move(ptr); | |||
| 137 | EXPECT_EQ(weak_ptr.get(), ptr2.get())switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("weak_ptr.get()" , "ptr2.get()", weak_ptr.get(), ptr2.get()))) ; else ::testing ::internal::AssertHelper(::testing::TestPartResult::kNonFatalFailure , "../test/cctest/test_base_object_ptr.cc", 137, gtest_ar.failure_message ()) = ::testing::Message(); | |||
| 138 | EXPECT_EQ(ptr.get(), nullptr)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("ptr.get()" , "nullptr", ptr.get(), nullptr))) ; else ::testing::internal ::AssertHelper(::testing::TestPartResult::kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc" , 138, gtest_ar.failure_message()) = ::testing::Message(); | |||
| ||||
| 139 | ||||
| 140 | BaseObjectWeakPtr<DummyBaseObject> weak_ptr2 = std::move(weak_ptr); | |||
| 141 | EXPECT_EQ(weak_ptr2.get(), ptr2.get())switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("weak_ptr2.get()" , "ptr2.get()", weak_ptr2.get(), ptr2.get()))) ; else ::testing ::internal::AssertHelper(::testing::TestPartResult::kNonFatalFailure , "../test/cctest/test_base_object_ptr.cc", 141, gtest_ar.failure_message ()) = ::testing::Message(); | |||
| 142 | EXPECT_EQ(weak_ptr.get(), nullptr)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("weak_ptr.get()" , "nullptr", weak_ptr.get(), nullptr))) ; else ::testing::internal ::AssertHelper(::testing::TestPartResult::kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc" , 142, gtest_ar.failure_message()) = ::testing::Message(); | |||
| 143 | EXPECT_EQ(env->base_object_created_after_bootstrap(), 1)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("env->base_object_created_after_bootstrap()" , "1", env->base_object_created_after_bootstrap(), 1))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 143 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| 144 | ||||
| 145 | ptr2.reset(); | |||
| 146 | ||||
| 147 | EXPECT_EQ(weak_ptr2.get(), nullptr)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("weak_ptr2.get()" , "nullptr", weak_ptr2.get(), nullptr))) ; else ::testing::internal ::AssertHelper(::testing::TestPartResult::kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc" , 147, gtest_ar.failure_message()) = ::testing::Message(); | |||
| 148 | EXPECT_EQ(env->base_object_created_after_bootstrap(), 0)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("env->base_object_created_after_bootstrap()" , "0", env->base_object_created_after_bootstrap(), 0))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 148 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| 149 | } | |||
| 150 | ||||
| 151 | TEST_F(BaseObjectPtrTest, NestedClasses)static_assert(sizeof("BaseObjectPtrTest") > 1, "test_suite_name must not be empty" ); static_assert(sizeof("NestedClasses") > 1, "test_name must not be empty" ); class BaseObjectPtrTest_NestedClasses_Test : public BaseObjectPtrTest { public: BaseObjectPtrTest_NestedClasses_Test() = default; ~ BaseObjectPtrTest_NestedClasses_Test() override = default; BaseObjectPtrTest_NestedClasses_Test (BaseObjectPtrTest_NestedClasses_Test const&) = delete; BaseObjectPtrTest_NestedClasses_Test & operator=(BaseObjectPtrTest_NestedClasses_Test const& ) = delete; BaseObjectPtrTest_NestedClasses_Test(BaseObjectPtrTest_NestedClasses_Test &&) noexcept = delete; BaseObjectPtrTest_NestedClasses_Test & operator=(BaseObjectPtrTest_NestedClasses_Test&& ) noexcept = delete; private: void TestBody() override; static ::testing::TestInfo* const test_info_ __attribute__ ((unused )); }; ::testing::TestInfo* const BaseObjectPtrTest_NestedClasses_Test ::test_info_ = ::testing::internal::MakeAndRegisterTestInfo( "BaseObjectPtrTest" , "NestedClasses", nullptr, nullptr, ::testing::internal::CodeLocation ("../test/cctest/test_base_object_ptr.cc", 151), (::testing:: internal::GetTypeId<BaseObjectPtrTest>()), ::testing::internal ::SuiteApiResolver< BaseObjectPtrTest>::GetSetUpCaseOrSuite ("../test/cctest/test_base_object_ptr.cc", 151), ::testing::internal ::SuiteApiResolver< BaseObjectPtrTest>::GetTearDownCaseOrSuite ("../test/cctest/test_base_object_ptr.cc", 151), new ::testing ::internal::TestFactoryImpl<BaseObjectPtrTest_NestedClasses_Test >); void BaseObjectPtrTest_NestedClasses_Test::TestBody() { | |||
| 152 | class ObjectWithPtr : public BaseObject { | |||
| 153 | public: | |||
| 154 | ObjectWithPtr(Environment* env, Local<Object> obj) : BaseObject(env, obj) {} | |||
| 155 | ||||
| 156 | BaseObjectPtr<BaseObject> ptr1; | |||
| 157 | BaseObjectPtr<BaseObject> ptr2; | |||
| 158 | ||||
| 159 | SET_NO_MEMORY_INFO()inline void MemoryInfo(node::MemoryTracker* tracker) const override {} | |||
| 160 | SET_MEMORY_INFO_NAME(ObjectWithPtr)inline std::string MemoryInfoName() const override { return "ObjectWithPtr" ; } | |||
| 161 | SET_SELF_SIZE(ObjectWithPtr)inline size_t SelfSize() const override { return sizeof(ObjectWithPtr ); } | |||
| 162 | }; | |||
| 163 | ||||
| 164 | const HandleScope handle_scope(isolate_); | |||
| 165 | const Argv argv; | |||
| 166 | Env env_{handle_scope, argv}; | |||
| 167 | Environment* env = *env_; | |||
| 168 | ||||
| 169 | node::AddEnvironmentCleanupHook( | |||
| 170 | isolate_, | |||
| 171 | [](void* arg) { | |||
| 172 | EXPECT_EQ(static_cast<Environment*>(arg)->base_object_count(), 0)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("static_cast<Environment*>(arg)->base_object_count()" , "0", static_cast<Environment*>(arg)->base_object_count (), 0))) ; else ::testing::internal::AssertHelper(::testing:: TestPartResult::kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc" , 172, gtest_ar.failure_message()) = ::testing::Message(); | |||
| 173 | }, | |||
| 174 | env); | |||
| 175 | ||||
| 176 | ObjectWithPtr* obj = | |||
| 177 | new ObjectWithPtr(env, DummyBaseObject::MakeJSObject(env)); | |||
| 178 | obj->ptr1 = DummyBaseObject::NewDetached(env); | |||
| 179 | obj->ptr2 = DummyBaseObject::New(env); | |||
| 180 | ||||
| 181 | EXPECT_EQ(env->base_object_created_after_bootstrap(), 3)switch (0) case 0: default: if (const ::testing::AssertionResult gtest_ar = (::testing::internal::EqHelper::Compare("env->base_object_created_after_bootstrap()" , "3", env->base_object_created_after_bootstrap(), 3))) ; else ::testing::internal::AssertHelper(::testing::TestPartResult:: kNonFatalFailure, "../test/cctest/test_base_object_ptr.cc", 181 , gtest_ar.failure_message()) = ::testing::Message(); | |||
| 182 | } |