Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(135)

Unified Diff: base/memory/singleton_unittest.cc

Issue 1647803004: Move base to DEPS (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/memory/singleton_objc.h ('k') | base/memory/weak_ptr.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/memory/singleton_unittest.cc
diff --git a/base/memory/singleton_unittest.cc b/base/memory/singleton_unittest.cc
deleted file mode 100644
index dbff007ada7ecc27045acdff7082fb448024dab1..0000000000000000000000000000000000000000
--- a/base/memory/singleton_unittest.cc
+++ /dev/null
@@ -1,287 +0,0 @@
-// Copyright (c) 2012 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 "base/at_exit.h"
-#include "base/memory/singleton.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace {
-
-COMPILE_ASSERT(DefaultSingletonTraits<int>::kRegisterAtExit == true, a);
-
-typedef void (*CallbackFunc)();
-
-class IntSingleton {
- public:
- static IntSingleton* GetInstance() {
- return Singleton<IntSingleton>::get();
- }
-
- int value_;
-};
-
-class Init5Singleton {
- public:
- struct Trait;
-
- static Init5Singleton* GetInstance() {
- return Singleton<Init5Singleton, Trait>::get();
- }
-
- int value_;
-};
-
-struct Init5Singleton::Trait : public DefaultSingletonTraits<Init5Singleton> {
- static Init5Singleton* New() {
- Init5Singleton* instance = new Init5Singleton();
- instance->value_ = 5;
- return instance;
- }
-};
-
-int* SingletonInt() {
- return &IntSingleton::GetInstance()->value_;
-}
-
-int* SingletonInt5() {
- return &Init5Singleton::GetInstance()->value_;
-}
-
-template <typename Type>
-struct CallbackTrait : public DefaultSingletonTraits<Type> {
- static void Delete(Type* instance) {
- if (instance->callback_)
- (instance->callback_)();
- DefaultSingletonTraits<Type>::Delete(instance);
- }
-};
-
-class CallbackSingleton {
- public:
- CallbackSingleton() : callback_(NULL) { }
- CallbackFunc callback_;
-};
-
-class CallbackSingletonWithNoLeakTrait : public CallbackSingleton {
- public:
- struct Trait : public CallbackTrait<CallbackSingletonWithNoLeakTrait> { };
-
- CallbackSingletonWithNoLeakTrait() : CallbackSingleton() { }
-
- static CallbackSingletonWithNoLeakTrait* GetInstance() {
- return Singleton<CallbackSingletonWithNoLeakTrait, Trait>::get();
- }
-};
-
-class CallbackSingletonWithLeakTrait : public CallbackSingleton {
- public:
- struct Trait : public CallbackTrait<CallbackSingletonWithLeakTrait> {
- static const bool kRegisterAtExit = false;
- };
-
- CallbackSingletonWithLeakTrait() : CallbackSingleton() { }
-
- static CallbackSingletonWithLeakTrait* GetInstance() {
- return Singleton<CallbackSingletonWithLeakTrait, Trait>::get();
- }
-};
-
-class CallbackSingletonWithStaticTrait : public CallbackSingleton {
- public:
- struct Trait;
-
- CallbackSingletonWithStaticTrait() : CallbackSingleton() { }
-
- static CallbackSingletonWithStaticTrait* GetInstance() {
- return Singleton<CallbackSingletonWithStaticTrait, Trait>::get();
- }
-};
-
-struct CallbackSingletonWithStaticTrait::Trait
- : public StaticMemorySingletonTraits<CallbackSingletonWithStaticTrait> {
- static void Delete(CallbackSingletonWithStaticTrait* instance) {
- if (instance->callback_)
- (instance->callback_)();
- StaticMemorySingletonTraits<CallbackSingletonWithStaticTrait>::Delete(
- instance);
- }
-};
-
-template <class Type>
-class AlignedTestSingleton {
- public:
- AlignedTestSingleton() {}
- ~AlignedTestSingleton() {}
- static AlignedTestSingleton* GetInstance() {
- return Singleton<AlignedTestSingleton,
- StaticMemorySingletonTraits<AlignedTestSingleton> >::get();
- }
-
- Type type_;
-};
-
-
-void SingletonNoLeak(CallbackFunc CallOnQuit) {
- CallbackSingletonWithNoLeakTrait::GetInstance()->callback_ = CallOnQuit;
-}
-
-void SingletonLeak(CallbackFunc CallOnQuit) {
- CallbackSingletonWithLeakTrait::GetInstance()->callback_ = CallOnQuit;
-}
-
-CallbackFunc* GetLeakySingleton() {
- return &CallbackSingletonWithLeakTrait::GetInstance()->callback_;
-}
-
-void DeleteLeakySingleton() {
- DefaultSingletonTraits<CallbackSingletonWithLeakTrait>::Delete(
- CallbackSingletonWithLeakTrait::GetInstance());
-}
-
-void SingletonStatic(CallbackFunc CallOnQuit) {
- CallbackSingletonWithStaticTrait::GetInstance()->callback_ = CallOnQuit;
-}
-
-CallbackFunc* GetStaticSingleton() {
- return &CallbackSingletonWithStaticTrait::GetInstance()->callback_;
-}
-
-} // namespace
-
-class SingletonTest : public testing::Test {
- public:
- SingletonTest() {}
-
- void SetUp() override {
- non_leak_called_ = false;
- leaky_called_ = false;
- static_called_ = false;
- }
-
- protected:
- void VerifiesCallbacks() {
- EXPECT_TRUE(non_leak_called_);
- EXPECT_FALSE(leaky_called_);
- EXPECT_TRUE(static_called_);
- non_leak_called_ = false;
- leaky_called_ = false;
- static_called_ = false;
- }
-
- void VerifiesCallbacksNotCalled() {
- EXPECT_FALSE(non_leak_called_);
- EXPECT_FALSE(leaky_called_);
- EXPECT_FALSE(static_called_);
- non_leak_called_ = false;
- leaky_called_ = false;
- static_called_ = false;
- }
-
- static void CallbackNoLeak() {
- non_leak_called_ = true;
- }
-
- static void CallbackLeak() {
- leaky_called_ = true;
- }
-
- static void CallbackStatic() {
- static_called_ = true;
- }
-
- private:
- static bool non_leak_called_;
- static bool leaky_called_;
- static bool static_called_;
-};
-
-bool SingletonTest::non_leak_called_ = false;
-bool SingletonTest::leaky_called_ = false;
-bool SingletonTest::static_called_ = false;
-
-TEST_F(SingletonTest, Basic) {
- int* singleton_int;
- int* singleton_int_5;
- CallbackFunc* leaky_singleton;
- CallbackFunc* static_singleton;
-
- {
- base::ShadowingAtExitManager sem;
- {
- singleton_int = SingletonInt();
- }
- // Ensure POD type initialization.
- EXPECT_EQ(*singleton_int, 0);
- *singleton_int = 1;
-
- EXPECT_EQ(singleton_int, SingletonInt());
- EXPECT_EQ(*singleton_int, 1);
-
- {
- singleton_int_5 = SingletonInt5();
- }
- // Is default initialized to 5.
- EXPECT_EQ(*singleton_int_5, 5);
-
- SingletonNoLeak(&CallbackNoLeak);
- SingletonLeak(&CallbackLeak);
- SingletonStatic(&CallbackStatic);
- static_singleton = GetStaticSingleton();
- leaky_singleton = GetLeakySingleton();
- EXPECT_TRUE(leaky_singleton);
- }
-
- // Verify that only the expected callback has been called.
- VerifiesCallbacks();
- // Delete the leaky singleton.
- DeleteLeakySingleton();
-
- // The static singleton can't be acquired post-atexit.
- EXPECT_EQ(NULL, GetStaticSingleton());
-
- {
- base::ShadowingAtExitManager sem;
- // Verifiy that the variables were reset.
- {
- singleton_int = SingletonInt();
- EXPECT_EQ(*singleton_int, 0);
- }
- {
- singleton_int_5 = SingletonInt5();
- EXPECT_EQ(*singleton_int_5, 5);
- }
- {
- // Resurrect the static singleton, and assert that it
- // still points to the same (static) memory.
- CallbackSingletonWithStaticTrait::Trait::Resurrect();
- EXPECT_EQ(GetStaticSingleton(), static_singleton);
- }
- }
- // The leaky singleton shouldn't leak since SingletonLeak has not been called.
- VerifiesCallbacksNotCalled();
-}
-
-#define EXPECT_ALIGNED(ptr, align) \
- EXPECT_EQ(0u, reinterpret_cast<uintptr_t>(ptr) & (align - 1))
-
-TEST_F(SingletonTest, Alignment) {
- using base::AlignedMemory;
-
- // Create some static singletons with increasing sizes and alignment
- // requirements. By ordering this way, the linker will need to do some work to
- // ensure proper alignment of the static data.
- AlignedTestSingleton<int32>* align4 =
- AlignedTestSingleton<int32>::GetInstance();
- AlignedTestSingleton<AlignedMemory<32, 32> >* align32 =
- AlignedTestSingleton<AlignedMemory<32, 32> >::GetInstance();
- AlignedTestSingleton<AlignedMemory<128, 128> >* align128 =
- AlignedTestSingleton<AlignedMemory<128, 128> >::GetInstance();
- AlignedTestSingleton<AlignedMemory<4096, 4096> >* align4096 =
- AlignedTestSingleton<AlignedMemory<4096, 4096> >::GetInstance();
-
- EXPECT_ALIGNED(align4, 4);
- EXPECT_ALIGNED(align32, 32);
- EXPECT_ALIGNED(align128, 128);
- EXPECT_ALIGNED(align4096, 4096);
-}
« no previous file with comments | « base/memory/singleton_objc.h ('k') | base/memory/weak_ptr.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698