| // 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/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<CefTranslatorTest> 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| std::vector<int> 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<CefTranslatorTest> 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| std::vector<CefString> 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<CefTranslatorTest> 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<CefTranslatorTest> 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<CefTranslatorTest> 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| std::vector<CefPoint> list; |
| list.push_back(CefPoint(TEST_X_VAL, TEST_Y_VAL)); |
| list.push_back(CefPoint(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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kTestVal = 12; |
| CefRefPtr<CefTranslatorTestRefPtrLibrary> 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<CefTranslatorTestRefPtrLibrary> 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kTestVal = 12; |
| const int kTestVal2 = 40; |
| CefRefPtr<CefTranslatorTestRefPtrLibraryChild> 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<CefTranslatorTestRefPtrLibraryChildChild> 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kVal1 = 34; |
| const int kVal2 = 10; |
| |
| CefRefPtr<CefTranslatorTestRefPtrLibrary> val1 = |
| CefTranslatorTestRefPtrLibrary::Create(kVal1); |
| CefRefPtr<CefTranslatorTestRefPtrLibrary> val2 = |
| CefTranslatorTestRefPtrLibraryChild::Create(kVal2, 0); |
| |
| std::vector<CefRefPtr<CefTranslatorTestRefPtrLibrary>> 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) {} |
| |
| virtual 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) {} |
| |
| virtual int GetValue() override { return val_; } |
| |
| virtual 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kTestVal = 12; |
| |
| CefRefPtr<TranslatorTestRefPtrClient> test_obj = |
| new TranslatorTestRefPtrClient(kTestVal); |
| EXPECT_EQ(kTestVal, test_obj->GetValue()); |
| EXPECT_EQ(kTestVal, obj->SetRefPtrClient(test_obj.get())); |
| CefRefPtr<CefTranslatorTestRefPtrClient> 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kTestVal = 12; |
| const int kTestVal2 = 86; |
| |
| CefRefPtr<TranslatorTestRefPtrClientChild> 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<CefTranslatorTestRefPtrClient> 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kVal1 = 34; |
| const int kVal2 = 10; |
| |
| CefRefPtr<CefTranslatorTestRefPtrClient> val1 = |
| new TranslatorTestRefPtrClient(kVal1); |
| CefRefPtr<CefTranslatorTestRefPtrClient> val2 = |
| new TranslatorTestRefPtrClientChild(kVal2, 0); |
| |
| std::vector<CefRefPtr<CefTranslatorTestRefPtrClient>> 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kTestVal = 12; |
| CefOwnPtr<CefTranslatorTestScopedLibrary> test_obj = |
| CefTranslatorTestScopedLibrary::Create(kTestVal); |
| EXPECT_TRUE(test_obj.get()); |
| EXPECT_EQ(kTestVal, test_obj->GetValue()); |
| int retval = obj->SetOwnPtrLibrary(test_obj.Pass()); |
| EXPECT_EQ(kTestVal, retval); |
| EXPECT_FALSE(test_obj.get()); |
| |
| const int kTestVal2 = 30; |
| CefOwnPtr<CefTranslatorTestScopedLibrary> test_obj2 = |
| obj->GetOwnPtrLibrary(kTestVal2); |
| EXPECT_TRUE(test_obj2.get()); |
| EXPECT_EQ(kTestVal2, test_obj2->GetValue()); |
| int retval2 = obj->SetOwnPtrLibrary(test_obj2.Pass()); |
| 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kTestVal = 12; |
| const int kTestVal2 = 40; |
| CefOwnPtr<CefTranslatorTestScopedLibraryChild> 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(test_obj.PassAs<CefTranslatorTestScopedLibrary>()); |
| 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(test_obj.Pass())); |
| EXPECT_FALSE(test_obj.get()); |
| |
| test_obj = CefTranslatorTestScopedLibraryChild::Create(kTestVal, kTestVal2); |
| EXPECT_TRUE(test_obj.get()); |
| CefOwnPtr<CefTranslatorTestScopedLibrary> test_obj_parent = |
| obj->SetChildOwnPtrLibraryAndReturnParent(test_obj.Pass()); |
| 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<CefTranslatorTestScopedLibraryChildChild> 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(test_obj2.PassAs<CefTranslatorTestScopedLibrary>()); |
| EXPECT_EQ(kTestVal, retval2); |
| EXPECT_FALSE(test_obj2.get()); |
| |
| test_obj2 = CefTranslatorTestScopedLibraryChildChild::Create( |
| kTestVal, kTestVal2, kTestVal3); |
| EXPECT_EQ(kTestVal, |
| obj->SetChildOwnPtrLibrary( |
| test_obj2.PassAs<CefTranslatorTestScopedLibraryChild>())); |
| EXPECT_FALSE(test_obj2.get()); |
| |
| test_obj2 = CefTranslatorTestScopedLibraryChildChild::Create( |
| kTestVal, kTestVal2, kTestVal3); |
| test_obj_parent = obj->SetChildOwnPtrLibraryAndReturnParent( |
| test_obj2.PassAs<CefTranslatorTestScopedLibraryChild>()); |
| 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(); } |
| |
| virtual 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(); } |
| |
| virtual int GetValue() override { return val_; } |
| |
| virtual 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kTestVal = 12; |
| TrackCallback got_delete; |
| |
| CefOwnPtr<CefTranslatorTestScopedClient> test_obj( |
| new TranslatorTestScopedClient(kTestVal, &got_delete)); |
| EXPECT_EQ(kTestVal, test_obj->GetValue()); |
| EXPECT_EQ(kTestVal, obj->SetOwnPtrClient(test_obj.Pass())); |
| EXPECT_FALSE(test_obj.get()); |
| EXPECT_TRUE(got_delete); |
| |
| got_delete.reset(); |
| test_obj.reset(new TranslatorTestScopedClient(kTestVal, &got_delete)); |
| CefOwnPtr<CefTranslatorTestScopedClient> handler = |
| obj->SetOwnPtrClientAndReturn(test_obj.Pass()); |
| 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kTestVal = 12; |
| const int kTestVal2 = 86; |
| TrackCallback got_delete; |
| |
| CefOwnPtr<CefTranslatorTestScopedClientChild> 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( |
| test_obj.PassAs<CefTranslatorTestScopedClient>())); |
| EXPECT_FALSE(test_obj.get()); |
| EXPECT_TRUE(got_delete); |
| |
| got_delete.reset(); |
| test_obj.reset( |
| new TranslatorTestScopedClientChild(kTestVal, kTestVal2, &got_delete)); |
| EXPECT_EQ(kTestVal, obj->SetChildOwnPtrClient(test_obj.Pass())); |
| EXPECT_FALSE(test_obj.get()); |
| EXPECT_TRUE(got_delete); |
| |
| got_delete.reset(); |
| test_obj.reset( |
| new TranslatorTestScopedClientChild(kTestVal, kTestVal2, &got_delete)); |
| CefOwnPtr<CefTranslatorTestScopedClient> handler( |
| obj->SetChildOwnPtrClientAndReturnParent(test_obj.Pass())); |
| 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kTestVal = 12; |
| CefOwnPtr<CefTranslatorTestScopedLibrary> 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<CefTranslatorTestScopedLibrary> 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kTestVal = 12; |
| const int kTestVal2 = 40; |
| CefOwnPtr<CefTranslatorTestScopedLibraryChild> 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<CefTranslatorTestScopedLibraryChildChild> 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kVal1 = 34; |
| const int kVal2 = 10; |
| |
| CefOwnPtr<CefTranslatorTestScopedLibrary> val1( |
| CefTranslatorTestScopedLibrary::Create(kVal1)); |
| CefOwnPtr<CefTranslatorTestScopedLibraryChild> val2( |
| CefTranslatorTestScopedLibraryChild::Create(kVal2, 0)); |
| |
| std::vector<CefRawPtr<CefTranslatorTestScopedLibrary>> 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kTestVal = 12; |
| TrackCallback got_delete; |
| |
| CefOwnPtr<TranslatorTestScopedClient> 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kTestVal = 12; |
| const int kTestVal2 = 86; |
| TrackCallback got_delete; |
| |
| CefOwnPtr<TranslatorTestScopedClientChild> 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<CefTranslatorTest> obj = CefTranslatorTest::Create(); |
| |
| const int kVal1 = 34; |
| const int kVal2 = 10; |
| TrackCallback got_delete1, got_delete2; |
| |
| CefOwnPtr<CefTranslatorTestScopedClient> val1( |
| new TranslatorTestScopedClient(kVal1, &got_delete1)); |
| CefOwnPtr<CefTranslatorTestScopedClient> val2( |
| new TranslatorTestScopedClientChild(kVal2, 0, &got_delete2)); |
| |
| std::vector<CefRawPtr<CefTranslatorTestScopedClient>> 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()); |
| } |