Index: chrome/browser/sync/util/weak_handle_unittest.cc |
diff --git a/chrome/browser/sync/util/weak_handle_unittest.cc b/chrome/browser/sync/util/weak_handle_unittest.cc |
deleted file mode 100644 |
index 4a56f9e18f15c9dba5c127b23698faaa4979485c..0000000000000000000000000000000000000000 |
--- a/chrome/browser/sync/util/weak_handle_unittest.cc |
+++ /dev/null |
@@ -1,326 +0,0 @@ |
-// Copyright (c) 2011 The Chromium 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 "chrome/browser/sync/util/weak_handle.h" |
- |
-#include "base/bind.h" |
-#include "base/compiler_specific.h" |
-#include "base/location.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/message_loop.h" |
-#include "base/threading/thread.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace browser_sync { |
- |
-using ::testing::_; |
-using ::testing::SaveArg; |
-using ::testing::StrictMock; |
- |
-class Base { |
- public: |
- Base() : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {} |
- |
- WeakHandle<Base> AsWeakHandle() { |
- return MakeWeakHandle(weak_ptr_factory_.GetWeakPtr()); |
- } |
- |
- void Kill() { |
- weak_ptr_factory_.InvalidateWeakPtrs(); |
- } |
- |
- MOCK_METHOD0(Test, void()); |
- MOCK_METHOD1(Test1, void(const int&)); |
- MOCK_METHOD2(Test2, void(const int&, Base*)); |
- MOCK_METHOD3(Test3, void(const int&, Base*, float)); |
- MOCK_METHOD4(Test4, void(const int&, Base*, float, const char*)); |
- |
- MOCK_METHOD1(TestWithSelf, void(const WeakHandle<Base>&)); |
- |
- private: |
- base::WeakPtrFactory<Base> weak_ptr_factory_; |
-}; |
- |
-class Derived : public Base, public base::SupportsWeakPtr<Derived> {}; |
- |
-class WeakHandleTest : public ::testing::Test { |
- protected: |
- virtual void TearDown() { |
- // Process any last-minute posted tasks. |
- PumpLoop(); |
- } |
- |
- void PumpLoop() { |
- message_loop_.RunAllPending(); |
- } |
- |
- static void CallTestFromOtherThread(tracked_objects::Location from_here, |
- const WeakHandle<Base>& h) { |
- base::Thread t("Test thread"); |
- ASSERT_TRUE(t.Start()); |
- t.message_loop()->PostTask( |
- from_here, base::Bind(&WeakHandleTest::CallTest, from_here, h)); |
- } |
- |
- private: |
- static void CallTest(tracked_objects::Location from_here, |
- const WeakHandle<Base>& h) { |
- h.Call(from_here, &Base::Test); |
- } |
- |
- MessageLoop message_loop_; |
-}; |
- |
-TEST_F(WeakHandleTest, Uninitialized) { |
- // Default. |
- WeakHandle<int> h; |
- EXPECT_FALSE(h.IsInitialized()); |
- // Copy. |
- { |
- WeakHandle<int> h2(h); |
- EXPECT_FALSE(h2.IsInitialized()); |
- } |
- // Assign. |
- { |
- WeakHandle<int> h2; |
- h2 = h; |
- EXPECT_FALSE(h.IsInitialized()); |
- } |
-} |
- |
-TEST_F(WeakHandleTest, InitializedAfterDestroy) { |
- WeakHandle<Base> h; |
- { |
- StrictMock<Base> b; |
- h = b.AsWeakHandle(); |
- } |
- EXPECT_TRUE(h.IsInitialized()); |
- EXPECT_FALSE(h.Get()); |
-} |
- |
-TEST_F(WeakHandleTest, InitializedAfterInvalidate) { |
- StrictMock<Base> b; |
- WeakHandle<Base> h = b.AsWeakHandle(); |
- b.Kill(); |
- EXPECT_TRUE(h.IsInitialized()); |
- EXPECT_FALSE(h.Get()); |
-} |
- |
-TEST_F(WeakHandleTest, Call) { |
- StrictMock<Base> b; |
- const char test_str[] = "test"; |
- EXPECT_CALL(b, Test()); |
- EXPECT_CALL(b, Test1(5)); |
- EXPECT_CALL(b, Test2(5, &b)); |
- EXPECT_CALL(b, Test3(5, &b, 5)); |
- EXPECT_CALL(b, Test4(5, &b, 5, test_str)); |
- |
- WeakHandle<Base> h = b.AsWeakHandle(); |
- EXPECT_TRUE(h.IsInitialized()); |
- |
- // Should run. |
- h.Call(FROM_HERE, &Base::Test); |
- h.Call(FROM_HERE, &Base::Test1, 5); |
- h.Call(FROM_HERE, &Base::Test2, 5, &b); |
- h.Call(FROM_HERE, &Base::Test3, 5, &b, 5); |
- h.Call(FROM_HERE, &Base::Test4, 5, &b, 5, test_str); |
- PumpLoop(); |
-} |
- |
-TEST_F(WeakHandleTest, CallAfterDestroy) { |
- { |
- StrictMock<Base> b; |
- EXPECT_CALL(b, Test()).Times(0); |
- |
- WeakHandle<Base> h = b.AsWeakHandle(); |
- EXPECT_TRUE(h.IsInitialized()); |
- |
- // Should not run. |
- h.Call(FROM_HERE, &Base::Test); |
- } |
- PumpLoop(); |
-} |
- |
-TEST_F(WeakHandleTest, CallAfterInvalidate) { |
- StrictMock<Base> b; |
- EXPECT_CALL(b, Test()).Times(0); |
- |
- WeakHandle<Base> h = b.AsWeakHandle(); |
- EXPECT_TRUE(h.IsInitialized()); |
- |
- // Should not run. |
- h.Call(FROM_HERE, &Base::Test); |
- |
- b.Kill(); |
- PumpLoop(); |
-} |
- |
-TEST_F(WeakHandleTest, CallThreaded) { |
- StrictMock<Base> b; |
- EXPECT_CALL(b, Test()); |
- |
- WeakHandle<Base> h = b.AsWeakHandle(); |
- // Should run. |
- CallTestFromOtherThread(FROM_HERE, h); |
- PumpLoop(); |
-} |
- |
-TEST_F(WeakHandleTest, CallAfterDestroyThreaded) { |
- WeakHandle<Base> h; |
- { |
- StrictMock<Base> b; |
- EXPECT_CALL(b, Test()).Times(0); |
- h = b.AsWeakHandle(); |
- } |
- |
- // Should not run. |
- CallTestFromOtherThread(FROM_HERE, h); |
- PumpLoop(); |
-} |
- |
-TEST_F(WeakHandleTest, CallAfterInvalidateThreaded) { |
- StrictMock<Base> b; |
- EXPECT_CALL(b, Test()).Times(0); |
- |
- WeakHandle<Base> h = b.AsWeakHandle(); |
- b.Kill(); |
- // Should not run. |
- CallTestFromOtherThread(FROM_HERE, h); |
- PumpLoop(); |
-} |
- |
-TEST_F(WeakHandleTest, DeleteOnOtherThread) { |
- StrictMock<Base> b; |
- EXPECT_CALL(b, Test()).Times(0); |
- |
- WeakHandle<Base>* h = new WeakHandle<Base>(b.AsWeakHandle()); |
- |
- { |
- base::Thread t("Test thread"); |
- ASSERT_TRUE(t.Start()); |
- t.message_loop()->DeleteSoon(FROM_HERE, h); |
- } |
- |
- PumpLoop(); |
-} |
- |
-void CallTestWithSelf(const WeakHandle<Base>& b1) { |
- StrictMock<Base> b2; |
- b1.Call(FROM_HERE, &Base::TestWithSelf, b2.AsWeakHandle()); |
-} |
- |
-TEST_F(WeakHandleTest, WithDestroyedThread) { |
- StrictMock<Base> b1; |
- WeakHandle<Base> b2; |
- EXPECT_CALL(b1, TestWithSelf(_)).WillOnce(SaveArg<0>(&b2)); |
- |
- { |
- base::Thread t("Test thread"); |
- ASSERT_TRUE(t.Start()); |
- t.message_loop()->PostTask(FROM_HERE, |
- base::Bind(&CallTestWithSelf, |
- b1.AsWeakHandle())); |
- } |
- |
- // Calls b1.TestWithSelf(). |
- PumpLoop(); |
- |
- // Shouldn't do anything, since the thread is gone. |
- b2.Call(FROM_HERE, &Base::Test); |
- |
- // |b2| shouldn't leak when it's destroyed, even if the original |
- // thread is gone. |
-} |
- |
-TEST_F(WeakHandleTest, InitializedAcrossCopyAssign) { |
- StrictMock<Base> b; |
- EXPECT_CALL(b, Test()).Times(3); |
- |
- EXPECT_TRUE(b.AsWeakHandle().IsInitialized()); |
- b.AsWeakHandle().Call(FROM_HERE, &Base::Test); |
- |
- { |
- WeakHandle<Base> h(b.AsWeakHandle()); |
- EXPECT_TRUE(h.IsInitialized()); |
- h.Call(FROM_HERE, &Base::Test); |
- h.Reset(); |
- EXPECT_FALSE(h.IsInitialized()); |
- } |
- |
- { |
- WeakHandle<Base> h; |
- h = b.AsWeakHandle(); |
- EXPECT_TRUE(h.IsInitialized()); |
- h.Call(FROM_HERE, &Base::Test); |
- h.Reset(); |
- EXPECT_FALSE(h.IsInitialized()); |
- } |
- |
- PumpLoop(); |
-} |
- |
-TEST_F(WeakHandleTest, TypeConversionConstructor) { |
- StrictMock<Derived> d; |
- EXPECT_CALL(d, Test()).Times(2); |
- |
- const WeakHandle<Derived> weak_handle = MakeWeakHandle(d.AsWeakPtr()); |
- |
- // Should trigger type conversion constructor. |
- const WeakHandle<Base> base_weak_handle(weak_handle); |
- // Should trigger regular copy constructor. |
- const WeakHandle<Derived> derived_weak_handle(weak_handle); |
- |
- EXPECT_TRUE(base_weak_handle.IsInitialized()); |
- base_weak_handle.Call(FROM_HERE, &Base::Test); |
- |
- EXPECT_TRUE(derived_weak_handle.IsInitialized()); |
- // Copy constructor shouldn't construct a new |core_|. |
- EXPECT_EQ(weak_handle.core_.get(), derived_weak_handle.core_.get()); |
- derived_weak_handle.Call(FROM_HERE, &Base::Test); |
- |
- PumpLoop(); |
-} |
- |
-TEST_F(WeakHandleTest, TypeConversionConstructorMakeWeakHandle) { |
- const base::WeakPtr<Derived> weak_ptr; |
- |
- // Should trigger type conversion constructor after MakeWeakHandle. |
- WeakHandle<Base> base_weak_handle(MakeWeakHandle(weak_ptr)); |
- // Should trigger regular copy constructor after MakeWeakHandle. |
- const WeakHandle<Derived> derived_weak_handle(MakeWeakHandle(weak_ptr)); |
- |
- EXPECT_TRUE(base_weak_handle.IsInitialized()); |
- EXPECT_TRUE(derived_weak_handle.IsInitialized()); |
-} |
- |
-TEST_F(WeakHandleTest, TypeConversionConstructorAssignment) { |
- const WeakHandle<Derived> weak_handle = |
- MakeWeakHandle(Derived().AsWeakPtr()); |
- |
- // Should trigger type conversion constructor before the assignment. |
- WeakHandle<Base> base_weak_handle; |
- base_weak_handle = weak_handle; |
- // Should trigger regular copy constructor before the assignment. |
- WeakHandle<Derived> derived_weak_handle; |
- derived_weak_handle = weak_handle; |
- |
- EXPECT_TRUE(base_weak_handle.IsInitialized()); |
- EXPECT_TRUE(derived_weak_handle.IsInitialized()); |
- // Copy constructor shouldn't construct a new |core_|. |
- EXPECT_EQ(weak_handle.core_.get(), derived_weak_handle.core_.get()); |
-} |
- |
-TEST_F(WeakHandleTest, TypeConversionConstructorUninitialized) { |
- const WeakHandle<Base> base_weak_handle = WeakHandle<Derived>(); |
- EXPECT_FALSE(base_weak_handle.IsInitialized()); |
-} |
- |
-TEST_F(WeakHandleTest, TypeConversionConstructorUninitializedAssignment) { |
- WeakHandle<Base> base_weak_handle; |
- base_weak_handle = WeakHandle<Derived>(); |
- EXPECT_FALSE(base_weak_handle.IsInitialized()); |
-} |
- |
-} // namespace browser_sync |