// Copyright (c) 2015 The Chromium Embedded Framework Authors. All rights // reserved. Use of this source code is governed by a BSD-style license that // can be found in the LICENSE file. #include #include "include/test/cef_translator_test.h" #include "tests/ceftests/test_handler.h" #include "tests/gtest/include/gtest/gtest.h" // Test getting/setting primitive types. TEST(TranslatorTest, Primitive) { CefRefPtr obj = CefTranslatorTest::Create(); obj->GetVoid(); // Does nothing, but shouldn't crash. EXPECT_EQ(TEST_BOOL_VAL, obj->GetBool()); EXPECT_EQ(TEST_INT_VAL, obj->GetInt()); EXPECT_EQ(TEST_DOUBLE_VAL, obj->GetDouble()); EXPECT_EQ(TEST_LONG_VAL, obj->GetLong()); EXPECT_EQ(TEST_SIZET_VAL, obj->GetSizet()); EXPECT_TRUE(obj->SetVoid()); // Does nothing, but shouldn't crash. EXPECT_TRUE(obj->SetBool(TEST_BOOL_VAL)); EXPECT_TRUE(obj->SetInt(TEST_INT_VAL)); EXPECT_TRUE(obj->SetDouble(TEST_DOUBLE_VAL)); EXPECT_TRUE(obj->SetLong(TEST_LONG_VAL)); EXPECT_TRUE(obj->SetSizet(TEST_SIZET_VAL)); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting primitive list types. TEST(TranslatorTest, PrimitiveList) { CefRefPtr obj = CefTranslatorTest::Create(); std::vector list; list.push_back(TEST_INT_VAL); list.push_back(TEST_INT_VAL2); EXPECT_TRUE(obj->SetIntList(list)); list.clear(); EXPECT_TRUE(obj->GetIntListByRef(list)); EXPECT_EQ(2U, list.size()); EXPECT_EQ(TEST_INT_VAL, list[0]); EXPECT_EQ(TEST_INT_VAL2, list[1]); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting string types. TEST(TranslatorTest, String) { CefRefPtr obj = CefTranslatorTest::Create(); EXPECT_STREQ(TEST_STRING_VAL, obj->GetString().ToString().c_str()); EXPECT_TRUE(obj->SetString(TEST_STRING_VAL)); CefString str; obj->GetStringByRef(str); EXPECT_STREQ(TEST_STRING_VAL, str.ToString().c_str()); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting string list types. TEST(TranslatorTest, StringList) { CefRefPtr obj = CefTranslatorTest::Create(); std::vector list; list.push_back(TEST_STRING_VAL); list.push_back(TEST_STRING_VAL2); list.push_back(TEST_STRING_VAL3); EXPECT_TRUE(obj->SetStringList(list)); list.clear(); EXPECT_TRUE(obj->GetStringListByRef(list)); EXPECT_EQ(3U, list.size()); EXPECT_STREQ(TEST_STRING_VAL, list[0].ToString().c_str()); EXPECT_STREQ(TEST_STRING_VAL2, list[1].ToString().c_str()); EXPECT_STREQ(TEST_STRING_VAL3, list[2].ToString().c_str()); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting string map types. TEST(TranslatorTest, StringMap) { CefRefPtr obj = CefTranslatorTest::Create(); CefTranslatorTest::StringMap map; map.insert(std::make_pair(TEST_STRING_KEY, TEST_STRING_VAL)); map.insert(std::make_pair(TEST_STRING_KEY2, TEST_STRING_VAL2)); map.insert(std::make_pair(TEST_STRING_KEY3, TEST_STRING_VAL3)); EXPECT_TRUE(obj->SetStringMap(map)); map.clear(); EXPECT_TRUE(obj->GetStringMapByRef(map)); EXPECT_EQ(3U, map.size()); CefTranslatorTest::StringMap::const_iterator it; it = map.find(TEST_STRING_KEY); EXPECT_TRUE(it != map.end() && it->second == TEST_STRING_VAL); it = map.find(TEST_STRING_KEY2); EXPECT_TRUE(it != map.end() && it->second == TEST_STRING_VAL2); it = map.find(TEST_STRING_KEY3); EXPECT_TRUE(it != map.end() && it->second == TEST_STRING_VAL3); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting string multimap types. TEST(TranslatorTest, StringMultimap) { CefRefPtr obj = CefTranslatorTest::Create(); CefTranslatorTest::StringMultimap map; map.insert(std::make_pair(TEST_STRING_KEY, TEST_STRING_VAL)); map.insert(std::make_pair(TEST_STRING_KEY2, TEST_STRING_VAL2)); map.insert(std::make_pair(TEST_STRING_KEY3, TEST_STRING_VAL3)); EXPECT_TRUE(obj->SetStringMultimap(map)); map.clear(); EXPECT_TRUE(obj->GetStringMultimapByRef(map)); EXPECT_EQ(3U, map.size()); CefTranslatorTest::StringMultimap::const_iterator it; it = map.find(TEST_STRING_KEY); EXPECT_TRUE(it != map.end() && it->second == TEST_STRING_VAL); it = map.find(TEST_STRING_KEY2); EXPECT_TRUE(it != map.end() && it->second == TEST_STRING_VAL2); it = map.find(TEST_STRING_KEY3); EXPECT_TRUE(it != map.end() && it->second == TEST_STRING_VAL3); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting struct types. TEST(TranslatorTest, Struct) { CefRefPtr obj = CefTranslatorTest::Create(); CefPoint point(TEST_X_VAL, TEST_Y_VAL); EXPECT_EQ(point, obj->GetPoint()); EXPECT_TRUE(obj->SetPoint(point)); CefPoint point2; obj->GetPointByRef(point2); EXPECT_EQ(point, point2); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting struct list types. TEST(TranslatorTest, StructList) { CefRefPtr obj = CefTranslatorTest::Create(); std::vector list; list.emplace_back(TEST_X_VAL, TEST_Y_VAL); list.emplace_back(TEST_X_VAL2, TEST_Y_VAL2); EXPECT_TRUE(obj->SetPointList(list)); list.clear(); EXPECT_TRUE(obj->GetPointListByRef(list)); EXPECT_EQ(2U, list.size()); EXPECT_EQ(CefPoint(TEST_X_VAL, TEST_Y_VAL), list[0]); EXPECT_EQ(CefPoint(TEST_X_VAL2, TEST_Y_VAL2), list[1]); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting library-side RefPtr types. TEST(TranslatorTest, RefPtrLibrary) { CefRefPtr obj = CefTranslatorTest::Create(); const int kTestVal = 12; CefRefPtr test_obj = CefTranslatorTestRefPtrLibrary::Create(kTestVal); EXPECT_EQ(kTestVal, test_obj->GetValue()); int retval = obj->SetRefPtrLibrary(test_obj); EXPECT_EQ(kTestVal, retval); EXPECT_EQ(kTestVal, test_obj->GetValue()); const int kTestVal2 = 30; CefRefPtr test_obj2 = obj->GetRefPtrLibrary(kTestVal2); EXPECT_EQ(kTestVal2, test_obj2->GetValue()); int retval2 = obj->SetRefPtrLibrary(test_obj2); EXPECT_EQ(kTestVal2, retval2); EXPECT_EQ(kTestVal2, test_obj2->GetValue()); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); EXPECT_TRUE(test_obj->HasOneRef()); EXPECT_TRUE(test_obj2->HasOneRef()); } // Test getting/setting inherited library-side RefPtr types. TEST(TranslatorTest, RefPtrLibraryInherit) { CefRefPtr obj = CefTranslatorTest::Create(); const int kTestVal = 12; const int kTestVal2 = 40; CefRefPtr test_obj = CefTranslatorTestRefPtrLibraryChild::Create(kTestVal, kTestVal2); EXPECT_EQ(kTestVal, test_obj->GetValue()); EXPECT_EQ(kTestVal2, test_obj->GetOtherValue()); int retval = obj->SetRefPtrLibrary(test_obj); EXPECT_EQ(kTestVal, retval); EXPECT_EQ(kTestVal, test_obj->GetValue()); EXPECT_EQ(kTestVal2, test_obj->GetOtherValue()); EXPECT_EQ(kTestVal, obj->SetChildRefPtrLibrary(test_obj)); EXPECT_EQ(kTestVal, obj->SetChildRefPtrLibraryAndReturnParent(test_obj)->GetValue()); const int kTestVal3 = 100; CefRefPtr test_obj2 = CefTranslatorTestRefPtrLibraryChildChild::Create(kTestVal, kTestVal2, kTestVal3); EXPECT_EQ(kTestVal, test_obj2->GetValue()); EXPECT_EQ(kTestVal2, test_obj2->GetOtherValue()); EXPECT_EQ(kTestVal3, test_obj2->GetOtherOtherValue()); int retval2 = obj->SetRefPtrLibrary(test_obj2); EXPECT_EQ(kTestVal, retval2); EXPECT_EQ(kTestVal, test_obj2->GetValue()); EXPECT_EQ(kTestVal2, test_obj2->GetOtherValue()); EXPECT_EQ(kTestVal3, test_obj2->GetOtherOtherValue()); EXPECT_EQ(kTestVal, obj->SetChildRefPtrLibrary(test_obj2)); EXPECT_EQ(kTestVal, obj->SetChildRefPtrLibraryAndReturnParent(test_obj2)->GetValue()); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); EXPECT_TRUE(test_obj->HasOneRef()); EXPECT_TRUE(test_obj2->HasOneRef()); } // Test getting/setting library-side RefPtr list types. TEST(TranslatorTest, RefPtrLibraryList) { CefRefPtr obj = CefTranslatorTest::Create(); const int kVal1 = 34; const int kVal2 = 10; CefRefPtr val1 = CefTranslatorTestRefPtrLibrary::Create(kVal1); CefRefPtr val2 = CefTranslatorTestRefPtrLibraryChild::Create(kVal2, 0); std::vector> list; list.push_back(val1); list.push_back(val2); EXPECT_TRUE(obj->SetRefPtrLibraryList(list, kVal1, kVal2)); list.clear(); EXPECT_TRUE(obj->GetRefPtrLibraryListByRef(list, kVal1, kVal2)); EXPECT_EQ(2U, list.size()); EXPECT_EQ(kVal1, list[0]->GetValue()); EXPECT_EQ(kVal2, list[1]->GetValue()); list.clear(); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); EXPECT_TRUE(val1->HasOneRef()); EXPECT_TRUE(val2->HasOneRef()); } namespace { class TranslatorTestRefPtrClient : public CefTranslatorTestRefPtrClient { public: explicit TranslatorTestRefPtrClient(const int val) : val_(val) {} int GetValue() override { return val_; } private: const int val_; IMPLEMENT_REFCOUNTING(TranslatorTestRefPtrClient); DISALLOW_COPY_AND_ASSIGN(TranslatorTestRefPtrClient); }; class TranslatorTestRefPtrClientChild : public CefTranslatorTestRefPtrClientChild { public: TranslatorTestRefPtrClientChild(const int val, const int other_val) : val_(val), other_val_(other_val) {} int GetValue() override { return val_; } int GetOtherValue() override { return other_val_; } private: const int val_; const int other_val_; IMPLEMENT_REFCOUNTING(TranslatorTestRefPtrClientChild); DISALLOW_COPY_AND_ASSIGN(TranslatorTestRefPtrClientChild); }; } // namespace // Test getting/setting client-side RefPtr types. TEST(TranslatorTest, RefPtrClient) { CefRefPtr obj = CefTranslatorTest::Create(); const int kTestVal = 12; CefRefPtr test_obj = new TranslatorTestRefPtrClient(kTestVal); EXPECT_EQ(kTestVal, test_obj->GetValue()); EXPECT_EQ(kTestVal, obj->SetRefPtrClient(test_obj.get())); CefRefPtr handler = obj->SetRefPtrClientAndReturn(test_obj.get()); EXPECT_EQ(test_obj.get(), handler.get()); EXPECT_EQ(kTestVal, handler->GetValue()); handler = nullptr; // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); EXPECT_TRUE(test_obj->HasOneRef()); } // Test getting/setting inherited client-side RefPtr types. TEST(TranslatorTest, RefPtrClientInherit) { CefRefPtr obj = CefTranslatorTest::Create(); const int kTestVal = 12; const int kTestVal2 = 86; CefRefPtr test_obj = new TranslatorTestRefPtrClientChild(kTestVal, kTestVal2); EXPECT_EQ(kTestVal, test_obj->GetValue()); EXPECT_EQ(kTestVal2, test_obj->GetOtherValue()); int retval = obj->SetRefPtrClient(test_obj); EXPECT_EQ(kTestVal, retval); EXPECT_EQ(kTestVal, test_obj->GetValue()); EXPECT_EQ(kTestVal2, test_obj->GetOtherValue()); EXPECT_EQ(kTestVal, obj->SetChildRefPtrClient(test_obj)); CefRefPtr handler = obj->SetChildRefPtrClientAndReturnParent(test_obj); EXPECT_EQ(kTestVal, handler->GetValue()); EXPECT_EQ(test_obj.get(), handler.get()); handler = nullptr; // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); EXPECT_TRUE(test_obj->HasOneRef()); } // Test getting/setting client-side RefPtr list types. TEST(TranslatorTest, RefPtrClientList) { CefRefPtr obj = CefTranslatorTest::Create(); const int kVal1 = 34; const int kVal2 = 10; CefRefPtr val1 = new TranslatorTestRefPtrClient(kVal1); CefRefPtr val2 = new TranslatorTestRefPtrClientChild(kVal2, 0); std::vector> list; list.push_back(val1); list.push_back(val2); EXPECT_TRUE(obj->SetRefPtrClientList(list, kVal1, kVal2)); list.clear(); EXPECT_TRUE(obj->GetRefPtrClientListByRef(list, val1, val2)); EXPECT_EQ(2U, list.size()); EXPECT_EQ(kVal1, list[0]->GetValue()); EXPECT_EQ(val1.get(), list[0].get()); EXPECT_EQ(kVal2, list[1]->GetValue()); EXPECT_EQ(val2.get(), list[1].get()); list.clear(); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); EXPECT_TRUE(val1->HasOneRef()); EXPECT_TRUE(val2->HasOneRef()); } // Test getting/setting library-side OwnPtr types. TEST(TranslatorTest, OwnPtrLibrary) { CefRefPtr obj = CefTranslatorTest::Create(); const int kTestVal = 12; CefOwnPtr test_obj = CefTranslatorTestScopedLibrary::Create(kTestVal); EXPECT_TRUE(test_obj.get()); EXPECT_EQ(kTestVal, test_obj->GetValue()); int retval = obj->SetOwnPtrLibrary(std::move(test_obj)); EXPECT_EQ(kTestVal, retval); EXPECT_FALSE(test_obj.get()); const int kTestVal2 = 30; CefOwnPtr test_obj2 = obj->GetOwnPtrLibrary(kTestVal2); EXPECT_TRUE(test_obj2.get()); EXPECT_EQ(kTestVal2, test_obj2->GetValue()); int retval2 = obj->SetOwnPtrLibrary(std::move(test_obj2)); EXPECT_EQ(kTestVal2, retval2); EXPECT_FALSE(test_obj2.get()); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting inherited library-side OwnPtr types. TEST(TranslatorTest, OwnPtrLibraryInherit) { CefRefPtr obj = CefTranslatorTest::Create(); const int kTestVal = 12; const int kTestVal2 = 40; CefOwnPtr test_obj = CefTranslatorTestScopedLibraryChild::Create(kTestVal, kTestVal2); EXPECT_TRUE(test_obj.get()); EXPECT_EQ(kTestVal, test_obj->GetValue()); EXPECT_EQ(kTestVal2, test_obj->GetOtherValue()); int retval = obj->SetOwnPtrLibrary(std::move(test_obj)); EXPECT_EQ(kTestVal, retval); EXPECT_FALSE(test_obj.get()); test_obj = CefTranslatorTestScopedLibraryChild::Create(kTestVal, kTestVal2); EXPECT_TRUE(test_obj.get()); EXPECT_EQ(kTestVal, obj->SetChildOwnPtrLibrary(std::move(test_obj))); EXPECT_FALSE(test_obj.get()); test_obj = CefTranslatorTestScopedLibraryChild::Create(kTestVal, kTestVal2); EXPECT_TRUE(test_obj.get()); CefOwnPtr test_obj_parent = obj->SetChildOwnPtrLibraryAndReturnParent(std::move(test_obj)); EXPECT_FALSE(test_obj.get()); EXPECT_TRUE(test_obj_parent.get()); EXPECT_EQ(kTestVal, test_obj_parent->GetValue()); test_obj_parent.reset(nullptr); const int kTestVal3 = 100; CefOwnPtr test_obj2 = CefTranslatorTestScopedLibraryChildChild::Create(kTestVal, kTestVal2, kTestVal3); EXPECT_EQ(kTestVal, test_obj2->GetValue()); EXPECT_EQ(kTestVal2, test_obj2->GetOtherValue()); EXPECT_EQ(kTestVal3, test_obj2->GetOtherOtherValue()); int retval2 = obj->SetOwnPtrLibrary(std::move(test_obj2)); EXPECT_EQ(kTestVal, retval2); EXPECT_FALSE(test_obj2.get()); test_obj2 = CefTranslatorTestScopedLibraryChildChild::Create( kTestVal, kTestVal2, kTestVal3); EXPECT_EQ(kTestVal, obj->SetChildOwnPtrLibrary(std::move(test_obj2))); EXPECT_FALSE(test_obj2.get()); test_obj2 = CefTranslatorTestScopedLibraryChildChild::Create( kTestVal, kTestVal2, kTestVal3); test_obj_parent = obj->SetChildOwnPtrLibraryAndReturnParent(std::move(test_obj2)); EXPECT_FALSE(test_obj2.get()); EXPECT_TRUE(test_obj_parent.get()); EXPECT_EQ(kTestVal, test_obj_parent->GetValue()); test_obj_parent.reset(nullptr); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } namespace { class TranslatorTestScopedClient : public CefTranslatorTestScopedClient { public: TranslatorTestScopedClient(const int val, TrackCallback* got_delete) : val_(val), got_delete_(got_delete) {} ~TranslatorTestScopedClient() override { got_delete_->yes(); } int GetValue() override { return val_; } private: const int val_; TrackCallback* got_delete_; DISALLOW_COPY_AND_ASSIGN(TranslatorTestScopedClient); }; class TranslatorTestScopedClientChild : public CefTranslatorTestScopedClientChild { public: TranslatorTestScopedClientChild(const int val, const int other_val, TrackCallback* got_delete) : val_(val), other_val_(other_val), got_delete_(got_delete) {} ~TranslatorTestScopedClientChild() override { got_delete_->yes(); } int GetValue() override { return val_; } int GetOtherValue() override { return other_val_; } private: const int val_; const int other_val_; TrackCallback* got_delete_; DISALLOW_COPY_AND_ASSIGN(TranslatorTestScopedClientChild); }; } // namespace // Test getting/setting client-side OwnPtr types. TEST(TranslatorTest, OwnPtrClient) { CefRefPtr obj = CefTranslatorTest::Create(); const int kTestVal = 12; TrackCallback got_delete; CefOwnPtr test_obj( new TranslatorTestScopedClient(kTestVal, &got_delete)); EXPECT_EQ(kTestVal, test_obj->GetValue()); EXPECT_EQ(kTestVal, obj->SetOwnPtrClient(std::move(test_obj))); EXPECT_FALSE(test_obj.get()); EXPECT_TRUE(got_delete); got_delete.reset(); test_obj = std::make_unique(kTestVal, &got_delete); CefOwnPtr handler = obj->SetOwnPtrClientAndReturn(std::move(test_obj)); EXPECT_FALSE(test_obj.get()); EXPECT_TRUE(handler.get()); EXPECT_FALSE(got_delete); EXPECT_EQ(kTestVal, handler->GetValue()); handler.reset(nullptr); EXPECT_TRUE(got_delete); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting inherited client-side OwnPtr types. TEST(TranslatorTest, OwnPtrClientInherit) { CefRefPtr obj = CefTranslatorTest::Create(); const int kTestVal = 12; const int kTestVal2 = 86; TrackCallback got_delete; CefOwnPtr test_obj( new TranslatorTestScopedClientChild(kTestVal, kTestVal2, &got_delete)); EXPECT_EQ(kTestVal, test_obj->GetValue()); EXPECT_EQ(kTestVal2, test_obj->GetOtherValue()); EXPECT_EQ(kTestVal, obj->SetOwnPtrClient(std::move(test_obj))); EXPECT_FALSE(test_obj.get()); EXPECT_TRUE(got_delete); got_delete.reset(); test_obj = std::make_unique( kTestVal, kTestVal2, &got_delete); EXPECT_EQ(kTestVal, obj->SetChildOwnPtrClient(std::move(test_obj))); EXPECT_FALSE(test_obj.get()); EXPECT_TRUE(got_delete); got_delete.reset(); test_obj = std::make_unique( kTestVal, kTestVal2, &got_delete); CefOwnPtr handler( obj->SetChildOwnPtrClientAndReturnParent(std::move(test_obj))); EXPECT_EQ(kTestVal, handler->GetValue()); EXPECT_FALSE(test_obj.get()); EXPECT_FALSE(got_delete); handler.reset(nullptr); EXPECT_TRUE(got_delete); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting library-side RawPtr types. TEST(TranslatorTest, RawPtrLibrary) { CefRefPtr obj = CefTranslatorTest::Create(); const int kTestVal = 12; CefOwnPtr test_obj( CefTranslatorTestScopedLibrary::Create(kTestVal)); EXPECT_EQ(kTestVal, test_obj->GetValue()); int retval = obj->SetRawPtrLibrary(test_obj.get()); EXPECT_EQ(kTestVal, retval); EXPECT_EQ(kTestVal, test_obj->GetValue()); const int kTestVal2 = 30; CefOwnPtr test_obj2( obj->GetOwnPtrLibrary(kTestVal2)); EXPECT_EQ(kTestVal2, test_obj2->GetValue()); int retval2 = obj->SetRawPtrLibrary(test_obj2.get()); EXPECT_EQ(kTestVal2, retval2); EXPECT_EQ(kTestVal2, test_obj2->GetValue()); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting inherited library-side RawPtr types. TEST(TranslatorTest, RawPtrLibraryInherit) { CefRefPtr obj = CefTranslatorTest::Create(); const int kTestVal = 12; const int kTestVal2 = 40; CefOwnPtr test_obj( CefTranslatorTestScopedLibraryChild::Create(kTestVal, kTestVal2)); EXPECT_EQ(kTestVal, test_obj->GetValue()); EXPECT_EQ(kTestVal2, test_obj->GetOtherValue()); int retval = obj->SetRawPtrLibrary(test_obj.get()); EXPECT_EQ(kTestVal, retval); EXPECT_EQ(kTestVal, test_obj->GetValue()); EXPECT_EQ(kTestVal2, test_obj->GetOtherValue()); EXPECT_EQ(kTestVal, obj->SetChildRawPtrLibrary(test_obj.get())); const int kTestVal3 = 100; CefOwnPtr test_obj2( CefTranslatorTestScopedLibraryChildChild::Create(kTestVal, kTestVal2, kTestVal3)); EXPECT_EQ(kTestVal, test_obj2->GetValue()); EXPECT_EQ(kTestVal2, test_obj2->GetOtherValue()); EXPECT_EQ(kTestVal3, test_obj2->GetOtherOtherValue()); int retval2 = obj->SetRawPtrLibrary(test_obj2.get()); EXPECT_EQ(kTestVal, retval2); EXPECT_EQ(kTestVal, test_obj2->GetValue()); EXPECT_EQ(kTestVal2, test_obj2->GetOtherValue()); EXPECT_EQ(kTestVal3, test_obj2->GetOtherOtherValue()); EXPECT_EQ(kTestVal, obj->SetChildRawPtrLibrary(test_obj2.get())); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting library-side RawPtr list types. TEST(TranslatorTest, RawPtrLibraryList) { CefRefPtr obj = CefTranslatorTest::Create(); const int kVal1 = 34; const int kVal2 = 10; CefOwnPtr val1( CefTranslatorTestScopedLibrary::Create(kVal1)); CefOwnPtr val2( CefTranslatorTestScopedLibraryChild::Create(kVal2, 0)); std::vector> list; list.push_back(val1.get()); list.push_back(val2.get()); EXPECT_TRUE(obj->SetRawPtrLibraryList(list, kVal1, kVal2)); list.clear(); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting client-side RawPtr types. TEST(TranslatorTest, RawPtrClient) { CefRefPtr obj = CefTranslatorTest::Create(); const int kTestVal = 12; TrackCallback got_delete; CefOwnPtr test_obj( new TranslatorTestScopedClient(kTestVal, &got_delete)); EXPECT_EQ(kTestVal, test_obj->GetValue()); EXPECT_EQ(kTestVal, obj->SetRawPtrClient(test_obj.get())); EXPECT_FALSE(got_delete); test_obj.reset(nullptr); EXPECT_TRUE(got_delete); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting inherited client-side RawPtr types. TEST(TranslatorTest, RawPtrClientInherit) { CefRefPtr obj = CefTranslatorTest::Create(); const int kTestVal = 12; const int kTestVal2 = 86; TrackCallback got_delete; CefOwnPtr test_obj( new TranslatorTestScopedClientChild(kTestVal, kTestVal2, &got_delete)); EXPECT_EQ(kTestVal, test_obj->GetValue()); EXPECT_EQ(kTestVal2, test_obj->GetOtherValue()); int retval = obj->SetRawPtrClient(test_obj.get()); EXPECT_EQ(kTestVal, retval); EXPECT_EQ(kTestVal, test_obj->GetValue()); EXPECT_EQ(kTestVal2, test_obj->GetOtherValue()); EXPECT_FALSE(got_delete); EXPECT_EQ(kTestVal, obj->SetChildRawPtrClient(test_obj.get())); EXPECT_FALSE(got_delete); test_obj.reset(nullptr); EXPECT_TRUE(got_delete); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); } // Test getting/setting client-side RawPtr list types. TEST(TranslatorTest, RawPtrClientList) { CefRefPtr obj = CefTranslatorTest::Create(); const int kVal1 = 34; const int kVal2 = 10; TrackCallback got_delete1, got_delete2; CefOwnPtr val1( new TranslatorTestScopedClient(kVal1, &got_delete1)); CefOwnPtr val2( new TranslatorTestScopedClientChild(kVal2, 0, &got_delete2)); std::vector> list; list.push_back(val1.get()); list.push_back(val2.get()); EXPECT_TRUE(obj->SetRawPtrClientList(list, kVal1, kVal2)); list.clear(); EXPECT_FALSE(got_delete1); val1.reset(nullptr); EXPECT_TRUE(got_delete1); EXPECT_FALSE(got_delete2); val2.reset(nullptr); EXPECT_TRUE(got_delete2); // Only one reference to the object should exist. EXPECT_TRUE(obj->HasOneRef()); }